opengl - 当有几何着色器时,是否需要在顶点着色器中写入 `gl_Position`

标签 opengl glsl

假设我有一个几何着色器计算其输出 gl_Position来自 gl_in[].gl_Position 以外的一些输入.如果之前的管道阶段(顶点和曲面分割)没有写入它们的 out gl_Position ,整个管道的 Action 是否仍然保持明确?

或者换一种说法,gl_Position 的值是在几何着色器完成之前对 GL 的功能有什么影响?如果没有,这意味着我可以简单地将它用作传递数据的额外插槽,而无需在阶段之间进行任何特殊的空间解释,对吗?

(问题假设 OpenGL 4.5 前向配置文件。)

最佳答案

gl_Position只需要最后写Vertex Processing渲染管道中的阶段(VS、曲面分割和 GS)。因此,如果您有一个事件的 GS,连接到它的 VS 不需要写入 gl_Position一点也不。或者它可以放任意的vec4里面的数据。

请注意 gl_Position无论最终的顶点处理阶段是什么,仍然需要编写。当然,假设您想要光栅化。不,这不是轻率;你可以做转换反馈。

If not, it would mean I can simply use it as an extra slot for passing data without any special spatial interpretation between stages, right?



如果有 GS,那么之前着色器阶段的任何输出都不会有“任何特殊的空间解释”。 gl_Position在这方面并不特别。

插值是光栅化器的一个功能,它发生在顶点处理之后。实际上,在 GLSL 4.30+ 中,片段着色器输入上的插值限定符是唯一重要的。它们甚至不再用于接口(interface)匹配。

关于opengl - 当有几何着色器时,是否需要在顶点着色器中写入 `gl_Position`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259639/

相关文章:

c++ - 即时重新着色 Sprite

c++ - 如何在 OpenGL 中正确旋转和缩放对象?

opengl - 两个进程可以渲染到一个 OpenGL Canvas 吗?

c++ - Bullet Physics - 从网格创建 ShapeHull

java - 使用 LWJGL 显示文本

c++ - 如何不在 OpenGL 中使用着色器覆盖顶点颜色?

c++ - GLSL - 两种纹理(未混合)

eclipse - 向 Eclipse 添加 GLSL 语法高亮显示

glsl - 在顶点着色器中应用 Y 旋转时纹理坐标发生偏移

c++ - 法线贴图 : TBN matrix different result in vertex shader compared to fragment shader