diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-05-21 13:00:48 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-05-31 13:44:18 +0300 |
commit | 23064248d7a08d01061e108972985a11997f046c (patch) | |
tree | e64356ca66a809b64b716bca535fb09e86dbaaa4 /source/blender/draw/intern/draw_manager.c | |
parent | d0fb602e2c365025131c782c1bc9b7d60013a678 (diff) |
DrawManager: Color Management
The draw manager used to determine if the view transform should be
applied by checking if the scene was not rendered to an offscreen image.
As the sequencer and texture painting needs to render to an offscreen
image with the view transform applied we need to separate the
`do_color_management` from the `is_image_render`.
Reviewed By: fclem
Maniphest Tasks: T64849
Differential Revision: https://developer.blender.org/D4909
Diffstat (limited to 'source/blender/draw/intern/draw_manager.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 18 |
1 files changed, 13 insertions, 5 deletions
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. */ |