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);
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to