很抱歉发布一个可能很容易测试的问题,但我目前没有 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;
在后一种情况下,我应该使用 []
限定符来传递变量吗?
最佳答案
管道中实际存在的每个着色器阶段负责将所有 值提供给下一个阶段。因此,如果您想将一个变量从顶点着色器传递到片段着色器,每个中间阶段必须提供该变量。
这是有道理的。采取镶嵌。曲面分割的全部意义在于创建新的顶点。 OpenGL 如何自动将顶点着色器输出映射到任意曲面分割函数?事实上,进行映射是 TES 存在的原因;这就是它的用途。
GS 也一样。它可以生成新的图元和顶点。
至于使用 []
,您必须根据该特定阶段的输入和输出使用它。
关于opengl - 跳过阶段传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832551/