diff --git a/source/blender/imbuf/intern/colormanagement.cc b/source/blender/imbuf/intern/colormanagement.cc index bc2ac6d1eee..c0862f1b8ce 100644 --- a/source/blender/imbuf/intern/colormanagement.cc +++ b/source/blender/imbuf/intern/colormanagement.cc @@ -103,22 +103,33 @@ struct ColormanageProcessor { bool is_data_result; }; -static struct global_gpu_state { +static struct GlobalGPUState { + GlobalGPUState() = default; + + ~GlobalGPUState() + { + if (curve_mapping) { + BKE_curvemapping_free(curve_mapping); + } + } + /* GPU shader currently bound. */ - bool gpu_shader_bound; + bool gpu_shader_bound = false; /* Curve mapping. */ - CurveMapping *curve_mapping, *orig_curve_mapping; - bool use_curve_mapping; - int curve_mapping_timestamp; -} global_gpu_state = {false}; + CurveMapping *curve_mapping = nullptr, *orig_curve_mapping = nullptr; + bool use_curve_mapping = false; + int curve_mapping_timestamp = 0; +} global_gpu_state; + +static struct GlobalColorPickingState { + GlobalColorPickingState() = default; -static struct global_color_picking_state { /* Cached processor for color picking conversion. */ std::shared_ptr cpu_processor_to; std::shared_ptr cpu_processor_from; - bool failed; -} global_color_picking_state = {nullptr}; + bool failed = false; +} global_color_picking_state; /** \} */ @@ -621,12 +632,8 @@ void colormanagement_init() void colormanagement_exit() { - if (global_gpu_state.curve_mapping) { - BKE_curvemapping_free(global_gpu_state.curve_mapping); - } - - memset(&global_gpu_state, 0, sizeof(global_gpu_state)); - memset(&global_color_picking_state, 0, sizeof(global_color_picking_state)); + global_gpu_state = GlobalGPUState(); + global_color_picking_state = GlobalColorPickingState(); colormanage_free_config(); }