Cleanup: Return sculpt node automasking data by value
This commit is contained in:
@@ -2409,16 +2409,17 @@ static void sculpt_apply_texture(const SculptSession *ss,
|
||||
}
|
||||
}
|
||||
|
||||
float SCULPT_brush_strength_factor(SculptSession *ss,
|
||||
const Brush *brush,
|
||||
const float brush_point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data)
|
||||
float SCULPT_brush_strength_factor(
|
||||
SculptSession *ss,
|
||||
const Brush *brush,
|
||||
const float brush_point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data)
|
||||
{
|
||||
using namespace blender::ed::sculpt_paint;
|
||||
StrokeCache *cache = ss->cache;
|
||||
@@ -2443,17 +2444,18 @@ float SCULPT_brush_strength_factor(SculptSession *ss,
|
||||
return avg;
|
||||
}
|
||||
|
||||
void SCULPT_brush_strength_color(SculptSession *ss,
|
||||
const Brush *brush,
|
||||
const float brush_point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
|
||||
float r_rgba[4])
|
||||
void SCULPT_brush_strength_color(
|
||||
SculptSession *ss,
|
||||
const Brush *brush,
|
||||
const float brush_point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
|
||||
float r_rgba[4])
|
||||
{
|
||||
using namespace blender::ed::sculpt_paint;
|
||||
StrokeCache *cache = ss->cache;
|
||||
@@ -5979,31 +5981,29 @@ void SCULPT_fake_neighbors_free(Object *ob)
|
||||
|
||||
namespace blender::ed::sculpt_paint::auto_mask {
|
||||
|
||||
void node_begin(Object *ob,
|
||||
auto_mask::Cache *automasking,
|
||||
auto_mask::NodeData *automask_data,
|
||||
PBVHNode *node)
|
||||
NodeData node_begin(Object &object, const Cache *automasking, PBVHNode &node)
|
||||
{
|
||||
if (!automasking) {
|
||||
memset(automask_data, 0, sizeof(*automask_data));
|
||||
return;
|
||||
return {};
|
||||
}
|
||||
|
||||
automask_data->have_orig_data = automasking->settings.flags &
|
||||
(BRUSH_AUTOMASKING_BRUSH_NORMAL | BRUSH_AUTOMASKING_VIEW_NORMAL);
|
||||
NodeData automask_data;
|
||||
automask_data.have_orig_data = automasking->settings.flags &
|
||||
(BRUSH_AUTOMASKING_BRUSH_NORMAL | BRUSH_AUTOMASKING_VIEW_NORMAL);
|
||||
|
||||
if (automask_data->have_orig_data) {
|
||||
SCULPT_orig_vert_data_init(&automask_data->orig_data, ob, node, undo::Type::Position);
|
||||
if (automask_data.have_orig_data) {
|
||||
SCULPT_orig_vert_data_init(&automask_data.orig_data, &object, &node, undo::Type::Position);
|
||||
}
|
||||
else {
|
||||
memset(&automask_data->orig_data, 0, sizeof(automask_data->orig_data));
|
||||
memset(&automask_data.orig_data, 0, sizeof(automask_data.orig_data));
|
||||
}
|
||||
return automask_data;
|
||||
}
|
||||
|
||||
void node_update(auto_mask::NodeData *automask_data, PBVHVertexIter *vd)
|
||||
void node_update(auto_mask::NodeData &automask_data, PBVHVertexIter &vd)
|
||||
{
|
||||
if (automask_data->have_orig_data) {
|
||||
SCULPT_orig_vert_data_update(&automask_data->orig_data, vd);
|
||||
if (automask_data.have_orig_data) {
|
||||
SCULPT_orig_vert_data_update(&automask_data.orig_data, &vd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -141,12 +141,12 @@ static float sculpt_automasking_normal_calc(SculptSession *ss,
|
||||
float3 &normal,
|
||||
float limit_lower,
|
||||
float limit_upper,
|
||||
NodeData *automask_data)
|
||||
const NodeData &automask_data)
|
||||
{
|
||||
float3 normal_v;
|
||||
|
||||
if (automask_data->have_orig_data) {
|
||||
normal_v = automask_data->orig_data.no;
|
||||
if (automask_data.have_orig_data) {
|
||||
normal_v = automask_data.orig_data.no;
|
||||
}
|
||||
else {
|
||||
SCULPT_vertex_normal_get(ss, vertex, normal_v);
|
||||
@@ -210,7 +210,7 @@ static bool SCULPT_automasking_needs_factors_cache(const Sculpt *sd, const Brush
|
||||
static float automasking_brush_normal_factor(Cache *automasking,
|
||||
SculptSession *ss,
|
||||
PBVHVertRef vertex,
|
||||
NodeData *automask_data)
|
||||
const NodeData &automask_data)
|
||||
{
|
||||
float falloff = automasking->settings.start_normal_falloff * M_PI;
|
||||
float3 initial_normal;
|
||||
@@ -233,7 +233,7 @@ static float automasking_brush_normal_factor(Cache *automasking,
|
||||
static float automasking_view_normal_factor(Cache *automasking,
|
||||
SculptSession *ss,
|
||||
PBVHVertRef vertex,
|
||||
NodeData *automask_data)
|
||||
const NodeData &automask_data)
|
||||
{
|
||||
float falloff = automasking->settings.view_normal_falloff * M_PI;
|
||||
|
||||
@@ -258,7 +258,7 @@ static float automasking_view_occlusion_factor(Cache *automasking,
|
||||
SculptSession *ss,
|
||||
PBVHVertRef vertex,
|
||||
uchar stroke_id,
|
||||
NodeData * /*automask_data*/)
|
||||
const NodeData & /*automask_data*/)
|
||||
{
|
||||
char f = *(char *)SCULPT_vertex_attr_get(vertex, ss->attrs.automasking_occlusion);
|
||||
|
||||
@@ -513,7 +513,10 @@ static float sculpt_automasking_cavity_factor(Cache *automasking,
|
||||
return factor;
|
||||
}
|
||||
|
||||
float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeData *automask_data)
|
||||
float factor_get(Cache *automasking,
|
||||
SculptSession *ss,
|
||||
PBVHVertRef vert,
|
||||
const NodeData *automask_data)
|
||||
{
|
||||
if (!automasking || vert.i == PBVH_REF_NONE) {
|
||||
return 1.0f;
|
||||
@@ -526,7 +529,7 @@ float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeDa
|
||||
if ((ss->cache || ss->filter_cache) &&
|
||||
(automasking->settings.flags & BRUSH_AUTOMASKING_BRUSH_NORMAL))
|
||||
{
|
||||
mask *= automasking_brush_normal_factor(automasking, ss, vert, automask_data);
|
||||
mask *= automasking_brush_normal_factor(automasking, ss, vert, *automask_data);
|
||||
}
|
||||
|
||||
/* If the cache is initialized with valid info, use the cache. This is used when the
|
||||
@@ -550,7 +553,7 @@ float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeDa
|
||||
(BRUSH_AUTOMASKING_VIEW_OCCLUSION | BRUSH_AUTOMASKING_VIEW_NORMAL)) ==
|
||||
(BRUSH_AUTOMASKING_VIEW_OCCLUSION | BRUSH_AUTOMASKING_VIEW_NORMAL);
|
||||
if (do_occlusion &&
|
||||
automasking_view_occlusion_factor(automasking, ss, vert, stroke_id, automask_data))
|
||||
automasking_view_occlusion_factor(automasking, ss, vert, stroke_id, *automask_data))
|
||||
{
|
||||
return automasking_factor_end(ss, automasking, vert, 0.0f);
|
||||
}
|
||||
@@ -587,7 +590,7 @@ float factor_get(Cache *automasking, SculptSession *ss, PBVHVertRef vert, NodeDa
|
||||
if ((ss->cache || ss->filter_cache) &&
|
||||
(automasking->settings.flags & BRUSH_AUTOMASKING_VIEW_NORMAL))
|
||||
{
|
||||
mask *= automasking_view_normal_factor(automasking, ss, vert, automask_data);
|
||||
mask *= automasking_view_normal_factor(automasking, ss, vert, *automask_data);
|
||||
}
|
||||
|
||||
if (automasking->settings.flags & BRUSH_AUTOMASKING_CAVITY_ALL) {
|
||||
@@ -780,10 +783,10 @@ static void sculpt_normal_occlusion_automasking_fill(Cache *automasking,
|
||||
|
||||
if (int(mode) & BRUSH_AUTOMASKING_VIEW_NORMAL) {
|
||||
if (int(mode) & BRUSH_AUTOMASKING_VIEW_OCCLUSION) {
|
||||
f *= automasking_view_occlusion_factor(automasking, ss, vertex, -1, &nodedata);
|
||||
f *= automasking_view_occlusion_factor(automasking, ss, vertex, -1, nodedata);
|
||||
}
|
||||
|
||||
f *= automasking_view_normal_factor(automasking, ss, vertex, &nodedata);
|
||||
f *= automasking_view_normal_factor(automasking, ss, vertex, nodedata);
|
||||
}
|
||||
|
||||
if (ss->attrs.automasking_stroke_id) {
|
||||
|
||||
@@ -671,15 +671,14 @@ static void do_boundary_brush_bend_task(Object *ob, const Brush *brush, PBVHNode
|
||||
angle_factor = floorf(angle_factor * 10) / 10.0f;
|
||||
}
|
||||
const float angle = angle_factor * M_PI;
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (boundary->edit_info[vd.index].propagation_steps_num == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
|
||||
{
|
||||
@@ -719,15 +718,14 @@ static void do_boundary_brush_slide_task(Object *ob, const Brush *brush, PBVHNod
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
|
||||
const float disp = sculpt_boundary_displacement_from_grab_delta_get(ss, boundary);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (boundary->edit_info[vd.index].propagation_steps_num == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
|
||||
{
|
||||
@@ -763,8 +761,7 @@ static void do_boundary_brush_inflate_task(Object *ob, const Brush *brush, PBVHN
|
||||
PBVHVertexIter vd;
|
||||
SculptOrigVertData orig_data;
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
const float disp = sculpt_boundary_displacement_from_grab_delta_get(ss, boundary);
|
||||
|
||||
@@ -773,7 +770,7 @@ static void do_boundary_brush_inflate_task(Object *ob, const Brush *brush, PBVHN
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
|
||||
{
|
||||
@@ -809,15 +806,14 @@ static void do_boundary_brush_grab_task(Object *ob, const Brush *brush, PBVHNode
|
||||
PBVHVertexIter vd;
|
||||
SculptOrigVertData orig_data;
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (boundary->edit_info[vd.index].propagation_steps_num == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
|
||||
{
|
||||
@@ -852,8 +848,7 @@ static void do_boundary_brush_twist_task(Object *ob, const Brush *brush, PBVHNod
|
||||
PBVHVertexIter vd;
|
||||
SculptOrigVertData orig_data;
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
const float disp = strength * sculpt_boundary_displacement_from_grab_delta_get(ss, boundary);
|
||||
float angle_factor = disp / ss->cache->radius;
|
||||
@@ -868,7 +863,7 @@ static void do_boundary_brush_twist_task(Object *ob, const Brush *brush, PBVHNod
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!SCULPT_check_vertex_pivot_symmetry(orig_data.co, boundary->initial_vertex_position, symm))
|
||||
{
|
||||
|
||||
@@ -258,15 +258,14 @@ static void do_draw_brush_task(Object *ob, const Brush *brush, const float *offs
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
/* Offset vertex. */
|
||||
if (ss->cache->brush->flag2 & BRUSH_USE_COLOR_AS_DISPLACEMENT &&
|
||||
@@ -356,8 +355,7 @@ static void do_fill_brush_task(
|
||||
|
||||
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
@@ -377,7 +375,7 @@ static void do_fill_brush_task(
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -448,8 +446,7 @@ static void do_scrape_brush_task(
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
@@ -469,7 +466,7 @@ static void do_scrape_brush_task(
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -561,8 +558,7 @@ static void do_clay_thumb_brush_task(Object *ob,
|
||||
/* Tilted plane (front part of the brush). */
|
||||
plane_from_point_normal_v3(plane_tilt, area_co, normal_tilt);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
@@ -584,7 +580,7 @@ static void do_clay_thumb_brush_task(Object *ob,
|
||||
interp_v3_v3v3(intr, intr, intr_tilt, tilt_mix);
|
||||
sub_v3_v3v3(val, intr_tilt, vd.co);
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -716,8 +712,7 @@ static void do_flatten_brush_task(
|
||||
|
||||
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
@@ -731,7 +726,7 @@ static void do_flatten_brush_task(
|
||||
sub_v3_v3v3(val, intr, vd.co);
|
||||
|
||||
if (SCULPT_plane_trim(ss->cache, brush, val)) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -856,8 +851,7 @@ static void do_clay_brush_task(
|
||||
|
||||
plane_from_point_normal_v3(test.plane_tool, area_co, area_no);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
@@ -870,7 +864,7 @@ static void do_clay_brush_task(
|
||||
|
||||
sub_v3_v3v3(val, intr, vd.co);
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -966,8 +960,7 @@ static void do_clay_strips_brush_task(Object *ob,
|
||||
plane_from_point_normal_v3(test.plane_tool, area_co, area_no_sp);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!SCULPT_brush_test_cube(&test, vd.co, mat, brush->tip_roundness, brush->tip_scale_x)) {
|
||||
@@ -987,7 +980,7 @@ static void do_clay_strips_brush_task(Object *ob,
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
/* The normal from the vertices is ignored, it causes glitch with planes, see: #44390. */
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
@@ -1120,8 +1113,7 @@ static void do_snake_hook_brush_task(Object *ob,
|
||||
KelvinletParams params;
|
||||
BKE_kelvinlet_init_params(¶ms, ss->cache->radius, bstrength, 1.0f, 0.4f);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!do_elastic && !sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
@@ -1133,7 +1125,7 @@ static void do_snake_hook_brush_task(Object *ob,
|
||||
fade = 1.0f;
|
||||
}
|
||||
else {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1250,8 +1242,7 @@ static void do_thumb_brush_task(Object *ob, const Brush *brush, const float *con
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
@@ -1259,7 +1250,7 @@ static void do_thumb_brush_task(Object *ob, const Brush *brush, const float *con
|
||||
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1318,8 +1309,7 @@ static void do_rotate_brush_task(Object *ob, const Brush *brush, const float ang
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
@@ -1328,7 +1318,7 @@ static void do_rotate_brush_task(Object *ob, const Brush *brush, const float ang
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float vec[3], rot[3][3];
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
@@ -1389,8 +1379,7 @@ static void do_layer_brush_task(Object *ob, Sculpt *sd, const Brush *brush, PBVH
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
@@ -1398,7 +1387,7 @@ static void do_layer_brush_task(Object *ob, Sculpt *sd, const Brush *brush, PBVH
|
||||
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1496,14 +1485,13 @@ static void do_inflate_brush_task(Object *ob, const Brush *brush, PBVHNode *node
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1560,14 +1548,13 @@ static void do_nudge_brush_task(Object *ob, const Brush *brush, const float *con
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1636,15 +1623,14 @@ static void do_crease_brush_task(Object *ob,
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
/* Offset vertex. */
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1748,14 +1734,13 @@ static void do_pinch_brush_task(Object *ob,
|
||||
copy_v3_v3(x_object_space, stroke_xz[0]);
|
||||
copy_v3_v3(z_object_space, stroke_xz[1]);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1860,8 +1845,7 @@ static void do_grab_brush_task(Object *ob,
|
||||
|
||||
const bool grab_silhouette = brush->flag2 & BRUSH_GRAB_SILHOUETTE;
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
@@ -1869,7 +1853,7 @@ static void do_grab_brush_task(Object *ob,
|
||||
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -1938,8 +1922,7 @@ static void do_elastic_deform_brush_task(Object *ob,
|
||||
const float bstrength = ss->cache->bstrength;
|
||||
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
float dir;
|
||||
if (ss->cache->mouse[0] > ss->cache->initial_mouse[0]) {
|
||||
@@ -1963,7 +1946,7 @@ static void do_elastic_deform_brush_task(Object *ob,
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float final_disp[3];
|
||||
switch (brush->elastic_deform_type) {
|
||||
@@ -2050,8 +2033,7 @@ static void do_draw_sharp_brush_task(Object *ob,
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
@@ -2059,7 +2041,7 @@ static void do_draw_sharp_brush_task(Object *ob,
|
||||
continue;
|
||||
}
|
||||
/* Offset vertex. */
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -2129,15 +2111,14 @@ static void do_topology_slide_task(Object *ob, const Brush *brush, PBVHNode *nod
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -2297,15 +2278,14 @@ static void do_topology_relax_task(Object *ob, const Brush *brush, PBVHNode *nod
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
if (!sculpt_brush_test_sq_fn(&test, orig_data.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -2378,15 +2358,14 @@ static void do_displacement_eraser_brush_task(Object *ob, const Brush *brush, PB
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -2442,15 +2421,14 @@ static void do_displacement_smear_brush_task(Object *ob, const Brush *brush, PBV
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -2602,15 +2580,14 @@ static void do_topology_rake_bmesh_task(
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength *
|
||||
SCULPT_brush_strength_factor(ss,
|
||||
@@ -2686,15 +2663,14 @@ static void do_mask_brush_draw_task(Object *ob,
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
vd.co,
|
||||
|
||||
@@ -469,11 +469,11 @@ static void do_cloth_brush_apply_forces_task(Object *ob,
|
||||
madd_v3_v3fl(gravity, ss->cache->gravity_direction, -sd->gravity_factor);
|
||||
}
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, auto_mask::active_cache_get(ss), &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, auto_mask::active_cache_get(ss), *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float force[3];
|
||||
float sim_location[3];
|
||||
@@ -733,11 +733,10 @@ static void do_cloth_brush_solve_simulation_task(Object *ob,
|
||||
}
|
||||
|
||||
auto_mask::Cache *automasking = auto_mask::active_cache_get(ss);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, auto_mask::active_cache_get(ss), &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float sim_location[3];
|
||||
cloth_brush_simulation_location_get(ss, brush, sim_location);
|
||||
@@ -1366,12 +1365,12 @@ static void cloth_filter_apply_forces_task(Object *ob,
|
||||
sculpt_gravity[2] = -1.0f;
|
||||
}
|
||||
mul_v3_fl(sculpt_gravity, sd->gravity_factor * filter_strength);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, auto_mask::active_cache_get(ss), &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, auto_mask::active_cache_get(ss), *node);
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float fade = vd.mask;
|
||||
fade *= auto_mask::factor_get(ss->filter_cache->automasking, ss, vd.vertex, &automask_data);
|
||||
@@ -1630,4 +1629,4 @@ void SCULPT_OT_cloth_filter(wmOperatorType *ot)
|
||||
"Collide with other collider objects in the scene");
|
||||
}
|
||||
|
||||
} // namespace ed::sculpt_paint::cloth
|
||||
} // namespace blender::ed::sculpt_paint::cloth
|
||||
|
||||
@@ -204,14 +204,14 @@ static void do_draw_face_sets_brush_faces(Object *ob,
|
||||
SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
|
||||
ss, &test, brush->falloff_shape);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, ss->cache->automasking, *node);
|
||||
|
||||
bool changed = false;
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
for (const int face_i : ss->pmap[vd.index]) {
|
||||
const IndexRange face = ss->faces[face_i];
|
||||
@@ -270,14 +270,14 @@ static void do_draw_face_sets_brush_grids(Object *ob,
|
||||
SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
|
||||
ss, &test, brush->falloff_shape);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, ss->cache->automasking, *node);
|
||||
|
||||
bool changed = false;
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
@@ -335,8 +335,7 @@ static void do_draw_face_sets_brush_bmesh(Object *ob,
|
||||
* of the brush, as there is an explicit check there for the brushes which support dynamic
|
||||
* topology. Do it locally here for the Draw Face Set brush here, to mimic the behavior of
|
||||
* the other brushes but without marking the brush as supporting dynamic topology. */
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, nullptr, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, nullptr, *node);
|
||||
|
||||
bool changed = false;
|
||||
|
||||
@@ -363,7 +362,7 @@ static void do_draw_face_sets_brush_bmesh(Object *ob,
|
||||
* the typical code flow for it here for the reference, and ease of looking at what needs
|
||||
* to be done for such integration.
|
||||
*
|
||||
* auto_mask::node_update(&automask_data, &vd); */
|
||||
* auto_mask::node_update(automask_data, vd); */
|
||||
|
||||
const float fade = bstrength *
|
||||
SCULPT_brush_strength_factor(ss,
|
||||
@@ -417,11 +416,10 @@ static void do_relax_face_sets_brush_task(Object *ob,
|
||||
}
|
||||
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
|
||||
@@ -85,13 +85,13 @@ static void color_filter_task(Object *ob,
|
||||
SculptOrigVertData orig_data;
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Color);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->filter_cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, ss->filter_cache->automasking, *node);
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float orig_color[3], final_color[4], hsv_color[3];
|
||||
int hue;
|
||||
|
||||
@@ -355,13 +355,13 @@ static void mesh_filter_task(Object *ob,
|
||||
/* This produces better results as the relax operation is no completely focused on the
|
||||
* boundaries. */
|
||||
const bool relax_face_sets = !(ss->filter_cache->iteration_count % 3 == 0);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->filter_cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, ss->filter_cache->automasking, *node);
|
||||
|
||||
PBVHVertexIter vd;
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float orig_co[3], val[3], avg[3], disp[3], disp2[3], transform[3][3], final_pos[3];
|
||||
float fade = vd.mask;
|
||||
@@ -655,11 +655,11 @@ static void mesh_filter_surface_smooth_displace_task(Object *ob,
|
||||
SculptSession *ss = ob->sculpt;
|
||||
PBVHVertexIter vd;
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->filter_cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(
|
||||
*ob, ss->filter_cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float fade = vd.mask;
|
||||
fade = 1.0f - fade;
|
||||
|
||||
@@ -1172,31 +1172,33 @@ void SCULPT_cube_tip_init(Sculpt *sd, Object *ob, Brush *brush, float mat[4][4])
|
||||
/**
|
||||
* Return a multiplier for brush strength on a particular vertex.
|
||||
*/
|
||||
float SCULPT_brush_strength_factor(SculptSession *ss,
|
||||
const Brush *br,
|
||||
const float point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data);
|
||||
float SCULPT_brush_strength_factor(
|
||||
SculptSession *ss,
|
||||
const Brush *br,
|
||||
const float point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data);
|
||||
|
||||
/**
|
||||
* Return a color of a brush texture on a particular vertex multiplied by active masks.
|
||||
*/
|
||||
void SCULPT_brush_strength_color(SculptSession *ss,
|
||||
const Brush *brush,
|
||||
const float brush_point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
|
||||
float r_rgba[4]);
|
||||
void SCULPT_brush_strength_color(
|
||||
SculptSession *ss,
|
||||
const Brush *brush,
|
||||
const float brush_point[3],
|
||||
float len,
|
||||
const float vno[3],
|
||||
const float fno[3],
|
||||
float mask,
|
||||
const PBVHVertRef vertex,
|
||||
int thread_id,
|
||||
const blender::ed::sculpt_paint::auto_mask::NodeData *automask_data,
|
||||
float r_rgba[4]);
|
||||
|
||||
/**
|
||||
* Calculates the vertex offset for a single vertex depending on the brush setting rgb as vector
|
||||
@@ -1326,15 +1328,15 @@ struct NodeData {
|
||||
* Call before PBVH vertex iteration.
|
||||
* \param automask_data: pointer to an uninitialized #auto_mask::NodeData struct.
|
||||
*/
|
||||
void node_begin(Object *ob, Cache *automasking, NodeData *automask_data, PBVHNode *node);
|
||||
NodeData node_begin(Object &object, const Cache *automasking, PBVHNode &node);
|
||||
|
||||
/* Call before factor_get and SCULPT_brush_strength_factor. */
|
||||
void node_update(NodeData *automask_data, PBVHVertexIter *vd);
|
||||
void node_update(NodeData &automask_data, PBVHVertexIter &vd);
|
||||
|
||||
float factor_get(Cache *automasking,
|
||||
SculptSession *ss,
|
||||
PBVHVertRef vertex,
|
||||
NodeData *automask_data);
|
||||
const NodeData *automask_data);
|
||||
|
||||
/* Returns the automasking cache depending on the active tool. Used for code that can run both for
|
||||
* brushes and filter. */
|
||||
|
||||
@@ -61,8 +61,7 @@ static void calc_multiplane_scrape_surface_task(Object *ob,
|
||||
test_radius *= brush->normal_radius_factor;
|
||||
test.radius_squared = test_radius * test_radius;
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
|
||||
@@ -74,7 +73,7 @@ static void calc_multiplane_scrape_surface_task(Object *ob,
|
||||
copy_v3_v3(normal, vd.no ? vd.no : vd.fno);
|
||||
mul_v3_m4v3(local_co, mat, vd.co);
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
/* Use the brush falloff to weight the sampled normals. */
|
||||
const float fade = SCULPT_brush_strength_factor(ss,
|
||||
@@ -122,8 +121,7 @@ static void do_multiplane_scrape_brush_task(Object *ob,
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
|
||||
@@ -166,7 +164,7 @@ static void do_multiplane_scrape_brush_task(Object *ob,
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
/* Deform the local space along the Y axis to avoid artifacts on curved strokes. */
|
||||
/* This produces a not round brush tip. */
|
||||
|
||||
@@ -1029,11 +1029,10 @@ static void sculpt_bake_cavity_exec_task(Object *ob,
|
||||
|
||||
undo::push_node(ob, node, undo::Type::Mask);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float automask = auto_mask::factor_get(automasking, ss, vd.vertex, &automask_data);
|
||||
float mask;
|
||||
|
||||
@@ -47,15 +47,14 @@ static void do_color_smooth_task(Object *ob, const Brush *brush, PBVHNode *node)
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -109,8 +108,7 @@ static void do_paint_brush_task(Object *ob,
|
||||
|
||||
IMB_colormanagement_srgb_to_scene_linear_v3(brush_color, brush_color);
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
if (brush->flag & BRUSH_USE_GRADIENT) {
|
||||
switch (brush->gradient_stroke_mode) {
|
||||
@@ -149,7 +147,7 @@ static void do_paint_brush_task(Object *ob,
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -350,15 +348,14 @@ static void do_smear_brush_task(Object *ob, const Brush *brush, PBVHNode *node)
|
||||
sub_v3_v3v3(brush_delta, ss->cache->location, ss->cache->last_location);
|
||||
}
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
|
||||
@@ -364,8 +364,7 @@ static void do_paint_pixels(void *__restrict userdata,
|
||||
|
||||
brush_color[3] = 1.0f;
|
||||
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, data->nodes[n]);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
ImageUser image_user = *data->image_data.image_user;
|
||||
bool pixels_updated = false;
|
||||
|
||||
@@ -151,12 +151,11 @@ static void do_pose_brush_task(Object *ob, const Brush *brush, PBVHNode *node)
|
||||
|
||||
SculptOrigVertData orig_data;
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
float total_disp[3];
|
||||
zero_v3(total_disp);
|
||||
|
||||
@@ -194,15 +194,14 @@ static void do_enhance_details_brush_task(Object *ob,
|
||||
ss, &test, brush->falloff_shape);
|
||||
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -274,15 +273,14 @@ static void do_smooth_brush_task(Object *ob,
|
||||
ss, &test, brush->falloff_shape);
|
||||
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -435,8 +433,7 @@ static void do_surface_smooth_brush_laplacian_task(Object *ob, const Brush *brus
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
|
||||
SCULPT_orig_vert_data_init(&orig_data, ob, node, undo::Type::Position);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
SCULPT_orig_vert_data_update(&orig_data, &vd);
|
||||
@@ -444,7 +441,7 @@ static void do_surface_smooth_brush_laplacian_task(Object *ob, const Brush *brus
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
@@ -480,15 +477,14 @@ static void do_surface_smooth_brush_displace_task(Object *ob, const Brush *brush
|
||||
SculptBrushTestFn sculpt_brush_test_sq_fn = SCULPT_brush_test_init_with_falloff_shape(
|
||||
ss, &test, brush->falloff_shape);
|
||||
const int thread_id = BLI_task_parallel_thread_id(nullptr);
|
||||
auto_mask::NodeData automask_data;
|
||||
auto_mask::node_begin(ob, ss->cache->automasking, &automask_data, node);
|
||||
auto_mask::NodeData automask_data = auto_mask::node_begin(*ob, ss->cache->automasking, *node);
|
||||
|
||||
BKE_pbvh_vertex_iter_begin (ss->pbvh, node, vd, PBVH_ITER_UNIQUE) {
|
||||
if (!sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto_mask::node_update(&automask_data, &vd);
|
||||
auto_mask::node_update(automask_data, vd);
|
||||
|
||||
const float fade = bstrength * SCULPT_brush_strength_factor(ss,
|
||||
brush,
|
||||
|
||||
Reference in New Issue
Block a user