问题描述
||
我一直在使用OpenGL编写程序。最近,我开始学习OpenGL Shading Language。我是新手;因此,请在您的答案中详细说明。
我的问题是:
GLSL中有哪些不同类型的变量(限定符)?
它们是用来干什么的?
它们彼此之间有何不同?
我只熟悉从顶点着色器传递到片段着色器以在顶点之间进行插值的“ varying”变量。除此之外,我一无所知。
解决方法
在OpenGL 3+中:
varying
已弃用
const
代表...好吧,常数!
uniform
表示每次抽奖(最多)值
如果使用glAttribDivisor和硬件实例化,则in
用于来自上一个管道阶段的输入,即最多每个顶点(或每个片段)值,每个图元
out
输出到下一级
关于片段着色器的输出:在OpenGL3及更高版本中,不赞成使用片段着色器输出的大多数内置变量(例如gl_FragColor
,但值得注意的是gl_FragDepth
除外),应将其替换为用户定义的out
变量。
如果要输出到默认帧缓冲区,则您声明为片段着色器的输出的任何内容都将在颜色缓冲区中结束。如果您将FBO与多个颜色缓冲区(即多个渲染目标)绑定在一起,则需要通过glBindFragDataLocationIndexed
将每个out
变量手动绑定到正确的颜色缓冲区索引。
可以找到有关GLSL(\'server \')端和OpenGL(\'client \')端的所有详细信息:
在OpenGL规范中,特别是第248-250页用于片段着色器上的颜色缓冲区输出。
有关着色器输出的信息,请参见GLSL规范的第38页及以后。
,
统一:每个绘制调用的常数数据,通常用于参数化着色器。
变化:在VS和FS之间传输数据,并在过程中沿原语进行插值。
属性:这是顶点属性数据,是顶点着色器的输入。它是为图元中的每个顶点指定的。
, 检查教程:http://www.lighthouse3d.com/tutorials/glsl-tutorial/
有统一变量(所有线程均为静态)
属性变量(按顶点注入)
变化(如您所知)