跳转到内容

OpenGL 编程/高级/GLSL

来自维基教科书,开放的世界,开放的书籍

变量可以像位置和颜色一样传递到GLSL,但还有其他自定义变量可用。在 glBegin/glEnd 对中改变的变量被称为“属性”;那些不改变的变量被称为“统一”[1]。在创建 GLSL 程序后,可以使用以下方法获取变量的句柄

GLint glGetAttribLocation(GLuint program, char *name)

GLint glGetUniformLocation(GLuint program, char *name)

此调用的结果随后用于设置相应变量的值。根据自由度的数量,可以使用

void glUniform1f(GLint location, GLfloat value)
void glUniform2f(GLint location, GLfloat value1, GLfloat value2)
void glUniform3f(GLint location, GLfloat value1, GLfloat value2, GLfloat value3)
void glUniform4f(GLint location, GLfloat value1, GLfloat value2, GLfloat value3, GLfloat value4)

或作为替代,

GLint glUniform{1,2,3,4}fv(GLint location, GLsizei count, GLfloat *v)

例如,在 GLSL 中,您可能拥有

uniform float time;
void main(void) {
  ...

然后在 C/C++ 中,您可以说

GLint time = glGetUniformLocation(myProgram, "time"
...
glUniform1f(time, 10.3);
[编辑 | 编辑源代码]
华夏公益教科书