“全局变量和接口块可以使用统一限定符声明。这意味着在渲染基元期间(即:在glDraw *调用期间),在着色器的多次执行之间,值不会发生变化。由用户从OpenGL API设置。 它们是常量,但不是编译时常量(因此不是常量)。“
http://www.opengl.org/wiki/Type_Qualifier_(GLSL)#Storage_qualifier
我想我在问为什么统一变量在编译时也不能保持不变。
答案 0 :(得分:2)
因为它们不是一成不变的!
它们对于每个渲染调用都是常量,但您可以为每个渲染调用设置一个新值。
例如,您可以设置一个包含颜色值的制服,将其设置为粉红色并绘制您的3D模型,并且每次调用该绘图操作的片段着色器时它将包含一个常量值。但是,您可以使用相同的着色器绘制其他内容,并将该均匀设置为“绿色”