opengl - 跳过阶段传递变量

标签 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;

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

最佳答案

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

这是有道理的。采取镶嵌。曲面分割的全部意义在于创建新的顶点。 OpenGL 如何自动将顶点着色器输出映射到任意曲面分割函数?事实上,进行映射是 TES 存在的原因;这就是它的用途。

GS 也一样。它可以生成新的图元和顶点。

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

关于opengl - 跳过阶段传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832551/

相关文章:

java - 尽管宽度和高度发生变化,Lwjgl/openGL 窗口大小始终保持不变

opengl - 宽屏显示器上的全屏渲染

c++ - 使用片段着色器计算纹素

three.js - 将粒子推离glsl和三个js中的mouseposition

opengl - GLSL - 奇怪的语法错误 "<"

c++ - imageAtomicExchange 无法编译

opengl - 使用统一的 sampler2d[] 时出现无法解释的行为

unity-game-engine - #pragma except_renderers 是否会提高性能?

opengl - 切线空间法线贴图-着色器完整性检查

performance - OpenGL - 快速纹理四边形?