[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