假设我有一个几何着色器计算其输出 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/