跳过阶段传递变量

时间:2014-07-18 19:37:51

标签: opengl glsl shader

很抱歉发布一个可以轻松测试的问题,但我目前还没有OGL4 +硬件,我必须事先做出一些设计决定,所以我想要一个清晰的场景。

假设我在顶点着色器中生成了一个变量,在片段着色器之前我不需要该变量。如果我还包括曲面细分着色器,我可以执行以下操作:

//// Vertex shader

out vec3 foo;

// Ignore foo in tessellation control and eval shader


//// Fragment shader
in vec3 foo;

或者必然必须执行以下操作:

//// Vertex shader

out vec3 fooCS;

// TCS
in vec3 fooCS;
out vec3 fooES;

//TES
in vec3 fooES;
out vec3 foo;


//// Fragment shader
in vec3 foo;

在后一种情况下,我应该使用[]限定符来传递变量吗?

1 个答案:

答案 0 :(得分:1)

管道中实际存在的每个着色器阶段都负责将所有值提供给下一个。因此,如果要将变量从顶点着色器传递到片段着色器,则每个中间阶段必须提供该变量。

这是有道理的。进行镶嵌。曲面细分的重点是创建新顶点。 OpenGL如何自动将顶点着色器输出映射到任意曲面细分函数?实际上,进行映射是TES 存在的原因; 是它的原因。

与GS相同。它可以生成新的基元和顶点。

至于使用[],你必须使用它来适合特定阶段的输入和输出。