Refactor: Sculpt: Add API function for accessing original color data

This commit is contained in:
Hans Goudey 2024-07-03 14:04:35 -04:00
parent 6fce121596
commit f8fc28bea9
3 changed files with 13 additions and 5 deletions

@ -89,7 +89,7 @@ static void color_filter_task(Object &ob,
{
SculptSession &ss = *ob.sculpt;
SculptOrigVertData orig_data = SCULPT_orig_vert_data_init(ob, *node, undo::Type::Color);
const Span<float4> orig_colors = orig_color_data_get_mesh(ob, *node);
auto_mask::NodeData automask_data = auto_mask::node_begin(
ob, ss.filter_cache->automasking.get(), *node);
@ -101,7 +101,6 @@ static void color_filter_task(Object &ob,
if (!hide_vert.is_empty() && hide_vert[vert]) {
continue;
}
SCULPT_orig_vert_data_update(orig_data, i);
auto_mask::node_update(automask_data, i);
float3 orig_color;
@ -117,8 +116,8 @@ static void color_filter_task(Object &ob,
continue;
}
copy_v3_v3(orig_color, orig_data.col);
final_color[3] = orig_data.col[3]; /* Copy alpha */
copy_v3_v3(orig_color, orig_colors[i]);
final_color[3] = orig_colors[i][3]; /* Copy alpha */
switch (mode) {
case COLOR_FILTER_FILL: {
@ -127,7 +126,7 @@ static void color_filter_task(Object &ob,
fill_color_rgba[3] = 1.0f;
fade = clamp_f(fade, 0.0f, 1.0f);
mul_v4_fl(fill_color_rgba, fade);
blend_color_mix_float(final_color, orig_data.col, fill_color_rgba);
blend_color_mix_float(final_color, orig_colors[i], fill_color_rgba);
break;
}
case COLOR_FILTER_HUE:

@ -1650,6 +1650,9 @@ void orig_position_data_gather_bmesh(const BMLog &bm_log,
const Set<BMVert *, 0> &verts,
MutableSpan<float3> positions,
MutableSpan<float3> normals);
Span<float4> orig_color_data_get_mesh(const Object &object, const PBVHNode &node);
}
/** \} */

@ -2146,4 +2146,10 @@ void orig_position_data_gather_bmesh(const BMLog &bm_log,
}
}
Span<float4> orig_color_data_get_mesh(const Object & /*object*/, const PBVHNode &node)
{
const undo::Node *unode = undo::get_node(&node, undo::Type::Color);
return unode->col.as_span();
}
} // namespace blender::ed::sculpt_paint