diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-02-28 15:41:06 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-02-28 15:41:48 +0300 |
commit | d68484a60f539339db12a7eedd0ead0f116a43d5 (patch) | |
tree | aaad274b769ff6e371ed8fca52a8dd2f512c858f | |
parent | bbe5a95d05f7c9c7286e8f785ac92c2e16a114b2 (diff) |
Fix T58405: viewport drawing issues with display device set to None.
Disabling color management this way is not very useful, but as long as the
option is there it should work correct.
4 files changed, 25 insertions, 5 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c index 5fb1491d02d..38b05133487 100644 --- a/source/blender/draw/engines/workbench/workbench_data.c +++ b/source/blender/draw/engines/workbench/workbench_data.c @@ -59,6 +59,8 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd) wpd->use_color_render_settings = false; } + wpd->use_color_management = BKE_scene_check_color_management_enabled(scene); + if (wpd->shading.light == V3D_LIGHTING_MATCAP) { wpd->studio_light = BKE_studiolight_find( wpd->shading.matcap, STUDIOLIGHT_TYPE_MATCAP); @@ -103,8 +105,14 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd) /* XXX: Really quick conversion to avoid washed out background. * Needs to be addressed properly (color managed using ocio). */ - srgb_to_linearrgb_v3_v3(wd->background_color_high, wd->background_color_high); - srgb_to_linearrgb_v3_v3(wd->background_color_low, wd->background_color_low); + if (wpd->use_color_management) { + srgb_to_linearrgb_v3_v3(wd->background_color_high, wd->background_color_high); + srgb_to_linearrgb_v3_v3(wd->background_color_low, wd->background_color_low); + } + else { + copy_v3_v3(wd->background_color_high, wd->background_color_high); + copy_v3_v3(wd->background_color_low, wd->background_color_low); + } } else { zero_v3(wd->background_color_low); @@ -126,7 +134,12 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd) wpd->world_clip_planes = rv3d->clip; DRW_state_clip_planes_set_from_rv3d(rv3d); UI_GetThemeColor4fv(TH_V3D_CLIPPING_BORDER, wpd->world_clip_planes_color); - srgb_to_linearrgb_v3_v3(wpd->world_clip_planes_color, wpd->world_clip_planes_color); + if (wpd->use_color_management) { + srgb_to_linearrgb_v3_v3(wpd->world_clip_planes_color, wpd->world_clip_planes_color); + } + else { + copy_v3_v3(wpd->world_clip_planes_color, wpd->world_clip_planes_color); + } } else { wpd->world_clip_planes = NULL; diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c index 5fd4c4a6109..e721a4ccdb8 100644 --- a/source/blender/draw/engines/workbench/workbench_materials.c +++ b/source/blender/draw/engines/workbench/workbench_materials.c @@ -259,7 +259,8 @@ void workbench_material_shgroup_uniform( if (workbench_material_determine_color_type(wpd, material->ima, ob) == V3D_SHADING_TEXTURE_COLOR) { ImBuf *ibuf = BKE_image_acquire_ibuf(material->ima, NULL, NULL); - const bool do_color_correction = (ibuf && (ibuf->colormanage_flag & IMB_COLORMANAGE_IS_DATA) == 0); + const bool do_color_correction = wpd->use_color_management && + (ibuf && (ibuf->colormanage_flag & IMB_COLORMANAGE_IS_DATA) == 0); BKE_image_release_ibuf(material->ima, ibuf, NULL); GPUTexture *tex = GPU_texture_from_blender(material->ima, NULL, GL_TEXTURE_2D, false); DRW_shgroup_uniform_texture(grp, "image", tex); diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index dd784e45b88..da6df4c93bd 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -252,6 +252,7 @@ typedef struct WORKBENCH_PrivateData { bool dof_enabled; /* Color Management */ + bool use_color_management; bool use_color_render_settings; } WORKBENCH_PrivateData; /* Transient data */ diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index d9313049e0a..beda3ebb7b8 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -408,7 +408,7 @@ static const EnumPropertyItem *rna_ColorManagedDisplaySettings_display_device_it return items; } -static void rna_ColorManagedDisplaySettings_display_device_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr) { ID *id = ptr->id.data; @@ -422,6 +422,11 @@ static void rna_ColorManagedDisplaySettings_display_device_update(Main *UNUSED(b DEG_id_tag_update(id, 0); WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL); + + /* Color management can be baked into shaders, need to refresh. */ + for (Material *ma = bmain->mat.first; ma; ma = ma->id.next) { + DEG_id_tag_update(&ma->id, ID_RECALC_COPY_ON_WRITE); + } } } |