我正在进行纹理查找以在GLSL片段着色器中为表面着色。 在特定情况下,纹理坐标必须从其他纹理中获取,仅在这种情况下才会加载。
这适用于Nvidia和Intel显卡,但不适用于AMD。 对于AMD,如果未加载第二个纹理,则会丢弃该片段。无论if语句的结果如何。
在片段着色器中实现此功能的正确方法是什么才能避免此问题?
感谢您的帮助。
#version 120
uniform sampler3D colorMap;
uniform sampler1D zTexture;
uniform bool useZtexture;
void main(void)
{
float zTexCoord = 0.0f;
if(useZtexture == true)
{
// unitialized zTexture causes the fragment to be discarded
// even when useZtexture is false
zTexCoord = float(texture1D(zTexture, 0.0f));
}
gl_FragColor = texture3D( colorMap, vec3(gl_TexCoord[0].s, gl_TexCoord[0].t, zTexCoord));
}