[Bf-blender-cvs] [848de67] temp-derivedmesh-looptri: No need to use looptri to convert vertex colors

Campbell Barton noreply at git.blender.org
Wed Jul 15 17:12:09 CEST 2015


Commit: 848de677e486e920c25b13a8773924fd20ef9008
Author: Campbell Barton
Date:   Thu Jul 16 01:03:20 2015 +1000
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB848de677e486e920c25b13a8773924fd20ef9008

No need to use looptri to convert vertex colors

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

M	source/blender/editors/space_view3d/drawmesh.c

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

diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index 11b4079..7d62e5a 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -590,9 +590,9 @@ static DMDrawOption draw_tface__set_draw(MTexPoly *mtexpoly, const bool UNUSED(h
 
 static void update_tface_color_layer(DerivedMesh *dm, bool use_mcol)
 {
+	const MPoly *mp = dm->getPolyArray(dm);
+	const int mpoly_num = dm->getNumPolys(dm);
 	MTexPoly *mtexpoly = DM_get_poly_data_layer(dm, CD_MTEXPOLY);
-	const MPoly *mpoly = dm->getPolyArray(dm);
-	const MLoopTri *lt = dm->looptris.array;
 	MLoopCol *finalCol;
 	int i, j;
 	MLoopCol *mloopcol = NULL;
@@ -611,71 +611,56 @@ static void update_tface_color_layer(DerivedMesh *dm, bool use_mcol)
 		CustomData_add_layer(&dm->loopData, CD_TEXTURE_MLOOPCOL, CD_ASSIGN, finalCol, dm->numLoopData);
 	}
 
-	for (i = 0; i < dm->looptris.num; i++) {
-		const MPoly *mp = &mpoly[lt->poly];
-		const unsigned int *ltri = lt->tri;
+	for (i = mpoly_num; i--; mp++) {
 		Material *ma = give_current_material(Gtexdraw.ob, mp->mat_nr + 1);
 
 		if (ma && (ma->game.flag & GEMAT_INVISIBLE)) {
 			if (mloopcol) {
-				for (j = 0; j < 3; j++) {
-					finalCol[ltri[j]] = mloopcol[ltri[j]];
-				}
+				memcpy(&finalCol[mp->loopstart], &mloopcol[mp->loopstart], sizeof(*finalCol) * mp->totloop);
 			}
 			else
-				for (j = 0; j < 3; j++) {
-					finalCol[ltri[j]].b = 255;
-					finalCol[ltri[j]].g = 255;
-					finalCol[ltri[j]].r = 255;
-				}
+				memset(&finalCol[mp->loopstart], 0xff, sizeof(*finalCol) * mp->totloop);
 		}
 		else if (mtexpoly && set_draw_settings_cached(0, mtexpoly, ma, Gtexdraw)) {
-			for (j = 0; j < 3; j++) {
-				finalCol[ltri[j]].b = 255;
-				finalCol[ltri[j]].g = 0;
-				finalCol[ltri[j]].r = 255;
+			int loop_index = mp->loopstart;;
+			for (j = 0; j < mp->totloop; j++, loop_index++) {
+				finalCol[loop_index].r = 255;
+				finalCol[loop_index].g = 0;
+				finalCol[loop_index].b = 255;
 			}
 		}
 		else if (ma && (ma->shade_flag & MA_OBCOLOR)) {
-			for (j = 0; j < 3; j++) {
-				finalCol[ltri[j]].b = Gtexdraw.obcol[0];
-				finalCol[ltri[j]].g = Gtexdraw.obcol[1];
-				finalCol[ltri[j]].r = Gtexdraw.obcol[2];
+			int loop_index = mp->loopstart;;
+			for (j = 0; j < mp->totloop; j++, loop_index++) {
+				copy_v3_v3_char(&finalCol[loop_index].r, (char *)Gtexdraw.obcol);
 			}
 		}
 		else if (!mloopcol) {
 			if (mtexpoly) {
-				for (j = 0; j < 3; j++) {
-					finalCol[ltri[j]].b = 255;
-					finalCol[ltri[j]].g = 255;
-					finalCol[ltri[j]].r = 255;
-				}
+				memset(&finalCol[mp->loopstart], 0xff, sizeof(*finalCol) * mp->totloop);
 			}
 			else {
 				float col[3];
 
 				if (ma) {
+					int loop_index = mp->loopstart;
+					MLoopCol lcol;
+
 					if (Gtexdraw.color_profile) linearrgb_to_srgb_v3_v3(col, &ma->r);
 					else copy_v3_v3(col, &ma->r);
+					rgb_float_to_uchar((unsigned char *)&lcol.r, col);
+					lcol.a = 255;
 					
-					for (j = 0; j < 3; j++) {
-						finalCol[ltri[j]].b = FTOCHAR(col[0]);
-						finalCol[ltri[j]].g = FTOCHAR(col[1]);
-						finalCol[ltri[j]].r = FTOCHAR(col[2]);
+					for (j = 0; j < mp->totloop; j++, loop_index++) {
+						finalCol[loop_index] = lcol;
 					}
 				}
 				else
-					for (j = 0; j < 3; j++) {
-						finalCol[ltri[j]].b = 255;
-						finalCol[ltri[j]].g = 255;
-						finalCol[ltri[j]].r = 255;
-					}
+					memset(&finalCol[mp->loopstart], 0xff, sizeof(*finalCol) * mp->totloop);
 			}
 		}
 		else {
-			for (j = 0; j < 3; j++) {
-				finalCol[ltri[j]] = mloopcol[ltri[j]];
-			}
+			memcpy(&finalCol[mp->loopstart], &mloopcol[mp->loopstart], sizeof(*finalCol) * mp->totloop);
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list