当有几何着色器时,是否需要在顶点着色器中写入 `gl_Position`
Is writing to `gl_Position` in Vertex Shader necessary when there is a Geometry Shader
假设我有一个几何着色器,它根据 gl_in[].gl_Position
以外的一些输入计算其输出 gl_Position
。如果之前的流水线阶段(顶点和曲面细分)没有写入它们 out gl_Position
,整个流水线的动作是否仍保持明确定义?
或者换句话说,gl_Position
的值在Geometry shader完成之前对GL的运行有什么影响吗?如果没有,那就意味着我可以简单地将它用作传递数据的额外插槽,而无需在阶段之间进行任何特殊的空间解释,对吗?
(该问题假定 OpenGL 4.5 正向配置文件。)
gl_Position
只需要在渲染管线的最后Vertex Processing阶段(VS、tessellation、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,则先前着色器阶段的 none 输出将具有 "any special spatial interpretation"。 gl_Position
在这方面并不特别。
插值是光栅化器的一个功能,发生在顶点处理之后。事实上,在 GLSL 4.30+ 中,片段着色器输入的插值限定符是 only 重要的。它们甚至不再用于接口匹配。
假设我有一个几何着色器,它根据 gl_in[].gl_Position
以外的一些输入计算其输出 gl_Position
。如果之前的流水线阶段(顶点和曲面细分)没有写入它们 out gl_Position
,整个流水线的动作是否仍保持明确定义?
或者换句话说,gl_Position
的值在Geometry shader完成之前对GL的运行有什么影响吗?如果没有,那就意味着我可以简单地将它用作传递数据的额外插槽,而无需在阶段之间进行任何特殊的空间解释,对吗?
(该问题假定 OpenGL 4.5 正向配置文件。)
gl_Position
只需要在渲染管线的最后Vertex Processing阶段(VS、tessellation、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,则先前着色器阶段的 none 输出将具有 "any special spatial interpretation"。 gl_Position
在这方面并不特别。
插值是光栅化器的一个功能,发生在顶点处理之后。事实上,在 GLSL 4.30+ 中,片段着色器输入的插值限定符是 only 重要的。它们甚至不再用于接口匹配。