[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