2014-02-13 75 views
2

“全局变量和接口块可以用统一修饰符来声明,这意味着在渲染基元时多次执行着色器之间的值不会发生变化(即:在glDraw *调用期间),这些值由用户从OpenGL API设置 它们是常量,但不是编译时常量(因此不是const)。OpenGL为什么需要统一变量(而不是常量)

http://www.opengl.org/wiki/Type_Qualifier_(GLSL)#Storage_qualifier

我想我问为什么统一的变量不能仅仅是在编译时恒定。

+0

幽默,即使它们是恒定的,也不会改变任何东西。常量变量可能会使用与统一变量相同的存储池。事实上,如果您曾经在NV驱动程序中链接过GLSL程序中列举了制服列表,您会注意到它会重新命名常量,这些常量沿'_ _0''的行改变,并将它们分配到统一的位置。 –

回答

2

因为它们不是恒定的!

它们对于每个渲染调用都是不变的,但您可以为每个渲染调用一个新值。

例如,您可以设置一个统一以包含颜色值,将其设置为粉红色并绘制您的3d模型,并且每次调用该绘制操作的片段着色器时都会包含一个常量值。但是你可以使用相同的着色器绘制其他颜色,并将其设置为“绿色”

相关问题