我有一些使用顶点和片段着色器的应用程序。
某些条件逻辑在片段着色器中实现。它作为传递着色器稍微复杂一点。
#version 150 core
in vec3 pass_Top_Color;
in vec3 pass_Bottom_Color;
in vec3 pass_Single_Color;
uniform float singleColor;
uniform float topOnly;
uniform float bottomOnly;
out vec4 out_Color;
void main(void)
{
if (singleColor > 0.5)
{
if (topOnly > 0.5)
{
out_Color = vec4(pass_Top_Color, 1.0);
}
else if (bottomOnly > 0.5)
{
out_Color = vec4(pass_Bottom_Color, 1.0);
}
else
{
out_Color = vec4(pass_Single_Color, 1.0);
}
}
}
我的视频卡(AMD Radeon HD 6450)正常工作,支持OpenGL 4.4。
但是当我尝试使用此着色器作为输出绘制时,我只得到空屏幕。发生任何错误。
对于测试,我使用VAO
,其中仅使用in_Single_Color
属性。在绘制之前,我将singleColor
制服设置为1.0f
,因此if (singleColor > 0.5)
条件为真。对应于普通逻辑,一切都必须正常(但它不会 - 结果只有清晰的屏幕)。
但是当我评论着色器的一部分时(如下所示)。一切都很好。非常奇怪的是,当我将这个应用程序(在着色器中没有注释的代码)移动到另一台PC时,效果很好。
#version 150 core
in vec3 pass_Top_Color;
in vec3 pass_Bottom_Color;
in vec3 pass_Single_Color;
uniform float singleColor;
uniform float topOnly;
uniform float bottomOnly;
out vec4 out_Color;
void main(void)
{
if (singleColor > 0.5)
{
//if (topOnly > 0.5)
//{
// out_Color = vec4(pass_Top_Color, 1.0);
//}
//else if (bottomOnly > 0.5)
//{
// out_Color = vec4(pass_Bottom_Color, 1.0);
//}
//else
//{
out_Color = vec4(pass_Single_Color, 1.0);
//}
}
}
希望能帮助解决这些奇怪的效果。