Strange if-else branching behavior in a fragment shader
Posted
by
Winged
on Game Development
See other posts from Game Development
or by Winged
Published on 2014-06-04T11:03:23Z
Indexed on
2014/06/04
15:46 UTC
Read the original article
Hit count: 360
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.
© Game Development or respective owner