Strange if-else branching behavior in a fragment shader
- by Winged
In my fragment shader I have passed an uniform int uLightType variable, which indicates what type of light is in usage right now. The problem is that if-else branching does not work correctly - the fragment shader performs instructions in every if statement block.
if (uLightType == 1) { // Spotlight light type
vec3 depthTextureCoord = vDepthPosition.xyz / vDepthPosition.w;
shadowDepth = unpack(texture2D(uDepthMapSampler, depthTextureCoord.xy));
}
else if (uLightType == 2) { // Omni-directional light type
shadowDepth = unpack(textureCube(uDepthCubemapSampler, -lightVec));
}
In the case when uLightType equals 1, unless I comment out the content of the second if block, it assigns an another value to shadowDepth.
Also while uLightType equals 1, when I remove the second 'if' block and change == to != like in the sample code below, nothing happens (which means that uLightType really equals 1).
if (uLightType != 1) { // Spotlight light type
vec3 depthTextureCoord = vDepthPosition.xyz / vDepthPosition.w;
shadowDepth = unpack(texture2D(uDepthMapSampler, depthTextureCoord.xy));
}
Also, when I manually create an int variable (which is not an uniform) like this: var lightType = 1; and replace uLightType with it in the if-else branch, everything works fine, so I guess it have something to do with the fact that uLightType is the uniform.