#version 440 layout(location = 0) in vec4 vLCVertPos; layout(location = 0) out vec4 fragColor; layout(binding = 1) uniform sampler2DShadow shadowMap; layout(std140, binding = 0) uniform buf { mat4 mvp; mat4 lightMvp; mat4 shadowBias; int useShadow; } ubuf; void main() { vec4 adjustedLcVertPos = vLCVertPos; adjustedLcVertPos.z -= 0.0001; // bias to avoid acne // no textureProj, that seems to end up not doing the perspective divide for z (?) vec3 v = adjustedLcVertPos.xyz / adjustedLcVertPos.w; float sc = texture(shadowMap, v); // sampler is comparison enabled so compares to z float shadowFactor = 0.2; if (sc > 0 || ubuf.useShadow == 0) shadowFactor = 1.0; fragColor = vec4(0.5, 0.3 + ubuf.useShadow * 0.2, 0.7, 1.0) * shadowFactor; }