着色器統一值
屬性是每個頂點位置,表面法線和紋理坐標等都需要的,而統一值則用於為整個圖元批次向保持不變的着色器傳遞數據。對於頂點着色器來說,可能最普遍的統一值就是變換矩陣。
一個統一值在一個圖元的繪制過程中是不變的,所以其值不能在glBegin和glEnd之間設置的
uniform限定了表示一個變量的值將由應用程序在着色器執行之前指定,並且在圖元的處理過程中不會發生變化。
uniform變量是由頂點着色器和片段着色器共享的,他們必須聲明為全局變量。
1.尋找統一值
當GLSL編譯器鏈接到着色器程序后,它會創建一個表格,其中包含了所有的uniform變量,通過此函數能獲取到該變量在表中的索引值
GLint glGetUniformLocation (GLuint program, const GLchar* name)
2.設置標量和向量統一值
void glUniform{1234}f (GLint location, TYPE value)
void glUniform{1234}i (GLint location, TYPE value)
3.設置統一數組
void glUniform{1234}fv (GLint location, GLsizei count, const GLfloat* v)
void glUniform{1234}iv (GLint location, GLsizei count, const GLfloat* v)
4.設置統一矩陣
void glUniformMatrix{234}fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
如果transpose是GL_TRUE,那么value是按行主序指定的(就像C語言的數組一樣)
如果是GL_FALSE,那么value是按列主序指定的(和glLoadMatrix()使用的順序相同)
參考
1.OpenGL超級寶典(第五版)
2.OpenGL編程指南(原書第七版)