在使用变量之前,应该将其声明为uniform。uniform变量是只读的,因此它们不能在着色器程序中进行写操作。以下是一个示例:
在顶点着色器中声明一个uniform变量:
uniform vec3 lightPosition;
然后在着色器程序中使用它:
void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); vec3 lightDirection = normalize(lightPosition - position); // do something with the light direction }
注意:如果你尝试在着色器程序中对uniform变量进行赋值,编译器会给出“assignment to read-only variable”的错误提示。