Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-28 15:41:06 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-28 15:41:48 +0300
commitd68484a60f539339db12a7eedd0ead0f116a43d5 (patch)
treeaaad274b769ff6e371ed8fca52a8dd2f512c858f
parentbbe5a95d05f7c9c7286e8f785ac92c2e16a114b2 (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.
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c19
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c3
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h1
-rw-r--r--source/blender/makesrna/intern/rna_color.c7
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);
+ }
}
}