Opengl 跳过阶段传递变量

Opengl 跳过阶段传递变量,opengl,glsl,shader,Opengl,Glsl,Shader,我很抱歉发布一个很容易测试的问题,但我目前没有OGL4+硬件,我必须事先做出一些设计决定,所以我想要一个清晰的场景 假设在顶点着色器中生成了一个变量,在片段着色器出现之前不需要该变量。如果还包括细分着色器,可以执行以下操作: //// Vertex shader out vec3 foo; // Ignore foo in tessellation control and eval shader //// Fragment shader in vec3 foo; 或者我必须做一些事情,

我很抱歉发布一个很容易测试的问题,但我目前没有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也是这样。它可以生成新的基本体和顶点


至于使用
[]
,您必须根据该特定阶段的输入和输出使用它。

每个着色器阶段只能输入到下一个阶段,因此您确实需要一直传递这些变量。不过,我不确定
[]
限定符是什么。(这就是为什么我一直推迟将此作为答案发布的原因)