我一直在使用 OpenGL 编写程序。最近,我开始学习 OpenGL 着色语言。我是新手;所以请在你的答案中详细说明。
我的问题是:
- GLSL 中有哪些不同类型的变量(限定符)?
- 它们是用来做什么的?
- 它们彼此有何不同?
我只熟悉从顶点着色器传递到片段着色器以在顶点之间插值的“变化”变量。除此之外,我什么都不知道。
我一直在使用 OpenGL 编写程序。最近,我开始学习 OpenGL 着色语言。我是新手;所以请在你的答案中详细说明。
我的问题是:
我只熟悉从顶点着色器传递到片段着色器以在顶点之间插值的“变化”变量。除此之外,我什么都不知道。
在 OpenGL 3+ 中:
varying
已弃用const
是为了......好吧,常量!uniform
用于每次绘制调用(最多)值in
用于来自前一个流水线阶段的输入,即,如果使用 glAttribDivisor 和硬件实例化,则最多每个基元的每个顶点(或每个片段)值out
用于输出到下一阶段关于片段着色器的输出:在 OpenGL3 及更高版本中,片段着色器输出的大多数内置变量(例如gl_FragColor
,除了 的显着例外gl_FragDepth
)已被弃用,应替换为用户定义的out
变量。
如果您要输出到默认帧缓冲区,那么您声明为片段着色器输出的任何内容都会在颜色缓冲区中结束。如果您已将 FBO 与多个颜色缓冲区(即多个渲染目标)绑定,则需要手动将每个out
变量绑定到正确的颜色缓冲区索引glBindFragDataLocationIndexed
。
您可以找到关于 GLSL(“服务器”)端和 OpenGL(“客户端”)端的所有详细信息: