I tried to bind a DepthTexture to sampler2DShadow uniform variable in my shader but it failed with
[.WebGL-0x13c003b7100] GL_INVALID_OPERATION: Mismatch between texture format and sampler type (signed/unsigned/float/shadow).
Reproducible jsfiddle
Edit fiddle - JSFiddle - Code Playground
Am I missing something here? Please help.
The usage of sampler2DShadow
does not work since it requires a special texture parameter (gl.TEXTURE_COMPARE_MODE
) to have a specific value (gl.COMPARE_REF_TO_TEXTURE
). However, three.js
does not support setting this parameter.
What is your use case for sampler2DShadow
? Can’t you just use a normal sampler?
What is your use case for sampler2DShadow
? Can’t you just use a normal sampler?
I’m just venturing 
BTW I tried setting the parameter natively
const gl = renderer.getContext();
gl.texParameteri(
gl.TEXTURE_2D,
gl.TEXTURE_COMPARE_MODE,
gl.COMPARE_REF_TO_TEXTURE
);
but didn’t work either with the same error message.
Does Three.js internally discard the manually-set parameters? If not, why would it not work? According to Sampler (GLSL) - OpenGL Wiki the only requirements seems to have DEPTH_COMPONENT* format and TEXTURE_COMPARE_MODE set to COMPARE_REF_TO_TEXTURE. I would really appreciate your advice.
I don’t think your above code snippet is executed at the right time. The depth texture has to be bound otherwise the code has no effect.
1 Like