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
This commit is contained in:
Sergey Sharybin
2025-04-30 14:03:26 +02:00
committed by Sergey Sharybin
parent 4c4c21df76
commit 6ff0726ef2
4 changed files with 26 additions and 20 deletions

View File

@@ -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,

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);