OpenGL着色语言不同类型的变量(限定符)

Ein*_*rus 13 opengl shader glsl vertex fragment-shader

我一直在用OpenGL编写程序.最近,我开始学习OpenGL着色语言.我是新手; 所以请详细说明你的答案.

我的问题是:

  1. GLSL中有哪些不同类型的变量(限定符)?
  2. 它们用于什么?
  3. 他们彼此如何不同?

我只熟悉从"顶点着色器"传递到"片段着色器"以在顶点之间进行插值的"变化"变量.除此之外,我什么都不知道.

Nic*_*vre 21

在OpenGL 3+中:

  • varying 已弃用
  • const 是为了......好吧,常数!
  • uniform 用于每次调用(最多)值
  • in 用于来自前一个流水线阶段的输入,即每个原语的每个顶点(或每个片段)值,如果使用glAttribDivisor和硬件实例
  • out 用于输出到下一阶段

关于片段着色器的输出:在OpenGL3及更高版本中,片段着色器输出的大多数内置变量(例如gl_FragColor,有明显的例外gl_FragDepth)都已弃用,应该用用户定义的out变量替换.

如果输出到默认帧缓冲区,则无论您声明为片段着色器的输出,都会在颜色缓冲区中结束.如果您使用多个颜色缓冲区(即多个渲染目标)绑定了一个FBO,则需要手动将每个out变量绑定到正确的颜色缓冲区索引glBindFragDataLocationIndexed.

您可以找到有关GLSL("服务器")方和OpenGL("客户端")方面的所有详细信息: