Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/sculpt_paint/sculpt_filter_color.c')
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_filter_color.c41
1 files changed, 19 insertions, 22 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_color.c b/source/blender/editors/sculpt_paint/sculpt_filter_color.c
index 556b73b0ea5..576536cac03 100644
--- a/source/blender/editors/sculpt_paint/sculpt_filter_color.c
+++ b/source/blender/editors/sculpt_paint/sculpt_filter_color.c
@@ -80,7 +80,7 @@ typedef enum eSculptColorFilterTypes {
COLOR_FILTER_SMOOTH,
} eSculptColorFilterTypes;
-EnumPropertyItem prop_color_filter_types[] = {
+static EnumPropertyItem prop_color_filter_types[] = {
{COLOR_FILTER_FILL, "FILL", 0, "Fill", "Fill with a specific color"},
{COLOR_FILTER_HUE, "HUE", 0, "Hue", "Change hue"},
{COLOR_FILTER_SATURATION, "SATURATION", 0, "Saturation", "Change saturation"},
@@ -127,7 +127,7 @@ static void color_filter_task_cb(void *__restrict userdata,
float fill_color_rgba[4];
copy_v3_v3(fill_color_rgba, data->filter_fill_color);
fill_color_rgba[3] = 1.0f;
- CLAMP(fade, 0.0f, 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);
break;
@@ -140,33 +140,28 @@ static void color_filter_task_cb(void *__restrict userdata,
break;
case COLOR_FILTER_SATURATION:
rgb_to_hsv_v(orig_color, hsv_color);
- hsv_color[1] = hsv_color[1] + fade;
- CLAMP(hsv_color[1], 0.0f, 1.0f);
+ hsv_color[1] = clamp_f(hsv_color[1] + fade, 0.0f, 1.0f);
hsv_to_rgb_v(hsv_color, final_color);
break;
case COLOR_FILTER_VALUE:
rgb_to_hsv_v(orig_color, hsv_color);
- hsv_color[2] = hsv_color[2] + fade;
- CLAMP(hsv_color[2], 0.0f, 1.0f);
+ hsv_color[2] = clamp_f(hsv_color[2] + fade, 0.0f, 1.0f);
hsv_to_rgb_v(hsv_color, final_color);
break;
case COLOR_FILTER_RED:
- orig_color[0] = orig_color[0] + fade;
- CLAMP(orig_color[0], 0.0f, 1.0f);
+ orig_color[0] = clamp_f(orig_color[0] + fade, 0.0f, 1.0f);
copy_v3_v3(final_color, orig_color);
break;
case COLOR_FILTER_GREEN:
- orig_color[1] = orig_color[1] + fade;
- CLAMP(orig_color[1], 0.0f, 1.0f);
+ orig_color[1] = clamp_f(orig_color[1] + fade, 0.0f, 1.0f);
copy_v3_v3(final_color, orig_color);
break;
case COLOR_FILTER_BLUE:
- orig_color[2] = orig_color[2] + fade;
- CLAMP(orig_color[2], 0.0f, 1.0f);
+ orig_color[2] = clamp_f(orig_color[2] + fade, 0.0f, 1.0f);
copy_v3_v3(final_color, orig_color);
break;
case COLOR_FILTER_BRIGHTNESS:
- CLAMP(fade, -1.0f, 1.0f);
+ fade = clamp_f(fade, -1.0f, 1.0f);
brightness = fade;
contrast = 0;
delta = contrast / 2.0f;
@@ -174,12 +169,11 @@ static void color_filter_task_cb(void *__restrict userdata,
delta *= -1;
offset = gain * (brightness + delta);
for (int i = 0; i < 3; i++) {
- final_color[i] = gain * orig_color[i] + offset;
- CLAMP(final_color[i], 0.0f, 1.0f);
+ final_color[i] = clamp_f(gain * orig_color[i] + offset, 0.0f, 1.0f);
}
break;
case COLOR_FILTER_CONTRAST:
- CLAMP(fade, -1.0f, 1.0f);
+ fade = clamp_f(fade, -1.0f, 1.0f);
brightness = 0;
contrast = fade;
delta = contrast / 2.0f;
@@ -193,12 +187,11 @@ static void color_filter_task_cb(void *__restrict userdata,
offset = gain * (brightness + delta);
}
for (int i = 0; i < 3; i++) {
- final_color[i] = gain * orig_color[i] + offset;
- CLAMP(final_color[i], 0.0f, 1.0f);
+ final_color[i] = clamp_f(gain * orig_color[i] + offset, 0.0f, 1.0f);
}
break;
case COLOR_FILTER_SMOOTH: {
- CLAMP(fade, -1.0f, 1.0f);
+ fade = clamp_f(fade, -1.0f, 1.0f);
float smooth_color[4];
SCULPT_neighbor_color_average(ss, smooth_color, vd.index);
blend_color_interpolate_float(final_color, vd.col, smooth_color, fade);
@@ -265,7 +258,6 @@ static int sculpt_color_filter_modal(bContext *C, wmOperator *op, const wmEvent
static int sculpt_color_filter_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
Object *ob = CTX_data_active_object(C);
- Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
SculptSession *ss = ob->sculpt;
int mode = RNA_enum_get(op->ptr, "type");
@@ -285,6 +277,11 @@ static int sculpt_color_filter_invoke(bContext *C, wmOperator *op, const wmEvent
SCULPT_undo_push_begin("color filter");
+ BKE_sculpt_color_layer_create_if_needed(ob);
+
+ /* CTX_data_ensure_evaluated_depsgraph should be used at the end to include the updates of
+ * earlier steps modifying the data. */
+ Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
bool needs_pmap = mode == COLOR_FILTER_SMOOTH;
BKE_sculpt_update_object_for_edit(depsgraph, ob, needs_pmap, false, true);
@@ -301,7 +298,7 @@ static int sculpt_color_filter_invoke(bContext *C, wmOperator *op, const wmEvent
void SCULPT_OT_color_filter(struct wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Filter color";
+ ot->name = "Filter Color";
ot->idname = "SCULPT_OT_color_filter";
ot->description = "Applies a filter to modify the current sculpt vertex colors";
@@ -318,6 +315,6 @@ void SCULPT_OT_color_filter(struct wmOperatorType *ot)
ot->srna, "strength", 1.0f, -10.0f, 10.0f, "Strength", "Filter Strength", -10.0f, 10.0f);
PropertyRNA *prop = RNA_def_float_color(
- ot->srna, "fill_color", 3, NULL, 0.0f, FLT_MAX, "Fill Color", "fill color", 0.0f, 1.0f);
+ ot->srna, "fill_color", 3, NULL, 0.0f, FLT_MAX, "Fill Color", "", 0.0f, 1.0f);
RNA_def_property_subtype(prop, PROP_COLOR_GAMMA);
}