[Bf-blender-cvs] [b72194f] wiggly-widgets: Fix facemap drawing crash

Julian Eisel noreply at git.blender.org
Wed Sep 16 19:21:34 CEST 2015


Commit: b72194f61d2cab6c20e2e268b76b5c7e76c1a0c2
Author: Julian Eisel
Date:   Wed Sep 16 19:06:30 2015 +0200
Branches: wiggly-widgets
https://developer.blender.org/rBb72194f61d2cab6c20e2e268b76b5c7e76c1a0c2

Fix facemap drawing crash

Issue was that MPoly wasn't reset after iterating.

===================================================================

M	source/blender/blenkernel/intern/cdderivedmesh.c

===================================================================

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 1b3fd5e..e91db05 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1578,7 +1578,7 @@ static void cdDM_buffer_copy_facemap(DerivedMesh *dm, unsigned int *varray)
 	GPUDrawObject *gdo = dm->drawObject;
 	int *facemap_iter, *facemap = DM_get_poly_data_layer(dm, CD_FACEMAP);
 	int i, totpoly, offset = 0;
-	MPoly *mp = dm->getPolyArray(dm);
+	MPoly *mp_iter, *mp = dm->getPolyArray(dm);
 	const MLoopTri *ltri = dm->getLoopTriArray(dm);
 	MLoop *mloop = dm->getLoopArray(dm);
 	int *facemap_offset;
@@ -1601,8 +1601,9 @@ static void cdDM_buffer_copy_facemap(DerivedMesh *dm, unsigned int *varray)
 	facemap_offset = MEM_callocN(gdo->totfacemaps * sizeof(*facemap_offset), "facemap_offset");
 
 	facemap_iter = facemap;
-	for (i = 0; i < totpoly; i++, facemap_iter++, mp++) {
-		gdo->facemap_count[*facemap_iter] += mp->totloop - 2;
+	mp_iter = mp;
+	for (i = 0; i < totpoly; i++, facemap_iter++, mp_iter++) {
+		gdo->facemap_count[*facemap_iter] += mp_iter->totloop - 2;
 	}
 
 	for (i = 0; i < gdo->totfacemaps; i++) {
@@ -1611,10 +1612,11 @@ static void cdDM_buffer_copy_facemap(DerivedMesh *dm, unsigned int *varray)
 	}
 
 	facemap_iter = facemap;
-	for (i = 0; i < totpoly; i++, facemap_iter++, mp++) {
-		int numtri = mp->totloop - 2;
+	mp_iter = mp;
+	for (i = 0; i < totpoly; i++, facemap_iter++, mp_iter++) {
+		int numtri = mp_iter->totloop - 2;
 		int fmap_offset = (gdo->facemap_start[*facemap_iter] + facemap_offset[*facemap_iter]) * 3;
-		const MLoopTri *ltri_iter = ltri + poly_to_tri_count(i, mp->loopstart);
+		const MLoopTri *ltri_iter = ltri + poly_to_tri_count(i, mp_iter->loopstart);
 
 		facemap_offset[*facemap_iter] += numtri;




More information about the Bf-blender-cvs mailing list