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:
authorJeroen Bakker <jeroen@blender.org>2021-01-26 16:05:50 +0300
committerJeroen Bakker <jeroen@blender.org>2021-01-26 16:25:18 +0300
commited809866b17262b1eaa24765aaf711e44f62d862 (patch)
treeb50344480b1bdebbf74c0b263477e2a5858864c1 /source/blender/gpu/intern/gpu_viewport.c
parente6aece32a0499fb50648ad6249c38af9fffc8d24 (diff)
Viewport Rendering: Don't clamp when overlays are disabled.
During viewport rendering the color values were clamped in order to apply the overlay on top of it. This clamping would show the scene colors washed out. This patch adds a work around to skip the clamping when the overlays are turned off. Parial fix for {T77909}
Diffstat (limited to 'source/blender/gpu/intern/gpu_viewport.c')
-rw-r--r--source/blender/gpu/intern/gpu_viewport.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index a83654d31e7..205ba1d06d6 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -749,7 +749,8 @@ static void gpu_viewport_batch_free(GPUViewport *viewport)
static void gpu_viewport_draw_colormanaged(GPUViewport *viewport,
const rctf *rect_pos,
const rctf *rect_uv,
- bool display_colorspace)
+ bool display_colorspace,
+ bool do_overlay_merge)
{
DefaultTextureList *dtxl = viewport->txl;
GPUTexture *color = dtxl->color;
@@ -771,7 +772,7 @@ static void gpu_viewport_draw_colormanaged(GPUViewport *viewport,
NULL,
viewport->dither,
false,
- true);
+ do_overlay_merge);
}
GPUBatch *batch = gpu_viewport_batch_get(viewport, rect_pos, rect_uv);
@@ -780,6 +781,7 @@ static void gpu_viewport_draw_colormanaged(GPUViewport *viewport,
}
else {
GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE);
+ GPU_batch_uniform_1i(batch, "overlay", do_overlay_merge);
GPU_batch_uniform_1i(batch, "display_transform", display_colorspace);
GPU_batch_uniform_1i(batch, "image_texture", 0);
GPU_batch_uniform_1i(batch, "overlays_texture", 1);
@@ -803,7 +805,8 @@ static void gpu_viewport_draw_colormanaged(GPUViewport *viewport,
void GPU_viewport_draw_to_screen_ex(GPUViewport *viewport,
int view,
const rcti *rect,
- bool display_colorspace)
+ bool display_colorspace,
+ bool do_overlay_merge)
{
gpu_viewport_framebuffer_view_set(viewport, view);
DefaultFramebufferList *dfbl = viewport->fbl;
@@ -850,7 +853,8 @@ void GPU_viewport_draw_to_screen_ex(GPUViewport *viewport,
SWAP(float, uv_rect.ymin, uv_rect.ymax);
}
- gpu_viewport_draw_colormanaged(viewport, &pos_rect, &uv_rect, display_colorspace);
+ gpu_viewport_draw_colormanaged(
+ viewport, &pos_rect, &uv_rect, display_colorspace, do_overlay_merge);
}
/**
@@ -862,7 +866,7 @@ void GPU_viewport_draw_to_screen_ex(GPUViewport *viewport,
*/
void GPU_viewport_draw_to_screen(GPUViewport *viewport, int view, const rcti *rect)
{
- GPU_viewport_draw_to_screen_ex(viewport, view, rect, true);
+ GPU_viewport_draw_to_screen_ex(viewport, view, rect, true, true);
}
/**
@@ -870,7 +874,8 @@ void GPU_viewport_draw_to_screen(GPUViewport *viewport, int view, const rcti *re
*/
void GPU_viewport_unbind_from_offscreen(GPUViewport *viewport,
struct GPUOffScreen *ofs,
- bool display_colorspace)
+ bool display_colorspace,
+ bool do_overlay_merge)
{
DefaultFramebufferList *dfbl = viewport->fbl;
DefaultTextureList *dtxl = viewport->txl;
@@ -896,7 +901,8 @@ void GPU_viewport_unbind_from_offscreen(GPUViewport *viewport,
.ymax = 1.0f,
};
- gpu_viewport_draw_colormanaged(viewport, &pos_rect, &uv_rect, display_colorspace);
+ gpu_viewport_draw_colormanaged(
+ viewport, &pos_rect, &uv_rect, display_colorspace, do_overlay_merge);
/* This one is from the offscreen. Don't free it with the viewport. */
dtxl->depth = NULL;