除片段着色器外,它在所有着色器中都可用作输出变量。那么,哪个着色器阶段必须编写它呢?它的值是否取自编写它的上一个着色器阶段?
此外,请说明在片段着色器中设置gl_ClipDistance值的目的是什么?
只要只使用顶点着色器和片段着色器,就可以将其写入顶点着色器。根据GLSL规范,几何体和镶嵌着色器也可以编写它。
片段着色器可以读取该值。根据我阅读文档的方式,它将为您提供片段的片段距离的插值。
考虑到它实际上只对剪裁有用。。。您需要在GLSL程序中顶点处理的最后阶段编写它。目前,只有一个阶段不属于顶点处理的类别,因此片段着色器之前的任何阶段都需要输出该阶段。
如果你使用的是几何着色器,那就是你写它的地方。现在,通常在这种情况下,你也可以把它写在几何着色器之前运行的顶点着色器中,让它通过。你不必做那样的事,但这是典型的。由于它是gl_PerVertex
的一部分,因此它被设计为以这种方式通过多个顶点处理阶段。
名称
gl_ClipDistance
——为顶点裁剪提供了一种前向兼容机制说明
[…]
如果相应的着色器可执行文件未写入
gl_ClipDistance
,则在顶点、镶嵌控制和镶嵌评估着色阶段之后,gl_ClipDistance
(或gl_out[]
阵列的gl_ClipDistance
成员,在镶嵌控制着色器的情况下)的值未定义。
如果在最后的顶点处理阶段没有写入,则在剪切发生之前,它将立即变为未定义。