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);