GLES2.0:
Some device will give a warning on compling shaders(yet the compling will
succeed), and the rendering result is incorrect with blink & artifacts.
the problems is gradient
calculation(interpolation) relies on the neighbor pixels,
if the neighbor pixels are not in the same
conditional branch, the gradient will be invalid and result may be
undifed.
I guess it is an un-defined behavior, so some devices/drivers works
good, some don‘t.
1 //like this
2 if( test )
3 color = texture2D(sampler,UV);
4 else
5 color = vec4(0,0,0,0);
One workaround is use mix() or step() instead of condition test.
1 color = mix(vec4(0,0,0,0), texture2D(...), testVal);
When using condition branch, the texture
sampling may be not actually executed, which will increase graphics
performance.
One draw back on using mix/step is that the sampling is always performed,
then interpolated/multiplied.
WARNING: Calls to any function that may require a gradient
calculation inside a conditional block may return undefined results