diff options
-rw-r--r-- | source/blender/draw/engines/gpencil/gpencil_engine.c | 5 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_effect_aa.c | 10 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 1 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_common.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 18 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.h | 1 |
6 files changed, 24 insertions, 13 deletions
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c index f78f7295d24..07588467ae2 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.c +++ b/source/blender/draw/engines/gpencil/gpencil_engine.c @@ -976,7 +976,7 @@ void GPENCIL_draw_scene(void *ved) stl->storage->blend_mode = array_elm->mode; stl->storage->clamp_layer = (int)array_elm->clamp_layer; stl->storage->blend_opacity = array_elm->blend_opacity; - stl->storage->tonemapping = stl->storage->is_render ? 1 : 0; + stl->storage->tonemapping = DRW_state_do_color_management() ? 0 : 1; DRW_draw_pass(psl->blend_pass); stl->storage->tonemapping = 0; @@ -1018,7 +1018,8 @@ void GPENCIL_draw_scene(void *ved) GPU_framebuffer_bind(fbl->main); } /* tonemapping */ - stl->storage->tonemapping = is_render ? 1 : 0; + stl->storage->tonemapping = DRW_state_do_color_management() ? 0 : 1; + /* active select flag and selection color */ if (!is_render) { UI_GetThemeColorShadeAlpha4fv( diff --git a/source/blender/draw/engines/workbench/workbench_effect_aa.c b/source/blender/draw/engines/workbench/workbench_effect_aa.c index 965f5a5ca4f..ed311db0626 100644 --- a/source/blender/draw/engines/workbench/workbench_effect_aa.c +++ b/source/blender/draw/engines/workbench/workbench_effect_aa.c @@ -55,14 +55,14 @@ void workbench_aa_create_pass(WORKBENCH_Data *vedata, GPUTexture **tx) static void workspace_aa_draw_transform(GPUTexture *tx, WORKBENCH_PrivateData *wpd) { - if (DRW_state_is_image_render()) { - /* Linear result for render. */ - DRW_transform_none(tx); - } - else { + if (DRW_state_do_color_management()) { /* Display space result for viewport. */ DRW_transform_to_display(tx, wpd->use_color_render_settings, wpd->use_color_render_settings); } + else { + /* Linear result for render. */ + DRW_transform_none(tx); + } } void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx) diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 4115038ee42..315b3ee8b30 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -663,6 +663,7 @@ bool DRW_state_is_fbo(void); bool DRW_state_is_select(void); bool DRW_state_is_depth(void); bool DRW_state_is_image_render(void); +bool DRW_state_do_color_management(void); bool DRW_state_is_scene_render(void); bool DRW_state_is_opengl_render(void); bool DRW_state_is_playback(void); diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c index 866fd57b9a8..9e494cdad88 100644 --- a/source/blender/draw/intern/draw_common.c +++ b/source/blender/draw/intern/draw_common.c @@ -156,7 +156,7 @@ void DRW_globals_update(void) gb->sizeEdgeFix = U.pixelsize * (0.5f + 2.0f * (2.0f * (gb->sizeEdge * (float)M_SQRT1_2))); /* Color management. */ - if (DRW_state_is_image_render()) { + if (!DRW_state_do_color_management()) { float *color = gb->UBO_FIRST_COLOR; do { /* TODO more accurate transform. */ diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 10e9b8fbdf0..6428eb77ddb 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -298,8 +298,8 @@ void DRW_transform_to_display(GPUTexture *tex, bool use_view_transform, bool use bool use_ocio = false; - /* View transform is already applied for offscreen, don't apply again, see: T52046 */ - if (!(DST.options.is_image_render && !DST.options.is_scene_render)) { + /* Should we apply the view transform */ + if (DRW_state_do_color_management()) { Scene *scene = DST.draw_ctx.scene; ColorManagedDisplaySettings *display_settings = &scene->display_settings; ColorManagedViewSettings view_settings; @@ -1558,6 +1558,7 @@ void DRW_draw_view(const bContext *C) (v3d->overlay.flag & V3D_OVERLAY_HIDE_TEXT) != 0); DST.options.draw_background = (scene->r.alphamode == R_ADDSKY) || (v3d->shading.type != OB_RENDER); + DST.options.do_color_management = true; DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, viewport, C); } @@ -1819,9 +1820,8 @@ void DRW_draw_render_loop_offscreen(struct Depsgraph *depsgraph, /* Reset before using it. */ drw_state_prepare_clean_for_draw(&DST); - /* WATCH: Force color management to output CManaged byte buffer by - * forcing is_image_render to false. */ - DST.options.is_image_render = !do_color_management; + DST.options.is_image_render = true; + DST.options.do_color_management = do_color_management; DST.options.draw_background = draw_background; DRW_draw_render_loop_ex(depsgraph, engine_type, ar, v3d, render_viewport, NULL); @@ -2987,6 +2987,14 @@ bool DRW_state_is_image_render(void) } /** + * Whether the view transform should be applied. + */ +bool DRW_state_do_color_management(void) +{ + return DST.options.do_color_management; +} + +/** * Whether we are rendering only the render engine, * or if we should also render the mode engines. */ diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h index 867d7132c20..ddbfa81985d 100644 --- a/source/blender/draw/intern/draw_manager.h +++ b/source/blender/draw/intern/draw_manager.h @@ -315,6 +315,7 @@ typedef struct DRWManager { uint is_depth : 1; uint is_image_render : 1; uint is_scene_render : 1; + uint do_color_management : 1; uint draw_background : 1; uint draw_text : 1; } options; |