From 6ff0726ef2becbdcf3a14a6f91e4d7df827c190e Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 30 Apr 2025 14:03:26 +0200 Subject: [PATCH] Refactor: const-correctness in GPU viewport Make GPU_viewport_colorspace_set() const-crrect w.r.t view_settings. Instead of doing in-place modifications of the view_settings argument with restoring them later introduce new function for copying view settings which keeps curve mapping unchanged in the destination. Should be no functional changes. Pull Request: https://projects.blender.org/blender/blender/pulls/138189 --- source/blender/blenkernel/BKE_colortools.hh | 8 ++++++++ .../blender/blenkernel/intern/colortools.cc | 20 ++++++++++++------- source/blender/gpu/GPU_viewport.hh | 2 +- source/blender/gpu/intern/gpu_viewport.cc | 16 ++++----------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/source/blender/blenkernel/BKE_colortools.hh b/source/blender/blenkernel/BKE_colortools.hh index 9f7a76f1930..756624bec90 100644 --- a/source/blender/blenkernel/BKE_colortools.hh +++ b/source/blender/blenkernel/BKE_colortools.hh @@ -208,6 +208,14 @@ void BKE_color_managed_view_settings_init_default( void BKE_color_managed_view_settings_copy(ColorManagedViewSettings *new_settings, const ColorManagedViewSettings *settings); + +/** + * Copy view settings that are not related to the curve mapping. Keep the curve mapping unchanged + * in the new_settings. + */ +void BKE_color_managed_view_settings_copy_keep_curve_mapping( + ColorManagedViewSettings *new_settings, const ColorManagedViewSettings *settings); + void BKE_color_managed_view_settings_free(ColorManagedViewSettings *settings); void BKE_color_managed_view_settings_blend_write(BlendWriter *writer, diff --git a/source/blender/blenkernel/intern/colortools.cc b/source/blender/blenkernel/intern/colortools.cc index 66b7a33d2d6..8eed4d093fe 100644 --- a/source/blender/blenkernel/intern/colortools.cc +++ b/source/blender/blenkernel/intern/colortools.cc @@ -1914,6 +1914,19 @@ void BKE_color_managed_view_settings_init_default( void BKE_color_managed_view_settings_copy(ColorManagedViewSettings *new_settings, const ColorManagedViewSettings *settings) +{ + BKE_color_managed_view_settings_copy_keep_curve_mapping(new_settings, settings); + + if (settings->curve_mapping) { + new_settings->curve_mapping = BKE_curvemapping_copy(settings->curve_mapping); + } + else { + new_settings->curve_mapping = nullptr; + } +} + +void BKE_color_managed_view_settings_copy_keep_curve_mapping( + ColorManagedViewSettings *new_settings, const ColorManagedViewSettings *settings) { STRNCPY(new_settings->look, settings->look); STRNCPY(new_settings->view_transform, settings->view_transform); @@ -1923,13 +1936,6 @@ void BKE_color_managed_view_settings_copy(ColorManagedViewSettings *new_settings new_settings->gamma = settings->gamma; new_settings->temperature = settings->temperature; new_settings->tint = settings->tint; - - if (settings->curve_mapping) { - new_settings->curve_mapping = BKE_curvemapping_copy(settings->curve_mapping); - } - else { - new_settings->curve_mapping = nullptr; - } } void BKE_color_managed_view_settings_free(ColorManagedViewSettings *settings) diff --git a/source/blender/gpu/GPU_viewport.hh b/source/blender/gpu/GPU_viewport.hh index 8ad7a2eb183..e06930c8238 100644 --- a/source/blender/gpu/GPU_viewport.hh +++ b/source/blender/gpu/GPU_viewport.hh @@ -48,7 +48,7 @@ void GPU_viewport_draw_to_screen_ex(GPUViewport *viewport, void GPU_viewport_free(GPUViewport *viewport); void GPU_viewport_colorspace_set(GPUViewport *viewport, - ColorManagedViewSettings *view_settings, + const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, float dither); diff --git a/source/blender/gpu/intern/gpu_viewport.cc b/source/blender/gpu/intern/gpu_viewport.cc index 0838a21f51c..62b5159f65f 100644 --- a/source/blender/gpu/intern/gpu_viewport.cc +++ b/source/blender/gpu/intern/gpu_viewport.cc @@ -230,7 +230,7 @@ void GPU_viewport_bind_from_offscreen(GPUViewport *viewport, GPUOffScreen *ofs, } void GPU_viewport_colorspace_set(GPUViewport *viewport, - ColorManagedViewSettings *view_settings, + const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, float dither) { @@ -256,19 +256,11 @@ void GPU_viewport_colorspace_set(GPUViewport *viewport, BKE_color_managed_view_settings_free(&viewport->view_settings); } /* Don't copy the curve mapping already. */ - CurveMapping *tmp_curve_mapping = view_settings->curve_mapping; - CurveMapping *tmp_curve_mapping_vp = viewport->view_settings.curve_mapping; - view_settings->curve_mapping = nullptr; - viewport->view_settings.curve_mapping = nullptr; - - BKE_color_managed_view_settings_copy(&viewport->view_settings, view_settings); - /* Restore. */ - view_settings->curve_mapping = tmp_curve_mapping; - viewport->view_settings.curve_mapping = tmp_curve_mapping_vp; + BKE_color_managed_view_settings_copy_keep_curve_mapping(&viewport->view_settings, view_settings); /* Only copy curve-mapping if needed. Avoid unneeded OCIO cache miss. */ - if (tmp_curve_mapping && viewport->view_settings.curve_mapping == nullptr) { + if (view_settings->curve_mapping && viewport->view_settings.curve_mapping == nullptr) { BKE_color_managed_view_settings_free(&viewport->view_settings); - viewport->view_settings.curve_mapping = BKE_curvemapping_copy(tmp_curve_mapping); + viewport->view_settings.curve_mapping = BKE_curvemapping_copy(view_settings->curve_mapping); } BKE_color_managed_display_settings_copy(&viewport->display_settings, display_settings);