[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