diff options
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 27 |
2 files changed, 18 insertions, 11 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index e0fe0e9a14e..4740879928c 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -232,7 +232,7 @@ void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo); } \ } while (0) -void DRW_transform_to_display(struct GPUTexture *tex, bool use_view_settings); +void DRW_transform_to_display(struct GPUTexture *tex, bool use_view_transform, bool use_render_settings); void DRW_transform_none(struct GPUTexture *tex); void DRW_multisamples_resolve( struct GPUTexture *src_depth, struct GPUTexture *src_color, bool use_depth); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 51490c5feb6..2daeccdd572 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -256,7 +256,7 @@ struct DupliObject *DRW_object_get_dupli(const Object *UNUSED(ob)) * \{ */ /* Use color management profile to draw texture to framebuffer */ -void DRW_transform_to_display(GPUTexture *tex, bool use_view_settings) +void DRW_transform_to_display(GPUTexture *tex, bool use_view_transform, bool use_render_settings) { drw_state_set(DRW_STATE_WRITE_COLOR); @@ -272,19 +272,26 @@ void DRW_transform_to_display(GPUTexture *tex, bool use_view_settings) if (!(DST.options.is_image_render && !DST.options.is_scene_render)) { Scene *scene = DST.draw_ctx.scene; ColorManagedDisplaySettings *display_settings = &scene->display_settings; - ColorManagedViewSettings *active_view_settings; - ColorManagedViewSettings default_view_settings; - if (use_view_settings) { - active_view_settings = &scene->view_settings; + ColorManagedViewSettings view_settings; + if (use_render_settings) { + /* Use full render settings, for renders with scene lighting. */ + view_settings = scene->view_settings; + } + else if (use_view_transform) { + /* Use only view transform + look and nothing else for lookdev without + * scene lighting, as exposure depends on scene light intensity. */ + BKE_color_managed_view_settings_init_render(&view_settings, display_settings, NULL); + STRNCPY(view_settings.view_transform, scene->view_settings.view_transform); + STRNCPY(view_settings.look, scene->view_settings.look); } else { - BKE_color_managed_view_settings_init_render( - &default_view_settings, - display_settings); - active_view_settings = &default_view_settings; + /* For workbench use only default view transform in configuration, + * using no scene settings. */ + BKE_color_managed_view_settings_init_render(&view_settings, display_settings, NULL); } + use_ocio = IMB_colormanagement_setup_glsl_draw_from_space( - active_view_settings, display_settings, NULL, dither, false); + &view_settings, display_settings, NULL, dither, false); } if (!use_ocio) { |