Commit: 7762522ecda77790f0bfa80a11655af578c66d47
Author: Jeroen Bakker
Date:   Thu May 24 09:06:29 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB7762522ecda77790f0bfa80a11655af578c66d47

Workbench: define to enable/disable revealage buffer.

===================================================================

M       
source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
M       
source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
M       
source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
M       source/blender/draw/engines/workbench/workbench_forward.c
M       source/blender/draw/engines/workbench/workbench_materials.c
M       source/blender/draw/engines/workbench/workbench_private.h

===================================================================

diff --git 
a/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
 
b/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
index 02acc0aa00e..12d6296655d 100644
--- 
a/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
+++ 
b/source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
@@ -2,7 +2,9 @@ out vec4 fragColor;
 
 uniform usampler2D objectId;
 uniform sampler2D transparentAccum;
+#ifdef WORKBENCH_REVEALAGE_ENABLED
 uniform sampler2D transparentRevealage;
+#endif
 uniform vec2 invertedViewportSize;
 
 layout(std140) uniform world_block {
@@ -15,8 +17,9 @@ void main()
        vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
        uint object_id = texelFetch(objectId, texel, 0).r;
        vec4 transparent_accum = texelFetch(transparentAccum, texel, 0);
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        float transparent_revealage = texelFetch(transparentRevealage, texel, 
0).r;
-       float revealage = texelFetch(transparentRevealage, texel, 0).r;
+#endif
        vec4 color;
 
 #ifdef V3D_SHADING_OBJECT_OUTLINE
@@ -28,8 +31,11 @@ void main()
        if (object_id == NO_OBJECT_ID) {
                color = vec4(background_color(world_data, uv_viewport.y), 0.0);
        } else {
+#ifdef WORKBENCH_REVEALAGE_ENABLED
                color = vec4((transparent_accum.xyz / max(transparent_accum.a, 
EPSILON)) * (1.0 - transparent_revealage), 1.0);
-               // color = vec4(transparent_revealage);
+#else
+               color = vec4(transparent_accum.xyz / max(transparent_accum.a, 
EPSILON), 1.0);
+#endif
        }
 
        fragColor = vec4(mix(world_data.object_outline_color.rgb, color.xyz, 
outline), 1.0);
diff --git 
a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
 
b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
index 66445048996..309ae063284 100644
--- 
a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
+++ 
b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_accum_frag.glsl
@@ -42,7 +42,7 @@ void main()
        vec3 shaded_color = diffuse_color.rgb;
 #endif /* V3D_LIGHTING_STUDIO */
 
-       float alpha = 1.0;
+       float alpha = 0.5       ;
        vec4 premultiplied = vec4(shaded_color.rgb * alpha, alpha);
        transparentAccum = calculate_transparent_accum(premultiplied);
 }
diff --git 
a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
 
b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
index 22f1cbc8a66..da87fe8f542 100644
--- 
a/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
+++ 
b/source/blender/draw/engines/workbench/shaders/workbench_forward_transparent_revealage_frag.glsl
@@ -2,6 +2,6 @@ layout(location=0) out float transparentRevealage;
 
 void main()
 {
-       transparentRevealage = 1.0;
+       transparentRevealage = 0.5;
 }
 
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c 
b/source/blender/draw/engines/workbench/workbench_forward.c
index f2c8f3f0aef..d73a37bb341 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -57,7 +57,9 @@ static struct {
 
        struct GPUTexture *object_id_tx; /* ref only, not alloced */
        struct GPUTexture *transparent_accum_tx; /* ref only, not alloced */
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        struct GPUTexture *transparent_revealage_tx; /* ref only, not alloced */
+#endif
        struct GPUTexture *composite_buffer_tx; /* ref only, not alloced */
        int next_object_id;
        float normal_world_matrix[3][3];
@@ -67,7 +69,9 @@ static struct {
 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[];
+#ifdef WORKBENCH_REVEALAGE_ENABLED
 extern char datatoc_workbench_forward_transparent_revealage_frag_glsl[];
+#endif
 extern char datatoc_workbench_data_lib_glsl[];
 extern char datatoc_workbench_background_lib_glsl[];
 extern char datatoc_workbench_checkerboard_depth_frag_glsl[];
@@ -107,6 +111,7 @@ static char 
*workbench_build_forward_transparent_accum_frag(void)
        return str;
 }
 
+#ifdef WORKBENCH_REVEALAGE_ENABLED
 static char *workbench_build_forward_transparent_revealage_frag(void)
 {
        char *str = NULL;
@@ -120,6 +125,7 @@ static char 
*workbench_build_forward_transparent_revealage_frag(void)
        BLI_dynstr_free(ds);
        return str;
 }
+#endif
 
 static char *workbench_build_forward_composite_frag(void)
 {
@@ -248,15 +254,18 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
                memset(e_data.composite_sh_cache, 0x00, sizeof(struct GPUShader 
*) * MAX_SHADERS);
                memset(e_data.transparent_accum_sh_cache, 0x00, sizeof(struct 
GPUShader *) * MAX_SHADERS);
 
-               /* XXX: forward depth does not use any defines ATM. */
                char *defines = workbench_material_build_defines(wpd, OB_SOLID);
                char *forward_depth_frag = workbench_build_forward_depth_frag();
-               char *forward_transparent_revealage_frag = 
workbench_build_forward_transparent_revealage_frag();
                e_data.object_outline_sh = 
DRW_shader_create(datatoc_workbench_prepass_vert_glsl, NULL, 
forward_depth_frag, defines);
+
+#ifdef WORKBENCH_REVEALAGE_ENABLED
+               char *forward_transparent_revealage_frag = 
workbench_build_forward_transparent_revealage_frag();
                e_data.transparent_revealage_sh = 
DRW_shader_create(datatoc_workbench_prepass_vert_glsl, NULL, 
forward_transparent_revealage_frag, defines);
+               MEM_freeN(forward_transparent_revealage_frag);
+#endif
+
                e_data.depth_sh = DRW_shader_create_3D_depth_only();
                e_data.checker_depth_sh = 
DRW_shader_create_fullscreen(datatoc_workbench_checkerboard_depth_frag_glsl, 
NULL);
-               MEM_freeN(forward_transparent_revealage_frag);
                MEM_freeN(forward_depth_frag);
                MEM_freeN(defines);
        }
@@ -267,7 +276,9 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
 
        e_data.object_id_tx = DRW_texture_pool_query_2D(size[0], size[1], 
GPU_R32UI, &draw_engine_workbench_transparent);
        e_data.transparent_accum_tx = DRW_texture_pool_query_2D(size[0], 
size[1], GPU_RGBA16F, &draw_engine_workbench_transparent);
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        e_data.transparent_revealage_tx = DRW_texture_pool_query_2D(size[0], 
size[1], GPU_R16F, &draw_engine_workbench_transparent);
+#endif
        e_data.composite_buffer_tx = DRW_texture_pool_query_2D(size[0], 
size[1], GPU_RGBA16F, &draw_engine_workbench_transparent);
        GPU_framebuffer_ensure_config(&fbl->object_outline_fb, {
                GPU_ATTACHMENT_TEXTURE(dtxl->depth),
@@ -277,10 +288,14 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
                GPU_ATTACHMENT_NONE,
                GPU_ATTACHMENT_TEXTURE(e_data.transparent_accum_tx),
        });
+
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        GPU_framebuffer_ensure_config(&fbl->transparent_revealage_fb, {
                GPU_ATTACHMENT_NONE,
                GPU_ATTACHMENT_TEXTURE(e_data.transparent_revealage_tx),
        });
+#endif
+
        GPU_framebuffer_ensure_config(&fbl->composite_fb, {
                GPU_ATTACHMENT_NONE,
                GPU_ATTACHMENT_TEXTURE(e_data.composite_buffer_tx),
@@ -289,9 +304,12 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
        DRW_stats_group_start("Clear Buffers");
        GPU_framebuffer_bind(fbl->transparent_accum_fb);
        GPU_framebuffer_clear_color(fbl->transparent_accum_fb, clear_color);
+
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        const float clear_color1[4] = {1.0f, 1.0f, 1.0f, 1.0f};
        GPU_framebuffer_bind(fbl->transparent_revealage_fb);
        GPU_framebuffer_clear_color(fbl->transparent_revealage_fb, 
clear_color1);
+#endif
        GPU_framebuffer_bind(fbl->object_outline_fb);
        GPU_framebuffer_clear_color_depth(fbl->object_outline_fb, clear_color, 
1.0f);
        DRW_stats_group_end();
@@ -301,14 +319,17 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
                int state = DRW_STATE_WRITE_COLOR | DRW_STATE_ADDITIVE_FULL;
                psl->transparent_accum_pass = DRW_pass_create("Transparent 
Accum", state);
        }
+
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        /* Treansparecy Revealage */
        {
                int state = DRW_STATE_WRITE_COLOR | 
DRW_STATE_TRANSPARENT_REVEALAGE;
                psl->transparent_revealage_pass = DRW_pass_create("Transparent 
Revealage", state);
                grp = DRW_shgroup_create(e_data.transparent_revealage_sh, 
psl->transparent_revealage_pass);
                wpd->transparent_revealage_shgrp = grp;
-
        }
+#endif
+
        /* Depth */
        {
                int state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | 
DRW_STATE_DEPTH_LESS;
@@ -322,7 +343,9 @@ void workbench_forward_engine_init(WORKBENCH_Data *vedata)
                grp = DRW_shgroup_create(wpd->composite_sh, 
psl->composite_pass);
                DRW_shgroup_uniform_texture_ref(grp, "objectId", 
&e_data.object_id_tx);
                DRW_shgroup_uniform_texture_ref(grp, "transparentAccum", 
&e_data.transparent_accum_tx);
+#ifdef WORKBENCH_REVEALAGE_ENABLED
                DRW_shgroup_uniform_texture_ref(grp, "transparentRevealage", 
&e_data.transparent_revealage_tx);
+#endif
                DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo);
                DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", 
DRW_viewport_invert_size_get(), 1);
                DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), 
NULL);
@@ -342,7 +365,9 @@ void workbench_forward_engine_free()
                DRW_SHADER_FREE_SAFE(e_data.composite_sh_cache[index]);
                DRW_SHADER_FREE_SAFE(e_data.transparent_accum_sh_cache[index]);
        }
+#ifdef WORKBENCH_REVEALAGE_ENABLED
        DRW_SHADER_FREE_SAFE(e_data.transparent_revealage_sh);
+#endif
        DRW_SHADER_FREE_SAFE(e_data.object_outline_sh);
        DRW_SHADER_FREE_SAFE(e_data.checker_depth_sh);
 }
@@ -353,8 +378,10 @@ void workbench_forward_cache_init(WORKBENCH_Data 
*UNUSED(vedata))
 
 static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, 
Object *ob)
 {
+       #ifdef WORKBENCH_REVEALAGE_ENABLED
        WORKBENCH_StorageList *stl = vedata->stl;
        WORKBENCH_PrivateData *wpd = stl->g_data;
+#endif
        const DRWContextState *draw_ctx = DRW_context_state_get();
        if (ob == draw_ctx->object_edit) {
                return;
@@ -375,7 +402,9 @@ static void 
workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O
                if (draw_as == PART_DRAW_PATH) {
                        struct Gwn_Batch *geom = 
DRW_cache_particles_get_hair(ob, psys, NULL);
                        WORKBENCH_MaterialData *material = get_or

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to