而不是在我的OpenGL代码中有两个单独的着色器(一个用于绑定纹理时,一个用于没有绑定时)我通常会选择一个处理两者的着色器程序。这是我通常的片段着色器:
#version 330
uniform bool textured;
uniform sampler2D sampler;
in vec4 fColor;
in vec2 tCoord;
out vec4 final_color;
void main()
{
vec4 texel = vec4(1.0, 1.0, 1.0, 1.0);
if (textured)
texel = texture(sampler, tCoord);
final_color = fColor * texel;
}
在一个现代的OpenGL配置文件中,这个编译但没有输出除黑色像素之外的任何东西(或者在LWJGL遗留配置文件中,如果纹理==假则输出常规颜色,如果纹理==真,则输出纹理)。我不明白这个不会工作的原因,但是什么方法可以用于纹理和无纹理的片段?