[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