Commit: 533d673a3090f1ec14e9807e1ef695a702c37c90
Author: Campbell Barton
Date:   Thu Apr 13 00:19:54 2017 +1000
Branches: soc-2016-pbvh-painting
https://developer.blender.org/rB533d673a3090f1ec14e9807e1ef695a702c37c90

Remove unnecessary loop over polygon-loops

vert_to_poly & vert_to_loop are aligned so we can step over them at the
same time to avoid nested loops here.

Add assert to check this doesn't get out of sync

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

M       source/blender/editors/sculpt_paint/paint_vertex.c

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

diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c 
b/source/blender/editors/sculpt_paint/paint_vertex.c
index 59d249e0de7..1bc83f6a3db 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -3405,26 +3405,22 @@ static void do_vpaint_brush_draw_task_cb_ex(
                                        /* For each poly owning this vert, 
paint each loop belonging to this vert. */
                                        for (int j = 0; j < 
ss->modes.vwpaint.vert_to_poly[v_index].count; j++) {
                                                const int p_index = 
ss->modes.vwpaint.vert_to_poly[v_index].indices[j];
-                                               const MPoly * mp = 
&data->me->mpoly[p_index];
+                                               const int l_index = 
ss->modes.vwpaint.vert_to_loop[v_index].indices[j];
+                                               
BLI_assert(data->me->mloop[l_index].v == v_index);
+                                               const MPoly *mp = 
&data->me->mpoly[p_index];
                                                if (!use_face_sel || mp->flag & 
ME_FACE_SEL) {
-                                                       for (int k = 0; k < 
mp->totloop; ++k) {
-                                                               const int 
l_index = mp->loopstart + k;
-                                                               const MLoop *l 
= &data->me->mloop[l_index];
-                                                               if (l->v == 
v_index) {
-                                                                       /* Get 
the previous loop color */
-                                                                       if 
(ss->modes.vwpaint.previous_color[l_index] == 0) {
-                                                                               
ss->modes.vwpaint.previous_color[l_index] = lcol[l_index];
-                                                                       }
-                                                                       const 
float final_alpha =
-                                                                               
255 * brush_fade * brush_strength * view_dot *
-                                                                               
tex_alpha * brush_alpha_pressure * grid_alpha;
-                                                                       /* Mix 
the new color with the original based on final_alpha. */
-                                                                       
lcol[l_index] = vpaint_blend(
-                                                                               
data->vp, lcol[l_index],
-                                                                               
ss->modes.vwpaint.previous_color[l_index], color_final,
-                                                                               
final_alpha, 255 * brush_strength);
-                                                               }
+                                                       /* Get the previous 
loop color */
+                                                       if 
(ss->modes.vwpaint.previous_color[l_index] == 0) {
+                                                               
ss->modes.vwpaint.previous_color[l_index] = lcol[l_index];
                                                        }
+                                                       const float final_alpha 
=
+                                                               255 * 
brush_fade * brush_strength * view_dot *
+                                                               tex_alpha * 
brush_alpha_pressure * grid_alpha;
+                                                       /* Mix the new color 
with the original based on final_alpha. */
+                                                       lcol[l_index] = 
vpaint_blend(
+                                                               data->vp, 
lcol[l_index],
+                                                               
ss->modes.vwpaint.previous_color[l_index], color_final,
+                                                               final_alpha, 
255 * brush_strength);
                                                }
                                        }
                                }
@@ -3509,27 +3505,23 @@ static void do_vpaint_brush_blur_task_cb_ex(
                                                /* For each poly owning this 
vert, paint each loop belonging to this vert. */
                                                for (int j = 0; j < 
ss->modes.vwpaint.vert_to_poly[v_index].count; j++) {
                                                        const int p_index = 
ss->modes.vwpaint.vert_to_poly[v_index].indices[j];
+                                                       const int l_index = 
ss->modes.vwpaint.vert_to_loop[v_index].indices[j];
+                                                       
BLI_assert(data->me->mloop[l_index].v == v_index);
                                                        const MPoly *mp = 
&data->me->mpoly[p_index];
                                                        if (!use_face_sel || 
mp->flag & ME_FACE_SEL) {
-                                                               for (int k = 0; 
k < mp->totloop; ++k) {
-                                                                       const 
int l_index = mp->loopstart + k;
-                                                                       const 
MLoop *l = &data->me->mloop[l_index];
-                                                                       if 
(l->v == v_index) {
-                                                                               
/* Get the previous loop color */
-                                                                               
if (ss->modes.vwpaint.previous_color[l_index] == 0) {
-                                                                               
        ss->modes.vwpaint.previous_color[l_index] = lcol[l_index];
-                                                                               
}
-                                                                               
const float final_alpha =
-                                                                               
        255 * brush_fade * brush_strength * view_dot *
-                                                                               
        brush_alpha_pressure * grid_alpha;
-                                                                               
/* Mix the new color with the original
-                                                                               
 * based on the brush strength and the curve. */
-                                                                               
lcol[l_index] = vpaint_blend(
-                                                                               
        data->vp, lcol[l_index],
-                                                                               
        ss->modes.vwpaint.previous_color[l_index],
-                                                                               
        *((unsigned int *)col), final_alpha, 255 * brush_strength);
-                                                                       }
+                                                               /* Get the 
previous loop color */
+                                                               if 
(ss->modes.vwpaint.previous_color[l_index] == 0) {
+                                                                       
ss->modes.vwpaint.previous_color[l_index] = lcol[l_index];
                                                                }
+                                                               const float 
final_alpha =
+                                                                       255 * 
brush_fade * brush_strength * view_dot *
+                                                                       
brush_alpha_pressure * grid_alpha;
+                                                               /* Mix the new 
color with the original
+                                                                * based on the 
brush strength and the curve. */
+                                                               lcol[l_index] = 
vpaint_blend(
+                                                                       
data->vp, lcol[l_index],
+                                                                       
ss->modes.vwpaint.previous_color[l_index],
+                                                                       
*((unsigned int *)col), final_alpha, 255 * brush_strength);
                                                        }
                                                }
                                        }
@@ -3598,10 +3590,11 @@ static void do_vpaint_brush_smudge_task_cb_ex(
                                                unsigned int color_final = 0;
                                                for (int j = 0; j < 
ss->modes.vwpaint.vert_to_poly[v_index].count; j++) {
                                                        const int p_index = 
ss->modes.vwpaint.vert_to_poly[v_index].indices[j];
+                                                       const int l_index = 
ss->modes.vwpaint.vert_to_loop[v_index].indices[j];
+                                                       
BLI_assert(data->me->mloop[l_index].v == v_index);
                                                        const MPoly *mp = 
&data->me->mpoly[p_index];
                                                        if (!use_face_sel || 
mp->flag & ME_FACE_SEL) {
                                                                for (int k = 0; 
k < mp->totloop; k++) {
-                                                                       const 
unsigned int l_index = mp->loopstart + k;
                                                                        const 
MLoop *ml = &data->me->mloop[l_index];
                                                                        const 
unsigned int v_other_index = ml->v;
                                                                        const 
MVert *mv_other = &data->me->mvert[v_other_index];
@@ -3625,28 +3618,24 @@ static void do_vpaint_brush_smudge_task_cb_ex(
                                                if (do_color) {
                                                        /* For each poly owning 
this vert, paint each loop belonging to this vert. */
                                                        for (int j = 0; j < 
ss->modes.vwpaint.vert_to_poly[v_index].count; j++) {
-                                                               int p_index = 
ss->modes.vwpaint.vert_to_poly[v_index].indices[j];
+                                                               const int 
p_index = ss->modes.vwpaint.vert_to_poly[v_index].indices[j];
+                                                               const int 
l_index = ss->modes.vwpaint.vert_to_loop[v_index].indices[j];
+                                                               
BLI_assert(data->me->mloop[l_index].v == v_index);
                                                                const MPoly *mp 
= &data->me->mpoly[p_index];
                                                                if 
(!use_face_sel || mp->flag & ME_FACE_SEL) {
-                                                                       for 
(int k = 0; k < mp->totloop; ++k) {
-                                                                               
int l_index = mp->loopstart + k;
-                                                                               
const MLoop *ml = &data->me->mloop[l_index];
-                                                                               
if (ml->v == v_index) {
-                                                                               
        /* Get the previous loop color */
-                                                                               
        if (ss->modes.vwpaint.previous_color[l_index] == 0) {
-                                                                               
                ss->modes.vwpaint.previous_color[l_index] = lcol[l_index];
-                                                                               
        }
-                                                                               
        const float final_alpha =
-                                                                               
                255 * brush_fade * brush_strength *
-                                                                               
                view_dot * brush_alpha_pressure * grid_alpha;
-                                                                               
        /* Mix the new color with the original
-                                                                               
         * based on the brush strength and the curve. */
-                                                                               
        lcol[l_index] = vpaint_blend(
-                                                                               
                data->vp, lcol[l_index],
-                                                                               
                ss->modes.vwpaint.previous_color[l_index], color_final,
-                                                                               
                final_alpha, 255 * brush_strength);
-                                                                               
}
+                                                                       /* Get 
the previous loop color */
+                                                                       if 
(ss->modes.vwpaint.previous_color[l_index] == 0) {
+                                                                               
ss->modes.vwpaint.previous_color[l_index] = lcol[l_index];
                                                                        }
+                                                                       const 
float final_alpha =
+                                                                               
255 * brush_fade * brush_strength *
+                                                                               
view_dot * brush_alpha_pressure * grid_alpha;
+                                                                       /* Mix 
the new color with the original
+                                                                        * 
based on the brush strength and the curve. */
+                                                                       
lcol[l_index] = vpaint_blend(
+                                                                               
data->vp, lcol[l_index],
+                                                                               
ss->modes.vwpaint.previous_color[l_index], color_final,
+                                                                               
final_alpha, 255 * brush_strength);
                                                                }
                                                        }
                                                }

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

Reply via email to