当有几何着色器时,是否需要在顶点着色器中写入 `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 重要的。它们甚至不再用于接口匹配。