【问题标题】:Is writing to `gl_Position` in Vertex Shader necessary when there is a Geometry Shader当有几何着色器时,是否需要在顶点着色器中写入“gl_Position”
【发布时间】:2019-09-19 22:55:01
【问题描述】:

假设我有一个几何着色器,它根据gl_in[].gl_Position 以外的一些输入计算其输出gl_Position。如果之前的流水线阶段(顶点和曲面细分)没有写入它们的out gl_Position,整个流水线的动作是否仍然保持良好定义?

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

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

【问题讨论】:

    标签: opengl glsl


    【解决方案1】:

    gl_Position 只需要由渲染管道中的最终Vertex Processing 阶段(VS、tessellation 和 GS)编写。因此,如果您有一个活动的 GS,则连接到它的 VS 根本不需要写入gl_Position。或者它可以将任意vec4 数据放入其中。

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

    如果不是,那意味着我可以简单地将其用作传递数据的额外插槽,而无需在阶段之间进行任何特殊的空间解释,对吧?

    如果有 GS,则之前着色器阶段的没有输出将具有“任何特殊的空间解释”。 gl_Position 在这方面并不特殊。

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

    【讨论】:

    • 很好的答案。我只是想在规范中找到证实这一点的地方。到目前为止,我最好的候选人是:“着色器执行结果的剪辑坐标,它产生一个顶点坐标 gl_Position。”来自'gl4.4core section 13.6'和等效的“顶点的剪辑坐标来自顶点,或者,如果活动,几何着色器执行,产生顶点坐标gl_Position。”来自'gl3.3core 第 2.13 节'。我来对地方了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多