[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42254] branches/bmesh/blender/source/ blender/blenkernel/intern/subsurf_ccg.c: subsurf-specific implementations of getVert/Edge/TessFaceData
Andrew Wiggin
ender79bl at gmail.com
Tue Nov 29 14:11:16 CET 2011
Revision: 42254
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42254
Author: ender79
Date: 2011-11-29 13:11:14 +0000 (Tue, 29 Nov 2011)
Log Message:
-----------
subsurf-specific implementations of getVert/Edge/TessFaceData
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c 2011-11-29 13:01:51 UTC (rev 42253)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c 2011-11-29 13:11:14 UTC (rev 42254)
@@ -2446,6 +2446,12 @@
int *origindex;
int a, index, totnone, totorig;
+ /* Avoid re-creation if the layer exists already */
+ origindex = DM_get_vert_data_layer(dm, CD_ORIGINDEX);
+ if (origindex) {
+ return origindex;
+ }
+
DM_add_vert_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
origindex= DM_get_vert_data_layer(dm, CD_ORIGINDEX);
@@ -2477,6 +2483,12 @@
int a, i, index, totnone, totorig, totedge;
int edgeSize= ccgSubSurf_getEdgeSize(ss);
+ /* Avoid re-creation if the layer exists already */
+ origindex = DM_get_edge_data_layer(dm, CD_ORIGINDEX);
+ if (origindex) {
+ return origindex;
+ }
+
DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
origindex= DM_get_edge_data_layer(dm, CD_ORIGINDEX);
@@ -2512,6 +2524,12 @@
int a, i, index, totface;
int gridFaces = ccgSubSurf_getGridSize(ss) - 1;
+ /* Avoid re-creation if the layer exists already */
+ origindex = DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
+ if (origindex) {
+ return origindex;
+ }
+
DM_add_tessface_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
origindex= DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
@@ -2532,6 +2550,36 @@
return DM_get_tessface_data_layer(dm, type);
}
+static void *ccgDM_get_vert_data(DerivedMesh *dm, int index, int type)
+{
+ if (type == CD_ORIGINDEX) {
+ /* ensure creation of CD_ORIGINDEX layer */
+ ccgDM_get_vert_data_layer(dm, type);
+ }
+
+ return DM_get_vert_data(dm, index, type);
+}
+
+static void *ccgDM_get_edge_data(DerivedMesh *dm, int index, int type)
+{
+ if (type == CD_ORIGINDEX) {
+ /* ensure creation of CD_ORIGINDEX layer */
+ ccgDM_get_edge_data_layer(dm, type);
+ }
+
+ return DM_get_edge_data(dm, index, type);
+}
+
+static void *ccgDM_get_tessface_data(DerivedMesh *dm, int index, int type)
+{
+ if (type == CD_ORIGINDEX) {
+ /* ensure creation of CD_ORIGINDEX layer */
+ ccgDM_get_tessface_data_layer(dm, type);
+ }
+
+ return DM_get_tessface_data(dm, index, type);
+}
+
static int ccgDM_getNumGrids(DerivedMesh *dm)
{
CCGDerivedMesh *cgdm= (CCGDerivedMesh*)dm;
@@ -2829,6 +2877,10 @@
ccgdm->dm.copyTessFaceArray = ccgDM_copyFinalFaceArray;
ccgdm->dm.copyLoopArray = ccgDM_copyFinalLoopArray;
ccgdm->dm.copyPolyArray = ccgDM_copyFinalPolyArray;
+
+ ccgdm->dm.getVertData = ccgDM_get_vert_data;
+ ccgdm->dm.getEdgeData = ccgDM_get_edge_data;
+ ccgdm->dm.getTessFaceData = ccgDM_get_tessface_data;
ccgdm->dm.getVertDataArray = ccgDM_get_vert_data_layer;
ccgdm->dm.getEdgeDataArray = ccgDM_get_edge_data_layer;
ccgdm->dm.getTessFaceDataArray = ccgDM_get_tessface_data_layer;
More information about the Bf-blender-cvs
mailing list