參考OpenGL編程指南 第8版
VAO
void glGenVertexArrays(GLsizei n, GLuint *arrays); 返回n個未使用的對象名到數組arrays中,用做頂點數組對象。編程
void glBindVertexArray(GLuint array); array 非 0,而且是glGenVertexArrays() 所返回的,那麼它將建立一個新的頂點數組對象而且與其名稱關聯起來。若是綁定到一個已經建立的頂點數組對象中,那麼會激活這個頂點數組對象。數組
void glDeleteVertexArrays(GLsizei n, GLuint *arrays); 刪除 n 個在 arrays 中定義的頂點數組對象。緩存
GLboolean glIsVertexArray(GLuint array); 若是 array 是一個已經用 glGenVertexArrays() 建立且沒有被刪除的頂點數組對象的名稱,那麼返回 GL_TRUE。ide
void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); pointer 表示緩存對象中,從起始位置開始計算的數組數據的偏移值(假設起始地址爲 0) ,使用基本的系統單位(byte) 。size 表示每一個頂點須要更新的份量數目,能夠是 一、二、三、4 或者 GL_BGRA。type 指定了數組中每一個元素的數據類型(GL_BYTE、GL_UNSIGNED_BYTE、GL_SHORT、GL_UNSIGNED_SHORT、GL_INT、GL_UNSIGNED_INT、GL_FIXED、GL_HALF_FLOAT、GL_FLOAT 或 GL_DOUBLE) 。normalized 設置頂點數據在存儲前是否須要進行歸一化(或者使用 glVertexAttribFourN*() 函數) 。stride 是數組中每兩個元素之間的大小偏移值(byte) 。若是 stride 爲 0,那麼數據應該緊密地封裝在一塊兒。函數
void glEnableVertexAttribArray(GLuint index);
void glDisableVertexAttribArray(GLuint index);
設置是否啓用與 index 索引相關聯的頂點數組。index 必須是一個介於 0 到 GL_MAX_VERTEX_ATTRIBS-1 之間的值。ui
Buffer
void glGenBuffers(GLsizei n, GLuint *buffers); 返回 n 個當前未使用的緩存對象名稱,並保存到 buffers 數組中。spa
void glBindBuffer(GLenum target, GLuint buffer); 指定當前激活的緩存對象。target :GL_ARRAY_BUFFER、GL_ELEMENT_ARRAY_BUFFER、GL_PIXEL_PACK_BUFFER、GL_PIXEL_UNPACK_BUFFER、GL_COPY_READ_BUFFER、GL_COPY_WRITE_BUFFER、GL_TRANSFORM_FEEDBACK_BUFFER 和 GL_UNIFORM_BUFFER。buffer 設置的是要綁定的緩存對象名稱。日誌
void glDeleteBuffers(GLsizei n, const GLuint *buffers); 刪除 n 個保存在 buffers 數組中的緩存對象。orm
GLboolean glIsBuffer(GLuint buffer);對象
void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); target 設置爲 GL_ARRAY_BUFFER;索引數據爲 GL_ELEMENT_ARRAY_BUFFER ;紋理數據爲 GL_TEXTURE_BUFFER ;對於經過 transform feedback 着色器得到的結果設置爲GL_TRANSFORM_FEEDBACK_BUFFER;一致變量設置爲 GL_UNIFORM_BUFFER。size 表示存儲數據的總數量。這個數值等於 data 中存儲的元素的總數乘以單位元素存儲空間的結果。若是傳入 NULL,那麼將保留 size 大小的未初始化的數據,以備後用。usage 可用的方式包括 GL_STATIC_DRAW、GL_STATIC_READ、GL_DYNAMIC_DRAW、GL_DYNAMIC_READ 等。
void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
使用新的數據替換緩存對象中的部分數據。綁定到 target 的緩存對象要從 offset 字節處開始須要使用地址爲 data、大小爲 size 的數據塊來進行更新。
void glClearBufferData(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void* data);
void glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLintptr size, GLenum format, GLenum type, const void* data);
void glCopyBufferSubData(GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintprr writeoffset, GLsizeiptr size);
將綁定到 readtarget 的緩存對象的一部分存儲數據拷貝到與 writetarget 相綁定的緩存對象的數據區域上。
void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data);
返回當前綁定到 target 的緩存對象中的部分或者所有數據。起始數據的偏移字節位置爲 offset,回讀的數據大小爲 size 個字節,它們將從緩存的數據區域拷貝到 data 所指向的內存區域中。
其餘
void glClear(GLbitfield mask);
清除指定的緩存數據並重設爲當前的清除值。
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
設置當前使用的清除顏色值,用於 RGBA 模式下對顏色緩存的清除工做。
void glFlush(void);
強制以前的 OpenGL 命令當即執行。
void glFinish(void);
強制全部當前的 OpenGL 命令當即執行,而且等待它們所有完成。
void glEnable(GLenum capability);
void glDisable(GLenum capability);
glEnable() 開啓一個模式,glDisable() 關閉它。
GLboolean glIsEnabled(GLenum capability);
根據是否啓用當前指定的模式,返回 GL_TRUE 或者 GL_FALSE。
Shader
GLint glGetUniformLocation(GLuint program, const char* name);
返回着色器程序中 uniform 變量 name 對應的索引值。name 是一個以 NULL 結尾的字符串,不存在空格。
void glUniform{1234}{fdi ui}(GLint location, TYPE value);
void glUniform{1234}{fdi ui}v(GLint location, GLsizei count, const TYPE* values);
void glUniformMatrix{234}{fd}v(GLint location, GLsizei count, GLboolean transpose, const GLfloat* values);
void glUniformMatrix{2x3,2x4,3x2,3x4,4x2,4x3}{fd}v(GLint location, GLsizei count, GLboolean transpose, const GLfloat* values);
設置與 location 索引位置對應的 uniform 變量的值。其中向量形式的函數會載入count 個數據的集合(根據 glUniform*() 的調用方式,讀入 1 ~ 4 個值) ,並寫入 location位置的 uniform 變量。若是 location 是數組的起始索引值,那麼數組以後的連續 count 個元素都會被載入。GLfloat 形式的函數(後綴中有 f)能夠用來載入單精度類型的浮點數、float 類型的向量、float 類型的數組、或者 float 類型的向量數組。與之相似,GLdouble 形式的函數(後綴中有 d)能夠用來載入雙精度類型的標量、向量和數組。GLfloat 形式的函數也能夠載入布爾數據。
GLuint glCreateShader(GLenum type);
分配一個着色器對象。type 必須是 GL_VERTEX_SHADER、GL_FRAGMENT_SHADER、GL_TESS_CONTROL_SHADER、GL_TESS_EVALUATION_SHADER 或 者GL_GEOMETRY_SHADER 中的一個。返回值多是一個非零的整數值,若是爲 0 則說明發生了錯誤。
void glShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
將着色器源代碼關聯到一個着色器對象 shader 上。
void glCompileShader(GLuint shader);
編譯着色器的源代碼。
void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei* length, char* infoLog);
返回 shader 的最後編譯結果。返回的日誌信息是一個以 NULL 結尾的字符串,它保存在 infoLog 緩存中,長度爲 length 個字符串。日誌能夠返回的最大值是經過 bufSize 來定義的。若是 length 設置爲 NULL,那麼將不會返回 infoLog 的大小。
GLuint glCreateProgram(void);
建立一個空的着色器程序。
void glAttachShader(GLuint program, GLuint shader);
將着色器對象 shader 關聯到着色器程序 program 上。
void glDetachShader(GLuint program, GLuint shader);
移除着色器對象 shader 與着色器程序 program 的關聯。
void glLinkProgram(GLuint program);
處理全部與 program 關聯的着色器對象來生成一個完整的着色器程序。
void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei* length, char* infoLog);
返回最後一次 program 連接的日誌信息。日誌返回的字符串以 NULL 結尾,長度爲 length 個字符,保存在 infoLog 緩存中。log 可返回的最大值經過 bufSize 指定。若是length 爲 NULL,那麼不會再返回 infoLog 的長度。
void glUseProgram(GLuint program);
使用連接過的着色器程序 program。
void glDeleteShader(GLuint shader);
刪除着色器對象 shader。
void glDeleteProgram(GLuint program);
當即刪除一個當前沒有在任何環境中使用的着色器程序 program,若是程序正在被某個環境使用,那麼等到它空閒時再刪除。
GLboolean glIsShader(GLuint shader);
若是 shader 是一個經過 glCreateShader() 生成的着色器對象的名稱,而且沒有被刪除,那麼返回 GL_TRUE。
GLboolean glIsProgram(GLuint program);
若是 program 是一個經過 glCreateProgram() 生成的程序對象的名稱,而且沒有被刪除,那麼返回 GL_TRUE。
繪製
void glDrawArrays(GLenum mode, GLint first, GLsizei count);
使用當前綁定的頂點數組元素來創建一系列的幾何圖元,起始位置爲 first,而結束位置爲 first + count-1。mode 設置了構建圖元的類型,它能夠是 GL_POINTS、GL_LINES、GL_LINE_STRIP、GL_LINE_LOOP、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN 和 GL_PATCHES 中的任意一種。
void glDrawArrays(GLenum mode, GLint first, GLsizei count);
使用數組元素創建連續的幾何圖元序列,每一個啓用的數組中起始位置爲 first,結束位置爲 first + count–1。mode 表示構建圖元的類型,它必須是 GL_TRIANGLES、GL_LINE_LOOP、GL_LINES、GL_POINTS 等類型標識符之一。
void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
使用 count 個元素來定義一系列幾何圖元,而元素的索引值保存在一個綁定到 GL_ELEMENT_ARRAY_BUFFER 的緩存中(元素數組緩存,element array buffer) 。indices 定義了元素數組緩存中的偏移地址,也就是索引數據開始的位置,單位爲字節。type 必須是 GL_UNSIGNED_BYTE、GL_UNSIGNED_SHORT 或者 GL_UNSIGNED_INT 中的一個,它給出了元素數組緩存中索引數據的類型。mode 定義了圖元構建的方式,它必須是圖元類型標識符中的一個,例如 GL_TRIANGLES、GL_LINE_LOOP、GL_LINES 或者 GL_POINTS。
void glMultiDrawArrays(GLenum mode, const GLint* first, const GLint* count, GLsizei primcount);
在一個 OpenGL 函數調用過程當中繪製多組幾何圖元集。 first 和 count 都是數組的形式,數組的每一個元素都至關於一次 glDrawArrays() 調用,元素的總數由 primcount 決定。
void glMultiDrawElements(GLenum mode, const GLint* count, GLenum type, const GLvoid* const* indices, GLsizei primcount);
在一個 OpenGL 函數調用過程當中繪製多組幾何圖元集。fi rst 和 indices 都是數組的形式,數組的每一個元素都至關於一次 glDrawElements() 調用,元素的總數由 primcount 決定。