[Bf-blender-cvs] [376b125] temp-derivedmesh-looptri: Port texture paint and mcolor GPU upload to new design

Antony Riakiotakis noreply at git.blender.org
Wed Jul 15 19:57:57 CEST 2015


Commit: 376b125a8650d18e2f1be1cb2dd208f51b7e3808
Author: Antony Riakiotakis
Date:   Wed Jul 15 19:57:23 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB376b125a8650d18e2f1be1cb2dd208f51b7e3808

Port texture paint and mcolor GPU upload to new design

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

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

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

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index d5c5984..bf1a9cf 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1383,17 +1383,18 @@ static void cdDM_buffer_copy_uv(
 static void cdDM_buffer_copy_uv_texpaint(
         DerivedMesh *dm, float *varray)
 {
-	int i, tottri;
+	int i, j, totpoly;
 	int start;
 
 	const MPoly *mpoly;
-	const MLoopTri *lt;
 
 	int totmaterial = dm->totmat;
 	const MLoopUV **uv_base;
 	const MLoopUV  *uv_stencil_base;
 	int stencil;
 
+	totpoly = dm->getNumPolys(dm);
+
 	/* should have been checked for before, reassert */
 	BLI_assert(DM_get_loop_data_layer(dm, CD_MLOOPUV));
 	uv_base = MEM_mallocN(totmaterial * sizeof(*uv_base), "texslots");
@@ -1406,23 +1407,16 @@ static void cdDM_buffer_copy_uv_texpaint(
 	uv_stencil_base = CustomData_get_layer_n(&dm->loopData, CD_MLOOPUV, stencil);
 
 	mpoly = dm->getPolyArray(dm);
-	lt = dm->looptris.array;
-	tottri = dm->looptris.num;
 	start = 0;
 
-	for (i = 0; i < tottri; i++, lt++) {
-		const MPoly *mp = &mpoly[lt->poly];
-		const unsigned int *ltri = lt->tri;
-		int mat_i = mp->mat_nr;
+	for (i = 0; i < totpoly; i++, mpoly++) {
+		int mat_i = mpoly->mat_nr;
 
-		/* v1 v2 v3 */
-		copy_v2_v2(&varray[start + 0], uv_base[mat_i][ltri[0]].uv);
-		copy_v2_v2(&varray[start + 2], uv_stencil_base[ltri[0]].uv);
-		copy_v2_v2(&varray[start + 4], uv_base[mat_i][ltri[1]].uv);
-		copy_v2_v2(&varray[start + 6], uv_stencil_base[ltri[1]].uv);
-		copy_v2_v2(&varray[start + 8], uv_base[mat_i][ltri[2]].uv);
-		copy_v2_v2(&varray[start + 10], uv_stencil_base[ltri[2]].uv);
-		start += 12;
+		for (j = 0; j < mpoly->totloop; j++) {
+			copy_v2_v2(&varray[start], uv_base[mat_i][mpoly->loopstart + j].uv);
+			copy_v2_v2(&varray[start + 2], uv_stencil_base[mpoly->loopstart + j].uv);
+			start += 4;
+		}
 	}
 
 	MEM_freeN(uv_base);
@@ -1433,24 +1427,21 @@ static void cdDM_buffer_copy_mcol(
         DerivedMesh *dm, unsigned char *varray,
         const void *user_data)
 {
-	int i, tottri;
+	int i, j, totpoly;
 	int start;
-	const MLoopTri *lt;
 
 	const MLoopCol *mloopcol = user_data;
+	const MPoly *mpoly = dm->getPolyArray(dm);
 
-	lt = dm->looptris.array;
-	tottri = dm->looptris.num;
-	start = 0;
+	totpoly = dm->getNumPolys(dm);
 
-	for (i = 0; i < tottri; i++, lt++) {
-		const unsigned int *ltri = lt->tri;
+	start = 0;
 
-		/* v1 v2 v3 */
-		copy_v3_v3_char((char *)&varray[start + 0], &mloopcol[ltri[0]].r);
-		copy_v3_v3_char((char *)&varray[start + 3], &mloopcol[ltri[1]].r);
-		copy_v3_v3_char((char *)&varray[start + 6], &mloopcol[ltri[2]].r);
-		start += 9;
+	for (i = 0; i < totpoly; i++, mpoly++) {
+		for (j = 0; j < mpoly->totloop; j++) {
+			copy_v3_v3_char((char *)&varray[start], &mloopcol[mpoly->loopstart + j].r);
+			start += 3;
+		}
 	}
 }




More information about the Bf-blender-cvs mailing list