From c4ae0356faf7769d23dfe71da3841f35db1327d8 Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Wed, 27 Jan 2016 15:21:34 +0900 Subject: [PATCH] shadowmap_*.glsl: added texture2DCompare() --- .../ShaderChunk/shadowmap_fragment.glsl | 21 +++++++++---------- .../ShaderChunk/shadowmap_pars_fragment.glsl | 9 ++++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/renderers/shaders/ShaderChunk/shadowmap_fragment.glsl b/src/renderers/shaders/ShaderChunk/shadowmap_fragment.glsl index 5462eb2b60..afcf20dce2 100644 --- a/src/renderers/shaders/ShaderChunk/shadowmap_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/shadowmap_fragment.glsl @@ -112,15 +112,15 @@ vec3 shadowMask = vec3( 1.0 ); float dx1 = + texelSizeX; float dy1 = + texelSizeY; - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) ), shadowCoord.z ); - shadow += step( unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy, shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ); + shadow += texture2DCompare( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ); shadow *= 1.0 / 9.0; shadow *= shadowDarkness[ i ]; @@ -170,8 +170,7 @@ vec3 shadowMask = vec3( 1.0 ); #else // no percentage-closer filtering: - vec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy ); - shadow = step( unpackDepth( rgbaDepth ), shadowCoord.z ) * shadowDarkness[ i ]; + shadow = texture2DCompare( shadowMap[ i ], shadowCoord.xy, shadowCoord.z ) * shadowDarkness[ i ]; #endif diff --git a/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl index c82f3b101a..47f5e7532d 100644 --- a/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl @@ -11,8 +11,13 @@ float unpackDepth( const in vec4 rgba_depth ) { const vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 ); - float depth = dot( rgba_depth, bit_shift ); - return depth; + return dot( rgba_depth, bit_shift ); + + } + + float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { + + return step( unpackDepth( texture2D( depths, uv ) ), compare ); } -- GitLab