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

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

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

或者换句话说,在完成几何着色器之前,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中,片段着色器输入上的插值限定符是唯一重要的.它们甚至不再用于接口匹配.

点赞