当存在未使用的纹理查找时,在AMD上丢弃GLSL片段

时间:2015-11-03 16:37:24

标签: opengl glsl textures amd

我正在进行纹理查找以在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));
}

0 个答案:

没有答案