跳轉到內容

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);
[編輯 | 編輯原始碼]
華夏公益教科書