[Bf-blender-cvs] [cccb8a87032] soc-2016-pbvh-painting: Move view_dot > 0.0 checks to first possible location
Campbell Barton
noreply at git.blender.org
Wed Apr 12 16:58:42 CEST 2017
Commit: cccb8a870327d37c1292ab32d3144a2be9bc7b46
Author: Campbell Barton
Date: Thu Apr 13 00:47:33 2017 +1000
Branches: soc-2016-pbvh-painting
https://developer.blender.org/rBcccb8a870327d37c1292ab32d3144a2be9bc7b46
Move view_dot > 0.0 checks to first possible location
===================================================================
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 a3cd071b720..e7a855546f0 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -2425,15 +2425,15 @@ static void do_wpaint_brush_blur_task_cb_ex(
/* Apply the weight to the vertex. */
if (total_hit_loops != 0) {
- const float brush_fade = BKE_brush_curve_strength(brush, sqrtf(test.dist), cache->radius);
const float view_dot = (vd.no) ? dot_vf3vs3(cache->sculpt_normal_symm, vd.no) : 1.0;
- const float final_alpha =
- view_dot * brush_fade * brush_strength *
- grid_alpha * brush_alpha_pressure;
- weight_final /= total_hit_loops;
-
- /* Only paint visable verts */
if (view_dot > 0.0) {
+ const float brush_fade = BKE_brush_curve_strength(brush, sqrtf(test.dist), cache->radius);
+ const float final_alpha =
+ view_dot * brush_fade * brush_strength *
+ grid_alpha * brush_alpha_pressure;
+ weight_final /= total_hit_loops;
+
+ /* Only paint visable verts */
do_weight_paint_vertex(
data->vp, data->ob, data->wpi,
v_index, final_alpha, weight_final);
@@ -2473,64 +2473,66 @@ static void do_wpaint_brush_smudge_task_cb_ex(
sculpt_brush_test_init(ss, &test);
if (sculpt_brush_test_fast(&test, vd.co)) {
- bool do_color = false;
const float view_dot = (vd.no) ? dot_vf3vs3(cache->sculpt_normal_symm, vd.no) : 1.0;
+ if (view_dot > 0.0) {
+ bool do_color = false;
+
+ /* For grid based pbvh, take the vert whose loop cooresponds to the current grid.
+ * Otherwise, take the current vert. */
+ int v_index;
+ float grid_alpha = 1.0;
+ if (ccgdm) {
+ v_index = data->me->mloop[vd.grid_indices[vd.g]].v;
+ grid_alpha = 1.0 / vd.gridsize;
+ }
+ else {
+ v_index = vd.vert_indices[vd.i];
+ }
+ const MVert *mv_curr = &data->me->mvert[v_index];
+ const char v_flag = data->me->mvert[v_index].flag;
+ /* If the vertex is selected */
+ if (!(use_face_sel || use_vert_sel) || v_flag & SELECT) {
+ /* Minimum dot product between brush direction and current
+ * to neighbor direction is 0.0, meaning orthogonal. */
+ float stroke_dot_max = 0.0f;
- /* For grid based pbvh, take the vert whose loop cooresponds to the current grid.
- * Otherwise, take the current vert. */
- int v_index;
- float grid_alpha = 1.0;
- if (ccgdm) {
- v_index = data->me->mloop[vd.grid_indices[vd.g]].v;
- grid_alpha = 1.0 / vd.gridsize;
- }
- else {
- v_index = vd.vert_indices[vd.i];
- }
- const MVert *mv_curr = &data->me->mvert[v_index];
- const char v_flag = data->me->mvert[v_index].flag;
- /* If the vertex is selected */
- if (!(use_face_sel || use_vert_sel) || v_flag & SELECT) {
- /* Minimum dot product between brush direction and current
- * to neighbor direction is 0.0, meaning orthogonal. */
- float stroke_dot_max = 0.0f;
-
- /* Get the color of the loop in the opposite direction of the brush movement
- * (this callback is specifically for smudge.) */
- float weight_final = 0.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 MPoly *mp = &data->me->mpoly[p_index];
- 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];
-
- /* Get the direction from the selected vert to the neighbor. */
- float other_dir[3];
- sub_v3_v3v3(other_dir, mv_curr->co, mv_other->co);
- normalize_v3(other_dir);
-
- const float stroke_dot = dot_v3v3(other_dir, brush_dir);
-
- if (stroke_dot > stroke_dot_max) {
- stroke_dot_max = stroke_dot;
- MDeformVert *dv = &data->me->dvert[v_other_index];
- weight_final = defvert_find_weight(dv, data->wpi->active.index);
- do_color = true;
+ /* Get the color of the loop in the opposite direction of the brush movement
+ * (this callback is specifically for smudge.) */
+ float weight_final = 0.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 MPoly *mp = &data->me->mpoly[p_index];
+ 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];
+
+ /* Get the direction from the selected vert to the neighbor. */
+ float other_dir[3];
+ sub_v3_v3v3(other_dir, mv_curr->co, mv_other->co);
+ normalize_v3(other_dir);
+
+ const float stroke_dot = dot_v3v3(other_dir, brush_dir);
+
+ if (stroke_dot > stroke_dot_max) {
+ stroke_dot_max = stroke_dot;
+ MDeformVert *dv = &data->me->dvert[v_other_index];
+ weight_final = defvert_find_weight(dv, data->wpi->active.index);
+ do_color = true;
+ }
}
}
- }
- /* Apply weight to vertex */
- if (do_color && view_dot > 0.0) {
- const float brush_fade = BKE_brush_curve_strength(brush, test.dist, cache->radius);
- const float final_alpha =
- view_dot * brush_fade * brush_strength *
- grid_alpha * brush_alpha_pressure;
- do_weight_paint_vertex(
- data->vp, data->ob, data->wpi,
- v_index, final_alpha, (float)weight_final);
+ /* Apply weight to vertex */
+ if (do_color) {
+ const float brush_fade = BKE_brush_curve_strength(brush, test.dist, cache->radius);
+ const float final_alpha =
+ view_dot * brush_fade * brush_strength *
+ grid_alpha * brush_alpha_pressure;
+ do_weight_paint_vertex(
+ data->vp, data->ob, data->wpi,
+ v_index, final_alpha, (float)weight_final);
+ }
}
}
}
@@ -3580,7 +3582,7 @@ static void do_vpaint_brush_smudge_task_cb_ex(
bool do_color = false;
/* Minimum dot product between brush direction and current
- * to neighbor direction is 0.0, meaning orthogonal. */
+ * to neighbor direction is 0.0, meaning orthogonal. */
float stroke_dot_max = 0.0f;
/* Get the color of the loop in the opposite direction of the brush movement */
More information about the Bf-blender-cvs
mailing list