[Bf-blender-cvs] [a7ac3a3ee3c] draw-colormanagement: Overlay: Support viewport background modes
Clément Foucault
noreply at git.blender.org
Fri Jan 31 04:22:27 CET 2020
Commit: a7ac3a3ee3c9dcb8f52c00410274f0c848610b15
Author: Clément Foucault
Date: Fri Jan 31 04:19:33 2020 +0100
Branches: draw-colormanagement
https://developer.blender.org/rBa7ac3a3ee3c9dcb8f52c00410274f0c848610b15
Overlay: Support viewport background modes
Port code from Workbench.
===================================================================
M source/blender/draw/engines/overlay/overlay_background.c
M source/blender/draw/engines/overlay/shaders/background_frag.glsl
===================================================================
diff --git a/source/blender/draw/engines/overlay/overlay_background.c b/source/blender/draw/engines/overlay/overlay_background.c
index 13654544a64..23aad3506ad 100644
--- a/source/blender/draw/engines/overlay/overlay_background.c
+++ b/source/blender/draw/engines/overlay/overlay_background.c
@@ -37,15 +37,30 @@ void OVERLAY_background_cache_init(OVERLAY_Data *vedata)
OVERLAY_PrivateData *pd = vedata->stl->pd;
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
const DRWContextState *draw_ctx = DRW_context_state_get();
+ const Scene *scene = draw_ctx->scene;
const RegionView3D *rv3d = draw_ctx->rv3d;
const BoundBox *bb = rv3d->clipbb;
+ const View3D *v3d = draw_ctx->v3d;
bool draw_clipping_bounds = (pd->clipping_state != 0);
{
+ float color_override[4] = {0.0f, 0.0f, 0.0f, 0.0f};
int background_type;
if (!DRW_state_draw_background()) {
background_type = BG_CHECKER;
}
+ else if (v3d->shading.background_type == V3D_SHADING_BACKGROUND_WORLD && scene->world) {
+ background_type = BG_SOLID;
+ /* TODO(fclem) this is a scene refered linear color. we should convert
+ * it to display linear here. */
+ copy_v3_v3(color_override, &scene->world->horr);
+ color_override[3] = 1.0f;
+ }
+ else if (v3d->shading.background_type == V3D_SHADING_BACKGROUND_VIEWPORT) {
+ background_type = BG_SOLID;
+ copy_v3_v3(color_override, v3d->shading.background_color);
+ color_override[3] = 1.0f;
+ }
else if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
background_type = BG_GRADIENT;
}
@@ -61,6 +76,7 @@ void OVERLAY_background_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_texture_ref(grp, "colorBuffer", &dtxl->color);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_vec4_copy(grp, "colorOverride", color_override);
DRW_shgroup_uniform_int_copy(grp, "bgType", background_type);
DRW_shgroup_call_procedural_triangles(grp, NULL, 1);
}
diff --git a/source/blender/draw/engines/overlay/shaders/background_frag.glsl b/source/blender/draw/engines/overlay/shaders/background_frag.glsl
index cf9600afbe5..737c3acb438 100644
--- a/source/blender/draw/engines/overlay/shaders/background_frag.glsl
+++ b/source/blender/draw/engines/overlay/shaders/background_frag.glsl
@@ -3,6 +3,7 @@ uniform sampler2D colorBuffer;
uniform sampler2D depthBuffer;
uniform int bgType;
+uniform vec4 colorOverride;
in vec4 uvcoordsvar;
@@ -60,6 +61,8 @@ void main()
break;
}
+ bg_col = mix(bg_col, colorOverride.rgb, colorOverride.a);
+
/* Mimic alpha under behavior. Result is premultiplied. */
fragColor = vec4(bg_col, 1.0) * (1.0 - alpha);
More information about the Bf-blender-cvs
mailing list