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:
-rw-r--r--release/datafiles/colormanagement/config.ocio2
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c23
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h3
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c3
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_aa.c12
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h3
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c7
8 files changed, 35 insertions, 20 deletions
diff --git a/release/datafiles/colormanagement/config.ocio b/release/datafiles/colormanagement/config.ocio
index ce79dfeb540..c8466ab99fc 100644
--- a/release/datafiles/colormanagement/config.ocio
+++ b/release/datafiles/colormanagement/config.ocio
@@ -70,7 +70,7 @@ displays:
- !<View> {name: Default, colorspace: Raw}
active_displays: [sRGB, DCIP3, Rec709, XYZ, None]
-active_views: [Default, RRT, Raw, Log]
+active_views: [Filmic, Default, RRT, Raw, Log]
colorspaces:
- !<ColorSpace>
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index adbe165354a..8c66ba057b5 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -66,6 +66,7 @@ static void eevee_engine_init(void *ved)
/* Alloc transient pointers */
stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
}
+ stl->g_data->use_color_view_settings = USE_SCENE_LIGHT(v3d) || !LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d);
stl->g_data->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL);
@@ -316,37 +317,39 @@ static void eevee_draw_background(void *vedata)
/* Tonemapping and transfer result to default framebuffer. */
+ bool use_view_settings = stl->g_data->use_color_view_settings;
+
GPU_framebuffer_bind(dfbl->default_fb);
- DRW_transform_to_display(stl->effects->final_tx);
+ DRW_transform_to_display(stl->effects->final_tx, use_view_settings);
/* Debug : Ouput buffer to view. */
switch (G.debug_value) {
case 1:
- if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer);
+ if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer, use_view_settings);
break;
case 2:
- if (effects->ssr_pdf_output) DRW_transform_to_display(effects->ssr_pdf_output);
+ if (effects->ssr_pdf_output) DRW_transform_to_display(effects->ssr_pdf_output, use_view_settings);
break;
case 3:
- if (effects->ssr_normal_input) DRW_transform_to_display(effects->ssr_normal_input);
+ if (effects->ssr_normal_input) DRW_transform_to_display(effects->ssr_normal_input, use_view_settings);
break;
case 4:
- if (effects->ssr_specrough_input) DRW_transform_to_display(effects->ssr_specrough_input);
+ if (effects->ssr_specrough_input) DRW_transform_to_display(effects->ssr_specrough_input, use_view_settings);
break;
case 5:
- if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer);
+ if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer, use_view_settings);
break;
case 6:
- if (effects->gtao_horizons_debug) DRW_transform_to_display(effects->gtao_horizons_debug);
+ if (effects->gtao_horizons_debug) DRW_transform_to_display(effects->gtao_horizons_debug, use_view_settings);
break;
case 7:
- if (effects->gtao_horizons) DRW_transform_to_display(effects->gtao_horizons);
+ if (effects->gtao_horizons) DRW_transform_to_display(effects->gtao_horizons, use_view_settings);
break;
case 8:
- if (effects->sss_data) DRW_transform_to_display(effects->sss_data);
+ if (effects->sss_data) DRW_transform_to_display(effects->sss_data, use_view_settings);
break;
case 9:
- if (effects->velocity_tx) DRW_transform_to_display(effects->velocity_tx);
+ if (effects->velocity_tx) DRW_transform_to_display(effects->velocity_tx, use_view_settings);
break;
default:
break;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 349a27a1765..bd1323dab3b 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -774,6 +774,9 @@ typedef struct EEVEE_PrivateData {
/* Mist Settings */
float mist_start, mist_inv_dist, mist_falloff;
+
+ /* Color Management */
+ bool use_color_view_settings;
} EEVEE_PrivateData; /* Transient data */
/* eevee_data.c */
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index 24eb0f38a46..2b716b8ffe3 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -21,14 +21,17 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
View3D *v3d = draw_ctx->v3d;
if (!v3d) {
wpd->shading = scene->display.shading;
+ wpd->use_color_view_settings = true;
}
else if (v3d->shading.type == OB_RENDER &&
BKE_scene_uses_blender_opengl(scene))
{
wpd->shading = scene->display.shading;
+ wpd->use_color_view_settings = true;
}
else {
wpd->shading = v3d->shading;
+ wpd->use_color_view_settings = false;
}
if (wpd->shading.light == V3D_LIGHTING_MATCAP) {
diff --git a/source/blender/draw/engines/workbench/workbench_effect_aa.c b/source/blender/draw/engines/workbench/workbench_effect_aa.c
index 6269496f568..deb9a517f96 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_aa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_aa.c
@@ -56,7 +56,7 @@ void workbench_aa_create_pass(WORKBENCH_Data *vedata, GPUTexture **tx)
}
}
-static void workspace_aa_draw_transform(GPUTexture *tx)
+static void workspace_aa_draw_transform(GPUTexture *tx, WORKBENCH_PrivateData *wpd)
{
if (DRW_state_is_image_render()) {
/* Linear result for render. */
@@ -64,7 +64,7 @@ static void workspace_aa_draw_transform(GPUTexture *tx)
}
else {
/* Display space result for viewport. */
- DRW_transform_to_display(tx);
+ DRW_transform_to_display(tx, wpd->use_color_view_settings);
}
}
@@ -79,7 +79,7 @@ void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
if (FXAA_ENABLED(wpd)) {
GPU_framebuffer_bind(fbl->effect_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
GPU_framebuffer_bind(dfbl->color_only_fb);
DRW_draw_pass(psl->effect_aa_pass);
}
@@ -92,11 +92,11 @@ void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
*/
if (effect_info->jitter_index == 1) {
GPU_framebuffer_bind(dfbl->color_only_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
}
else {
GPU_framebuffer_bind(fbl->effect_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
GPU_framebuffer_bind(dfbl->color_only_fb);
DRW_draw_pass(psl->effect_aa_pass);
}
@@ -104,6 +104,6 @@ void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
}
else {
GPU_framebuffer_bind(dfbl->color_only_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
}
}
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index dc2894f0207..10ea0152b90 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -187,6 +187,9 @@ typedef struct WORKBENCH_PrivateData {
float viewvecs[3][4];
float ssao_params[4];
float ssao_settings[4];
+
+ /* Color Management */
+ bool use_color_view_settings;
} WORKBENCH_PrivateData; /* Transient data */
typedef struct WORKBENCH_EffectInfo {
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index d2c44cfef2a..0db16ab5472 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -234,7 +234,7 @@ void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo);
} \
} while (0)
-void DRW_transform_to_display(struct GPUTexture *tex);
+void DRW_transform_to_display(struct GPUTexture *tex, bool use_view_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 87239e7d93e..714edc23719 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -224,7 +224,7 @@ bool DRW_check_psys_visible_within_active_context(
* \{ */
/* Use color management profile to draw texture to framebuffer */
-void DRW_transform_to_display(GPUTexture *tex)
+void DRW_transform_to_display(GPUTexture *tex, bool use_view_settings)
{
drw_state_set(DRW_STATE_WRITE_COLOR);
@@ -239,8 +239,11 @@ void DRW_transform_to_display(GPUTexture *tex)
/* View transform is already applied for offscreen, don't apply again, see: T52046 */
if (!(DST.options.is_image_render && !DST.options.is_scene_render)) {
Scene *scene = DST.draw_ctx.scene;
+ ColorManagedDisplaySettings *display_settings = &scene->display_settings;
+ ColorManagedViewSettings *view_settings = (use_view_settings) ? &scene->view_settings : NULL;
+
use_ocio = IMB_colormanagement_setup_glsl_draw_from_space(
- &scene->view_settings, &scene->display_settings, NULL, dither, false);
+ view_settings, display_settings, NULL, dither, false);
}
if (!use_ocio) {