1

除了片段着色器,它在所有着色器中都可用作输出变量。那么哪个shader stage必须写呢?它的值是否取自编写它的最后一个着色器阶段?

还请解释在片段着色器中具有值 gl_ClipDistance 的目的是什么?

4

2 回答 2

3

只要您只使用顶点和片段着色器,您就可以在顶点着色器中编写它。根据 GLSL 规范,几何和曲面细分着色器也可以编写它。

片段着色器可以读取该值。根据我阅读文档的方式,它将为您提供片段的剪辑距离的插值。

于 2014-04-18T07:16:14.893 回答
2

考虑到它实际上只对裁剪有用......您需要在 GLSL 程序中顶点处理的最后阶段编写它。目前只有一个阶段不属于顶点处理的范畴,所以片段着色器之前的任何事情都需要输出。

如果您使用几何着色器,那将是您编写它的地方。现在,通常在这种情况下,您也可以将其写入在几何着色器之前运行的顶点着色器中,并通过它。你不必这样做,但这是典型的。由于它是 的一部分gl_PerVertex,因此它被设计为以这种方式通过多个顶点处理阶段。

姓名

gl_ClipDistance— 为顶点剪裁提供前向兼容机制

描述

[...]

gl_ClipDistance如果gl_ClipDistance相应的gl_out[]着色器可执行文件不写入gl_ClipDistance.

如果您没有在最后的顶点处理阶段写入它,那么它会在剪裁发生之前立即变为未定义。

于 2014-04-18T10:05:10.073 回答