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:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.c5
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_aa.c10
-rw-r--r--source/blender/draw/intern/DRW_render.h1
-rw-r--r--source/blender/draw/intern/draw_common.c2
-rw-r--r--source/blender/draw/intern/draw_manager.c18
-rw-r--r--source/blender/draw/intern/draw_manager.h1
6 files changed, 24 insertions, 13 deletions
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index f78f7295d24..07588467ae2 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -976,7 +976,7 @@ void GPENCIL_draw_scene(void *ved)
stl->storage->blend_mode = array_elm->mode;
stl->storage->clamp_layer = (int)array_elm->clamp_layer;
stl->storage->blend_opacity = array_elm->blend_opacity;
- stl->storage->tonemapping = stl->storage->is_render ? 1 : 0;
+ stl->storage->tonemapping = DRW_state_do_color_management() ? 0 : 1;
DRW_draw_pass(psl->blend_pass);
stl->storage->tonemapping = 0;
@@ -1018,7 +1018,8 @@ void GPENCIL_draw_scene(void *ved)
GPU_framebuffer_bind(fbl->main);
}
/* tonemapping */
- stl->storage->tonemapping = is_render ? 1 : 0;
+ stl->storage->tonemapping = DRW_state_do_color_management() ? 0 : 1;
+
/* active select flag and selection color */
if (!is_render) {
UI_GetThemeColorShadeAlpha4fv(
diff --git a/source/blender/draw/engines/workbench/workbench_effect_aa.c b/source/blender/draw/engines/workbench/workbench_effect_aa.c
index 965f5a5ca4f..ed311db0626 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_aa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_aa.c
@@ -55,14 +55,14 @@ void workbench_aa_create_pass(WORKBENCH_Data *vedata, GPUTexture **tx)
static void workspace_aa_draw_transform(GPUTexture *tx, WORKBENCH_PrivateData *wpd)
{
- if (DRW_state_is_image_render()) {
- /* Linear result for render. */
- DRW_transform_none(tx);
- }
- else {
+ if (DRW_state_do_color_management()) {
/* Display space result for viewport. */
DRW_transform_to_display(tx, wpd->use_color_render_settings, wpd->use_color_render_settings);
}
+ else {
+ /* Linear result for render. */
+ DRW_transform_none(tx);
+ }
}
void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 4115038ee42..315b3ee8b30 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -663,6 +663,7 @@ bool DRW_state_is_fbo(void);
bool DRW_state_is_select(void);
bool DRW_state_is_depth(void);
bool DRW_state_is_image_render(void);
+bool DRW_state_do_color_management(void);
bool DRW_state_is_scene_render(void);
bool DRW_state_is_opengl_render(void);
bool DRW_state_is_playback(void);
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index 866fd57b9a8..9e494cdad88 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -156,7 +156,7 @@ void DRW_globals_update(void)
gb->sizeEdgeFix = U.pixelsize * (0.5f + 2.0f * (2.0f * (gb->sizeEdge * (float)M_SQRT1_2)));
/* Color management. */
- if (DRW_state_is_image_render()) {
+ if (!DRW_state_do_color_management()) {
float *color = gb->UBO_FIRST_COLOR;
do {
/* TODO more accurate transform. */
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.
*/
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index 867d7132c20..ddbfa81985d 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -315,6 +315,7 @@ typedef struct DRWManager {
uint is_depth : 1;
uint is_image_render : 1;
uint is_scene_render : 1;
+ uint do_color_management : 1;
uint draw_background : 1;
uint draw_text : 1;
} options;