当存在几何着色器时,在Vertex Shader necessery中写入`gl_Position`

时间:2016-02-07 21:59:24

标签: opengl glsl

这可能是一个愚蠢的问题,但......:

假设我有一个几何着色器,可以从gl_Position以外的某些输入计算其输出gl_in[].gl_Position。如果之前的管道阶段(顶点和曲面细分)不写入out gl_Position,整个管道的操作是否仍然保持良好定义?

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

(该问题假设OpenGL 4.5转发配置文件。)

1 个答案:

答案 0 :(得分:2)

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

请注意,gl_Position仍需要通过最终顶点处理阶段进行编写。当然,假设你想要光栅化。不,那不是轻浮的;你可以做变换反馈。

  

如果没有,这意味着我可以简单地将它用作传递数据的额外插槽,而不需要在各阶段之间进行任何特殊的空间解释,对吗?

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

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