除了片段着色器,它在所有着色器中都可用作输出变量。那么哪个shader stage必须写呢?它的值是否取自编写它的最后一个着色器阶段?
还请解释在片段着色器中具有值 gl_ClipDistance 的目的是什么?
除了片段着色器,它在所有着色器中都可用作输出变量。那么哪个shader stage必须写呢?它的值是否取自编写它的最后一个着色器阶段?
还请解释在片段着色器中具有值 gl_ClipDistance 的目的是什么?
只要您只使用顶点和片段着色器,您就可以在顶点着色器中编写它。根据 GLSL 规范,几何和曲面细分着色器也可以编写它。
片段着色器可以读取该值。根据我阅读文档的方式,它将为您提供片段的剪辑距离的插值。
考虑到它实际上只对裁剪有用......您需要在 GLSL 程序中顶点处理的最后阶段编写它。目前只有一个阶段不属于顶点处理的范畴,所以片段着色器之前的任何事情都需要输出。
如果您使用几何着色器,那将是您编写它的地方。现在,通常在这种情况下,您也可以将其写入在几何着色器之前运行的顶点着色器中,并通过它。你不必这样做,但这是典型的。由于它是 的一部分gl_PerVertex
,因此它被设计为以这种方式通过多个顶点处理阶段。
姓名
gl_ClipDistance
— 为顶点剪裁提供前向兼容机制描述
[...]
gl_ClipDistance
如果gl_ClipDistance
相应的gl_out[]
着色器可执行文件不写入gl_ClipDistance
.
如果您没有在最后的顶点处理阶段写入它,那么它会在剪裁发生之前立即变为未定义。