diff options
Diffstat (limited to 'source/blender/editors/sculpt_paint/sculpt_filter_color.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_filter_color.c | 41 |
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); } |