[Bf-blender-cvs] [2e80fce] temp-derivedmesh-looptri: Use loop colors for update_tface_color_layer

Campbell Barton noreply at git.blender.org
Sat Jul 11 22:51:09 CEST 2015


Commit: 2e80fce5ffb74737977e75c3003e2371ff48af1f
Author: Campbell Barton
Date:   Sun Jul 12 06:45:00 2015 +1000
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB2e80fce5ffb74737977e75c3003e2371ff48af1f

Use loop colors for update_tface_color_layer

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

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 89d602b..ce0eab7 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -591,15 +591,16 @@ static DMDrawOption draw_tface__set_draw(MTFace *tface, const bool UNUSED(has_mc
 static void update_tface_color_layer(DerivedMesh *dm, bool use_mcol)
 {
 	MTFace *tface = DM_get_tessface_data_layer(dm, CD_MTFACE);
-	MFace *mface = dm->getTessFaceArray(dm);
+	const MPoly *mpoly = dm->getPolyArray(dm);
+	const MLoopTri *lt = dm->looptris.array;
 	MLoopCol *finalCol;
 	int i, j;
-	MCol *mcol = NULL;
+	MLoopCol *mloopcol = NULL;
 
 	if (use_mcol) {
-		mcol = dm->getTessFaceDataArray(dm, CD_PREVIEW_MCOL);
-		if (!mcol)
-			mcol = dm->getTessFaceDataArray(dm, CD_MCOL);
+		mloopcol = dm->getLoopDataArray(dm, CD_PREVIEW_MLOOPCOL);
+		if (!mloopcol)
+			mloopcol = dm->getLoopDataArray(dm, CD_MLOOPCOL);
 	}
 
 	if (CustomData_has_layer(&dm->loopData, CD_TEXTURE_MLOOPCOL)) {
@@ -610,39 +611,44 @@ 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->getNumTessFaces(dm); i++) {
-		Material *ma = give_current_material(Gtexdraw.ob, mface[i].mat_nr + 1);
+	for (i = 0; i < dm->looptris.num; i++) {
+		const MPoly *mp = &mpoly[lt->poly];
+		const unsigned int *ltri = lt->tri;
+		Material *ma = give_current_material(Gtexdraw.ob, mp->mat_nr + 1);
 
 		if (ma && (ma->game.flag & GEMAT_INVISIBLE)) {
-			if (mcol)
-				memcpy(&finalCol[i * 4], &mcol[i * 4], sizeof(MCol) * 4);
+			if (mloopcol) {
+				for (j = 0; j < 3; j++) {
+					finalCol[ltri[j]] = mloopcol[ltri[j]];
+				}
+			}
 			else
-				for (j = 0; j < 4; j++) {
-					finalCol[i * 4 + j].b = 255;
-					finalCol[i * 4 + j].g = 255;
-					finalCol[i * 4 + j].r = 255;
+				for (j = 0; j < 3; j++) {
+					finalCol[ltri[j]].b = 255;
+					finalCol[ltri[j]].g = 255;
+					finalCol[ltri[j]].r = 255;
 				}
 		}
 		else if (tface && set_draw_settings_cached(0, tface, ma, Gtexdraw)) {
-			for (j = 0; j < 4; j++) {
-				finalCol[i * 4 + j].b = 255;
-				finalCol[i * 4 + j].g = 0;
-				finalCol[i * 4 + j].r = 255;
+			for (j = 0; j < 3; j++) {
+				finalCol[ltri[j]].b = 255;
+				finalCol[ltri[j]].g = 0;
+				finalCol[ltri[j]].r = 255;
 			}
 		}
 		else if (ma && (ma->shade_flag & MA_OBCOLOR)) {
-			for (j = 0; j < 4; j++) {
-				finalCol[i * 4 + j].b = Gtexdraw.obcol[0];
-				finalCol[i * 4 + j].g = Gtexdraw.obcol[1];
-				finalCol[i * 4 + j].r = Gtexdraw.obcol[2];
+			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];
 			}
 		}
-		else if (!mcol) {
+		else if (!mloopcol) {
 			if (tface) {
-				for (j = 0; j < 4; j++) {
-					finalCol[i * 4 + j].b = 255;
-					finalCol[i * 4 + j].g = 255;
-					finalCol[i * 4 + j].r = 255;
+				for (j = 0; j < 3; j++) {
+					finalCol[ltri[j]].b = 255;
+					finalCol[ltri[j]].g = 255;
+					finalCol[ltri[j]].r = 255;
 				}
 			}
 			else {
@@ -652,25 +658,25 @@ static void update_tface_color_layer(DerivedMesh *dm, bool use_mcol)
 					if (Gtexdraw.color_profile) linearrgb_to_srgb_v3_v3(col, &ma->r);
 					else copy_v3_v3(col, &ma->r);
 					
-					for (j = 0; j < 4; j++) {
-						finalCol[i * 4 + j].b = FTOCHAR(col[0]);
-						finalCol[i * 4 + j].g = FTOCHAR(col[1]);
-						finalCol[i * 4 + j].r = FTOCHAR(col[2]);
+					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]);
 					}
 				}
 				else
-					for (j = 0; j < 4; j++) {
-						finalCol[i * 4 + j].b = 255;
-						finalCol[i * 4 + j].g = 255;
-						finalCol[i * 4 + j].r = 255;
+					for (j = 0; j < 3; j++) {
+						finalCol[ltri[j]].b = 255;
+						finalCol[ltri[j]].g = 255;
+						finalCol[ltri[j]].r = 255;
 					}
 			}
 		}
 		else {
-			for (j = 0; j < 4; j++) {
-				finalCol[i * 4 + j].r = mcol[i * 4 + j].r;
-				finalCol[i * 4 + j].g = mcol[i * 4 + j].g;
-				finalCol[i * 4 + j].b = mcol[i * 4 + j].b;
+			for (j = 0; j < 3; j++) {
+				finalCol[ltri[j]].r = mloopcol[i * 4 + j].r;
+				finalCol[ltri[j]].g = mloopcol[i * 4 + j].g;
+				finalCol[ltri[j]].b = mloopcol[i * 4 + j].b;
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list