[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42105] branches/bmesh/blender/source/ blender/blenkernel/intern: r42101 causes problems.

Andrew Wiggin ender79bl at gmail.com
Wed Nov 23 21:44:04 CET 2011


Revision: 42105
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42105
Author:   ender79
Date:     2011-11-23 20:44:04 +0000 (Wed, 23 Nov 2011)
Log Message:
-----------
r42101 causes problems. reverting and instead make correct CD_ORIGINDEX for tesselated faces to fix the problem.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42101

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-11-23 19:05:52 UTC (rev 42104)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-11-23 20:44:04 UTC (rev 42105)
@@ -686,7 +686,7 @@
 	MCol *realcol = dm->getTessFaceDataArray(dm, CD_TEXTURE_MCOL);
 	float *nors= dm->getTessFaceDataArray(dm, CD_NORMAL);
 	MTFace *tf = DM_get_tessface_data_layer(dm, CD_MTFACE);
-	int i, j, orig, *index = DM_get_tessface_data_layer(dm, CD_POLYINDEX);
+	int i, j, orig, *index = DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
 	int startFace = 0, lastFlag = 0xdeadbeef;
 	MCol *mcol = dm->getTessFaceDataArray(dm, CD_WEIGHT_MCOL);
 	if(!mcol)
@@ -878,7 +878,7 @@
 	MFace *mf = cddm->mface;
 	MCol *mc;
 	float *nors= DM_get_tessface_data_layer(dm, CD_NORMAL);
-	int i, orig, *index = DM_get_tessface_data_layer(dm, CD_POLYINDEX);
+	int i, orig, *index = DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
 
 	mc = DM_get_tessface_data_layer(dm, CD_ID_MCOL);
 	if(!mc)
@@ -1105,7 +1105,7 @@
 	/* MTFace *tf = dm->getTessFaceDataArray(dm, CD_MTFACE); */ /* UNUSED */
 	float (*nors)[3] = dm->getTessFaceDataArray(dm, CD_NORMAL);
 	int a, b, dodraw, matnr, new_matnr;
-	int orig, *index = dm->getTessFaceDataArray(dm, CD_POLYINDEX);
+	int orig, *index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
 
 	cdDM_update_normals_from_pbvh(dm);
 
@@ -1401,7 +1401,7 @@
 	MFace *mf = cddm->mface;
 	float (*nors)[3] = dm->getTessFaceDataArray(dm, CD_NORMAL);
 	int a, matnr, new_matnr;
-	int orig, *index = dm->getTessFaceDataArray(dm, CD_POLYINDEX);
+	int orig, *index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
 
 	cdDM_update_normals_from_pbvh(dm);
 
@@ -1587,7 +1587,12 @@
 	dm->numFaceData = mesh_recalcTesselation(&dm->faceData, &dm->loopData, 
 		&dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData, 
 		dm->numPolyData);
-	
+
+	if (!CustomData_get_layer(&dm->faceData, CD_ORIGINDEX)) {
+		int *polyIndex = CustomData_get_layer(&dm->faceData, CD_POLYINDEX);
+		CustomData_add_layer(&dm->faceData, CD_ORIGINDEX, CD_REFERENCE, polyIndex, dm->numFaceData);
+	}
+
 	cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
 }
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-11-23 19:05:52 UTC (rev 42104)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-11-23 20:44:04 UTC (rev 42105)
@@ -2388,8 +2388,14 @@
 	totface = k;
 	
 	CustomData_add_layer(fdata, CD_MFACE, CD_ASSIGN, mface, totface);
+
+	/* CD_POLYINDEX will contain an array of indices from tessfaces to the polygons
+	   they are directly tesselated from */
 	CustomData_add_layer(fdata, CD_POLYINDEX, CD_ASSIGN, polyIndex, totface);
 	if (origIndex) {
+		/* If polys had a CD_ORIGINDEX layer, then the tesselated faces will get this
+		   layer as well, pointing to polys from the original mesh (not the polys
+		   that just got tesselated) */
 		CustomData_add_layer(fdata, CD_ORIGINDEX, CD_ASSIGN, origIndex, totface);
 	}
 




More information about the Bf-blender-cvs mailing list