我一直在使用OpenGL编写程序。最近,我开始学习OpenGL着色器语言。我是新手,请您详细回答以下问题:
- GLSL中有哪些不同类型的变量(修饰符)?
- 它们用于什么?
- 它们之间有何不同?
我只熟悉“varying”变量,该变量从顶点着色器传递到片段着色器,以在顶点之间进行插值。除此之外,我什么都不知道。
我一直在使用OpenGL编写程序。最近,我开始学习OpenGL着色器语言。我是新手,请您详细回答以下问题:
我只熟悉“varying”变量,该变量从顶点着色器传递到片段着色器,以在顶点之间进行插值。除此之外,我什么都不知道。
varying
已过时const
用于常量!uniform
用于每个绘制调用(最多)的值in
用于从先前的管道阶段输入,即每个顶点(或片元)的值,如果使用glAttribDivisor和硬件实例化,则为每个原始体,out
用于输出到下一个阶段关于片元着色器的输出:在OpenGL3及以上版本中,大多数片元着色器输出的内置变量(例如gl_FragColor
,特别是gl_FragDepth
),都已经过时,应该替换为用户定义的out
变量。
如果您要输出到默认帧缓冲区,则片元着色器中声明的任何输出将出现在颜色缓冲区中。如果您绑定了具有多个颜色缓冲区(即多个渲染目标)的FBO,则需要通过glBindFragDataLocationIndexed
手动将每个out
变量绑定到正确的颜色缓冲区索引。
有关GLSL('服务器')端和OpenGL('客户端')端的所有详细信息都可以在以下位置找到:
请查看教程:http://www.lighthouse3d.com/tutorials/glsl-tutorial/
有统一变量(对于所有线程静态)
属性变量(每个顶点注入)
varying(如您所知)