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:
authorClément Foucault <foucault.clem@gmail.com>2019-01-29 05:06:59 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-01-29 17:07:53 +0300
commitbc99f4903c5f55d35b5fec32d6e18400f25089fb (patch)
tree2fc65d8a39a7529d0cc885b26805ebc5c6e54f1e /source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl
parentd88492d4ad432a66d72269fe5fa514b18d0407ff (diff)
Workbench: Add transparency support for materials
This adds the posibility of having certain materials transparent in solid mode. The option is (for now) per material only and thus only shows in material color mode. This uses the same rendering technique as Xray mode. Note that objects are not considered transparent for selection with this.
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_forward_composite_frag.glsl15
1 files changed, 11 insertions, 4 deletions
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 cb5516ca34f..b1f08cfef15 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
@@ -5,10 +5,13 @@ uniform sampler2D transparentAccum;
uniform sampler2D transparentRevealage;
uniform vec2 invertedViewportSize;
+#ifndef ALPHA_COMPOSITE
layout(std140) uniform world_block {
WorldData world_data;
};
+#endif
+/* TODO: Bypass the whole shader if there is no xray pass and no outline pass. */
void main()
{
ivec2 texel = ivec2(gl_FragCoord.xy);
@@ -19,17 +22,21 @@ void main()
float trans_revealage = trans_accum.a;
trans_accum.a = texelFetch(transparentRevealage, texel, 0).r;
+ vec3 trans_color = trans_accum.rgb / clamp(trans_accum.a, 1e-4, 5e4);
+
+#ifndef ALPHA_COMPOSITE
vec3 bg_color = background_color(world_data, uv_viewport.y);
- /* TODO: Bypass the whole shader if there is no xray pass and no outline pass. */
- vec3 trans_color = trans_accum.rgb / clamp(trans_accum.a, 1e-4, 5e4);
vec3 color = mix(trans_color, bg_color, trans_revealage);
-#ifdef V3D_SHADING_OBJECT_OUTLINE
+# ifdef V3D_SHADING_OBJECT_OUTLINE
uint object_id = texelFetch(objectId, texel, 0).r;
float outline = calculate_object_outline(objectId, texel, object_id);
color = mix(world_data.object_outline_color.rgb, color, outline);
-#endif
+# endif
fragColor = vec4(color, 1.0);
+#else
+ fragColor = vec4(trans_color, 1.0 - trans_revealage);
+#endif
}