[Bf-blender-cvs] [691c6f94bbb] draw-colormanagement: Cleanup: Workbench: Remove background code
Clément Foucault
noreply at git.blender.org
Fri Jan 31 04:22:29 CET 2020
Commit: 691c6f94bbbddecf04b22fa201fc22b0589fdc67
Author: Clément Foucault
Date: Fri Jan 31 04:21:56 2020 +0100
Branches: draw-colormanagement
https://developer.blender.org/rB691c6f94bbbddecf04b22fa201fc22b0589fdc67
Cleanup: Workbench: Remove background code
We now use clear color to apply background color in render mode.
===================================================================
M source/blender/draw/CMakeLists.txt
D source/blender/draw/engines/workbench/shaders/workbench_background_lib.glsl
M source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
M source/blender/draw/engines/workbench/shaders/workbench_deferred_background_frag.glsl
M source/blender/draw/engines/workbench/workbench_data.c
M source/blender/draw/engines/workbench/workbench_deferred.c
M source/blender/draw/engines/workbench/workbench_forward.c
M source/blender/draw/engines/workbench/workbench_private.h
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 458f85d892a..9dd6a3b97fc 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -240,7 +240,6 @@ data_to_c_simple(engines/eevee/shaders/volumetric_resolve_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/volumetric_scatter_frag.glsl SRC)
data_to_c_simple(engines/eevee/shaders/volumetric_integration_frag.glsl SRC)
-data_to_c_simple(engines/workbench/shaders/workbench_background_lib.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_cavity_lib.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_cavity_frag.glsl SRC)
data_to_c_simple(engines/workbench/shaders/workbench_checkerboard_depth_frag.glsl SRC)
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_background_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_background_lib.glsl
deleted file mode 100644
index 3ac220aee59..00000000000
--- a/source/blender/draw/engines/workbench/shaders/workbench_background_lib.glsl
+++ /dev/null
@@ -1,5 +0,0 @@
-vec3 background_color(WorldData world_data, float y)
-{
- return mix(world_data.background_color_low, world_data.background_color_high, y).xyz +
- (world_data.background_dither_factor * bayer_dither_noise());
-}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
index f60eca24821..0c984b094d3 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
@@ -5,17 +5,12 @@ struct LightData {
};
struct WorldData {
- vec4 background_color_low;
- vec4 background_color_high;
vec4 object_outline_color;
vec4 shadow_direction_vs;
LightData lights[4];
vec4 ambient_color;
int num_lights;
int matcap_orientation;
- float background_alpha;
float curvature_ridge;
float curvature_valley;
- float background_dither_factor;
- int pad[2];
};
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_deferred_background_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_deferred_background_frag.glsl
index e956894727d..22fa2babbbf 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_deferred_background_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_deferred_background_frag.glsl
@@ -13,7 +13,6 @@ layout(std140) uniform world_block
void main()
{
vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
- vec3 background = background_color(world_data, uv_viewport.y);
#ifndef V3D_SHADING_OBJECT_OUTLINE
@@ -25,16 +24,7 @@ void main()
uint object_id = texelFetch(objectId, texel, 0).r;
float object_outline = calculate_object_outline(objectId, texel, object_id);
- if (object_outline == 0.0) {
- fragColor = vec4(0.0);
- }
- else {
- /* Do correct alpha blending. */
- vec4 background_color = vec4(0.0);
- vec4 outline_color = vec4(world_data.object_outline_color.rgb, 1.0);
- fragColor = mix(outline_color, background_color, object_outline);
- fragColor = vec4(fragColor.rgb / max(1e-8, fragColor.a), fragColor.a);
- }
+ fragColor = vec4(world_data.object_outline_color.rgb, 1.0) * (1.0 - object_outline);
#endif /* !V3D_SHADING_OBJECT_OUTLINE */
}
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index 051a1c9240a..056e6a6c364 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -99,8 +99,27 @@ static void workbench_world_data_update_shadow_direction_vs(WORKBENCH_PrivateDat
/* Shadow direction. */
mul_v3_mat3_m4v3(wd->shadow_direction_vs, view_matrix, light_direction);
}
+
/* \} */
+void workbench_clear_color_get(float color[4])
+{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const Scene *scene = draw_ctx->scene;
+
+ if (!DRW_state_is_scene_render() || !DRW_state_draw_background()) {
+ zero_v4(color);
+ }
+ else if (scene->world) {
+ copy_v3_v3(color, &scene->world->horr);
+ color[3] = 1.0f;
+ }
+ else {
+ zero_v3(color);
+ color[3] = 1.0f;
+ }
+}
+
void workbench_effect_info_init(WORKBENCH_EffectInfo *effect_info)
{
effect_info->jitter_index = 0;
@@ -152,39 +171,6 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
WORKBENCH_UBO_World *wd = &wpd->world_data;
wd->matcap_orientation = (wpd->shading.flag & V3D_SHADING_MATCAP_FLIP_X) != 0;
- wd->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
-
- if ((scene->world != NULL) &&
- (!v3d || (v3d && ((v3d->shading.background_type == V3D_SHADING_BACKGROUND_WORLD) ||
- (v3d->shading.type == OB_RENDER))))) {
- copy_v3_v3(wd->background_color_low, &scene->world->horr);
- copy_v3_v3(wd->background_color_high, &scene->world->horr);
- }
- else if (v3d && (v3d->shading.background_type == V3D_SHADING_BACKGROUND_VIEWPORT)) {
- copy_v3_v3(wd->background_color_low, v3d->shading.background_color);
- copy_v3_v3(wd->background_color_high, v3d->shading.background_color);
- }
- else if (v3d) {
- UI_GetThemeColor3fv(UI_GetThemeValue(TH_SHOW_BACK_GRAD) ? TH_BACK_GRAD : TH_BACK,
- wd->background_color_low);
- UI_GetThemeColor3fv(TH_BACK, wd->background_color_high);
-
- /* XXX: Really quick conversion to avoid washed out background.
- * Needs to be addressed properly (color managed using ocio). */
- if (wpd->use_color_management) {
- srgb_to_linearrgb_v3_v3(wd->background_color_high, wd->background_color_high);
- srgb_to_linearrgb_v3_v3(wd->background_color_low, wd->background_color_low);
- }
- else {
- copy_v3_v3(wd->background_color_high, wd->background_color_high);
- copy_v3_v3(wd->background_color_low, wd->background_color_low);
- }
- }
- else {
- zero_v3(wd->background_color_low);
- zero_v3(wd->background_color_high);
- }
- wd->background_dither_factor = workbench_background_dither_factor(wpd);
studiolight_update_world(wpd, wpd->studio_light, wd);
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index 393f6009379..3421ec8125e 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -105,7 +105,6 @@ extern char datatoc_workbench_shadow_geom_glsl[];
extern char datatoc_workbench_shadow_caps_geom_glsl[];
extern char datatoc_workbench_shadow_debug_frag_glsl[];
-extern char datatoc_workbench_background_lib_glsl[];
extern char datatoc_workbench_cavity_lib_glsl[];
extern char datatoc_workbench_common_lib_glsl[];
extern char datatoc_workbench_data_lib_glsl[];
@@ -122,7 +121,6 @@ static char *workbench_build_composite_frag(WORKBENCH_PrivateData *wpd)
BLI_dynstr_append(ds, datatoc_common_view_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_data_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_common_lib_glsl);
- BLI_dynstr_append(ds, datatoc_workbench_background_lib_glsl);
if (!FLAT_ENABLED(wpd)) {
BLI_dynstr_append(ds, datatoc_workbench_world_light_lib_glsl);
@@ -260,7 +258,6 @@ static GPUShader *ensure_background_shader(WORKBENCH_PrivateData *wpd)
const char *defines = (index) ? "#define V3D_SHADING_OBJECT_OUTLINE\n" : NULL;
char *frag = BLI_string_joinN(datatoc_workbench_data_lib_glsl,
datatoc_workbench_common_lib_glsl,
- datatoc_workbench_background_lib_glsl,
datatoc_workbench_object_outline_lib_glsl,
datatoc_workbench_deferred_background_frag_glsl);
e_data.background_sh[index] = DRW_shader_create_fullscreen(frag, defines);
@@ -717,8 +714,12 @@ void workbench_deferred_cache_init(WORKBENCH_Data *vedata)
/* Background Pass */
{
- psl->background_pass = DRW_pass_create("Background",
- DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
+ DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL;
+ if (DRW_state_is_scene_render()) {
+ /* Composite the scene over cleared background. */
+ state |= DRW_STATE_BLEND_ALPHA_PREMUL;
+ }
+ psl->background_pass = DRW_pass_create("Background", state);
grp = DRW_shgroup_create(wpd->background_sh, psl->background_pass);
DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo);
DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
@@ -1314,6 +1315,13 @@ void workbench_deferred_draw_scene(WORKBENCH_Data *vedata)
DRW_draw_pass(psl->cavity_pass);
}
+ if (DRW_state_is_scene_render()) {
+ float clear_color[4];
+ workbench_clear_color_get(clear_color);
+ GPU_framebuffer_bind(fbl->composite_fb);
+ GPU_framebuffer_clear_color(fbl->composite_fb, clear_color);
+ }
+
if (SHADOW_ENABLED(wpd)) {
#ifdef DEBUG_SHADOW_VOLUME
GPU_framebuffer_bind(fbl->composite_fb);
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index a09d295a4c6..99df6cb8fed 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -72,7 +72,6 @@ extern char datatoc_workbench_forward_composite_frag_glsl[];
extern char datatoc_workbench_forward_depth_frag_glsl[];
extern char datatoc_workbench_forward_transparent_accum_frag_glsl[];
extern char datatoc_workbench_data_lib_glsl[];
-extern char datatoc_workbench_background_lib_glsl[];
extern char datatoc_workbench_checkerboard_depth_frag_glsl[];
extern char datatoc_workbench_object_outline_lib_glsl[];
extern char datatoc_workbench_curvature_lib_glsl[];
@@ -128,7 +127,6 @@ static char *workbench_build_forward_composite_frag(void)
BLI_dynstr_append(ds, datatoc_workbench_data_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_common_lib_glsl);
- BLI_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list