diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 0a31c6e8d79..b93fc826d76 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -27,7 +27,7 @@ /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 39 +#define BLENDER_FILE_SUBVERSION 40 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and cancel loading the file, showing a warning to diff --git a/source/blender/blenloader/intern/versioning_500.cc b/source/blender/blenloader/intern/versioning_500.cc index d1c28be01ed..124be612b38 100644 --- a/source/blender/blenloader/intern/versioning_500.cc +++ b/source/blender/blenloader/intern/versioning_500.cc @@ -11,6 +11,7 @@ #include #include "DNA_ID.h" +#include "DNA_brush_types.h" #include "DNA_curves_types.h" #include "DNA_grease_pencil_types.h" #include "DNA_mesh_types.h" @@ -1129,6 +1130,48 @@ static void do_version_remove_lzo_and_lzma_compression(FileData *fd, Object *obj BLI_freelistN(&pidlist); } +static void do_version_convert_gp_jitter_values(Brush *brush) +{ + /* Because this change is backported into the 4.5 branch, we need to avoid performing versioning + * in case the user updated their custom brush assets between using 4.5 and 5.0 to avoid + * overwriting their changes. + * + * See #142104 + */ + if ((brush->flag2 & BRUSH_JITTER_COLOR) != 0 || !is_zero_v3(brush->hsv_jitter)) { + return; + } + + BrushGpencilSettings *settings = brush->gpencil_settings; + float old_hsv_jitter[3] = { + settings->random_hue, settings->random_saturation, settings->random_value}; + if (!is_zero_v3(old_hsv_jitter)) { + brush->flag2 |= BRUSH_JITTER_COLOR; + } + copy_v3_v3(brush->hsv_jitter, old_hsv_jitter); + if (brush->curve_rand_hue) { + BKE_curvemapping_free_data(brush->curve_rand_hue); + BKE_curvemapping_copy_data(brush->curve_rand_hue, settings->curve_rand_hue); + } + else { + brush->curve_rand_hue = BKE_curvemapping_copy(settings->curve_rand_hue); + } + if (brush->curve_rand_saturation) { + BKE_curvemapping_free_data(brush->curve_rand_saturation); + BKE_curvemapping_copy_data(brush->curve_rand_saturation, settings->curve_rand_saturation); + } + else { + brush->curve_rand_saturation = BKE_curvemapping_copy(settings->curve_rand_saturation); + } + if (brush->curve_rand_value) { + BKE_curvemapping_free_data(brush->curve_rand_value); + BKE_curvemapping_copy_data(brush->curve_rand_value, settings->curve_rand_value); + } + else { + brush->curve_rand_value = BKE_curvemapping_copy(settings->curve_rand_value); + } +} + void do_versions_after_linking_500(FileData *fd, Main *bmain) { if (!MAIN_VERSION_FILE_ATLEAST(bmain, 500, 9)) { @@ -1516,6 +1559,14 @@ void blo_do_versions_500(FileData * /*fd*/, Library * /*lib*/, Main *bmain) } } + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 500, 40)) { + LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) { + if (brush->gpencil_settings) { + do_version_convert_gp_jitter_values(brush); + } + } + } + /** * Always bump subversion in BKE_blender_version.h when adding versioning * code here, and wrap it inside a MAIN_VERSION_FILE_ATLEAST check. diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_primitive.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_primitive.cc index 81349557efe..38ac37310a9 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_primitive.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_primitive.cc @@ -781,9 +781,9 @@ static wmOperatorStatus grease_pencil_primitive_invoke(bContext *C, BKE_curvemapping_init(ptd.settings->curve_rand_pressure); BKE_curvemapping_init(ptd.settings->curve_rand_strength); BKE_curvemapping_init(ptd.settings->curve_rand_uv); - BKE_curvemapping_init(ptd.settings->curve_rand_hue); - BKE_curvemapping_init(ptd.settings->curve_rand_saturation); - BKE_curvemapping_init(ptd.settings->curve_rand_value); + BKE_curvemapping_init(ptd.brush->curve_rand_hue); + BKE_curvemapping_init(ptd.brush->curve_rand_saturation); + BKE_curvemapping_init(ptd.brush->curve_rand_value); ToolSettings *ts = vc.scene->toolsettings; GP_Sculpt_Settings *gset = &ts->gp_sculpt; diff --git a/source/blender/editors/sculpt_paint/grease_pencil_draw_ops.cc b/source/blender/editors/sculpt_paint/grease_pencil_draw_ops.cc index 3837e671db4..50647faf064 100644 --- a/source/blender/editors/sculpt_paint/grease_pencil_draw_ops.cc +++ b/source/blender/editors/sculpt_paint/grease_pencil_draw_ops.cc @@ -1513,9 +1513,9 @@ static bool grease_pencil_fill_init(bContext &C, wmOperator &op) BKE_curvemapping_init(brush.gpencil_settings->curve_rand_pressure); BKE_curvemapping_init(brush.gpencil_settings->curve_rand_strength); BKE_curvemapping_init(brush.gpencil_settings->curve_rand_uv); - BKE_curvemapping_init(brush.gpencil_settings->curve_rand_hue); - BKE_curvemapping_init(brush.gpencil_settings->curve_rand_saturation); - BKE_curvemapping_init(brush.gpencil_settings->curve_rand_value); + BKE_curvemapping_init(brush.curve_rand_hue); + BKE_curvemapping_init(brush.curve_rand_saturation); + BKE_curvemapping_init(brush.curve_rand_value); Material *material = BKE_grease_pencil_object_material_ensure_from_brush(&bmain, &ob, &brush); const int material_index = BKE_object_material_index_get(&ob, material); diff --git a/source/blender/editors/sculpt_paint/grease_pencil_paint.cc b/source/blender/editors/sculpt_paint/grease_pencil_paint.cc index 955aadcc34f..3dfa54d349e 100644 --- a/source/blender/editors/sculpt_paint/grease_pencil_paint.cc +++ b/source/blender/editors/sculpt_paint/grease_pencil_paint.cc @@ -155,9 +155,9 @@ static Brush *create_fill_guide_brush() BKE_curvemapping_init(settings->curve_rand_pressure); BKE_curvemapping_init(settings->curve_rand_strength); BKE_curvemapping_init(settings->curve_rand_uv); - BKE_curvemapping_init(settings->curve_rand_hue); - BKE_curvemapping_init(settings->curve_rand_saturation); - BKE_curvemapping_init(settings->curve_rand_value); + BKE_curvemapping_init(fill_guides_brush->curve_rand_hue); + BKE_curvemapping_init(fill_guides_brush->curve_rand_saturation); + BKE_curvemapping_init(fill_guides_brush->curve_rand_value); fill_guides_brush->flag |= BRUSH_LOCK_SIZE; fill_guides_brush->unprojected_radius = 0.005f; @@ -1179,9 +1179,9 @@ void PaintOperation::on_stroke_begin(const bContext &C, const InputSample &start BKE_curvemapping_init(settings->curve_rand_pressure); BKE_curvemapping_init(settings->curve_rand_strength); BKE_curvemapping_init(settings->curve_rand_uv); - BKE_curvemapping_init(settings->curve_rand_hue); - BKE_curvemapping_init(settings->curve_rand_saturation); - BKE_curvemapping_init(settings->curve_rand_value); + BKE_curvemapping_init(brush->curve_rand_hue); + BKE_curvemapping_init(brush->curve_rand_saturation); + BKE_curvemapping_init(brush->curve_rand_value); BLI_assert(grease_pencil->has_active_layer()); const bke::greasepencil::Layer &layer = *grease_pencil->get_active_layer(); diff --git a/source/blender/editors/sculpt_paint/grease_pencil_paint_common.cc b/source/blender/editors/sculpt_paint/grease_pencil_paint_common.cc index fc1bb27598b..d242a572917 100644 --- a/source/blender/editors/sculpt_paint/grease_pencil_paint_common.cc +++ b/source/blender/editors/sculpt_paint/grease_pencil_paint_common.cc @@ -80,9 +80,9 @@ void init_brush(Brush &brush) BKE_curvemapping_init(brush.gpencil_settings->curve_rand_pressure); BKE_curvemapping_init(brush.gpencil_settings->curve_rand_strength); BKE_curvemapping_init(brush.gpencil_settings->curve_rand_uv); - BKE_curvemapping_init(brush.gpencil_settings->curve_rand_hue); - BKE_curvemapping_init(brush.gpencil_settings->curve_rand_saturation); - BKE_curvemapping_init(brush.gpencil_settings->curve_rand_value); + BKE_curvemapping_init(brush.curve_rand_hue); + BKE_curvemapping_init(brush.curve_rand_saturation); + BKE_curvemapping_init(brush.curve_rand_value); } float brush_radius(const Paint &paint, const Brush &brush, const float pressure = 1.0f)