GLSL:考虑未使用的变量

时间:2015-02-02 06:30:16

标签: opengl glsl

我想知道我是否应该考虑在glsl中不使用变量。

在下一种情况下(这只是描述的示例代码)。 如果"触发"是的,"位置" "正常"不在片段着色器中使用。 那么,"位置" "正常"弃?或由rasterizer计算?

顶点着色器:

layout(location = 0) in vec3 vertice;
layout(location = 1) in vec2 uv;
layout(location = 2) in vec3 normal;

out VertexData{
    out vec3 position;
    out vec2 uv;
    out vec3 normal;
    flat out bool trigger;
} VertexOut;

void main(){
    gl_Position = vertice;
    VertexOut.uv = uv;
    if(uv.x > 0){
        VertexOut.trigger = true;
    else{
        VertexOut.trigger = false;
        VertexOut.position = vertice;
        VertexOut.normal = normal;
    }
}

Fragment shdaer:

in VertexData{
    in vec3 position;
    in vec2 uv;
    in vec3 normal;
    flat in bool trigger;   
}VertexIn;

out vec4 color;

uniform sampler2D tex;

void main(){
    if(VertexIn.trigger){
        color = texture2D(tex, VertexIn.uv);
    }
    else{
        vec4 result = texture2D(tex, VertexIn.uv);
        /*
            Lighting with position and normal...
        */

        color = result;
    }
}

1 个答案:

答案 0 :(得分:1)

取决于硬件。在较新的硬件上,智能编译器可以避免内插/获取此值。较旧的硬件不能通过片段着色器控制此操作,因此无论如何都会完成(从未定义的值插入 - 仍未定义)。

条件操作不是免费的,特别是如果您的片段分支高度分歧。