与片段着色器的奇怪的错误

时间:2014-07-25 14:27:49

标签: opengl glsl

我有一些使用顶点和片段着色器的应用程序。

某些条件逻辑在片段着色器中实现。它作为传递着色器稍微复杂一点。

#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);
         //}
        }
    } 

希望能帮助解决这些奇怪的效果。

0 个答案:

没有答案