前言
本文主要是對OpegGL ES的api做一些資料上的搜集,給大家推薦一個中文詳解網站:鏈接,雖然作者還沒有寫完,里頭許多api解釋還沒有,但不妨去看一看.英文原文鏈接.后面會根據使用再具體去完善它.
gl.h中的api
設置紋理
使用glActiveTexture()選擇可以由紋理函數進行修改的當前紋理單位。后續的操作都是對選擇的紋理進行的。
glActiveTexture (GLenum texture);
綁定shader到program。
使用glAttachShader()將shader容器添加到程序中。這時的shader容器不一定需要被編譯,他們甚至不需要包含任何的代碼。
glAttachShader (GLuint program, GLuint shader)
把“頂點屬性索引”綁定到“頂點屬性名”
program:著色器程序容器的id。index:頂點屬性索引。name:頂點屬性名。
glBindAttribLocation (GLuint program, GLuint index, const GLchar* name)
激活緩沖區對象
為了激活緩沖區對象,首先需要將它綁定。綁定緩沖區對象表示選擇未來的操作(對數據進行初始化或者使用緩沖區對象進行渲染)將影響哪個緩沖區對象。也就是說,如果應用程序有多個緩沖區對象,就需要多次調用glBindBuffer()函數:一次用于初始化緩沖區對象以及它的數據,以后的調用要么選擇用于渲染的緩沖區對象,要么對緩沖區對象的數據進行更新。
glBindBuffer (GLenum target, GLuint buffer)
綁定FBO(frame buffer object)
FBO在創建后,使用前必須綁定它.
第一個參數target應該是GL_FRAMEBUFFER,第二個參數是FBO的ID號。一旦FBO被綁定,之后的所有的OpenGL操作都會對當前所綁定的FBO造成影響。ID號為0表示缺省幀緩存,即默認的window提供的幀緩存。因此,在glBindFramebuffer()中將ID號設置為0可以解綁定當前FBO。
glBindFramebuffer (GLenum target, GLuint framebuffer)
綁定當前渲染緩存對象
引用渲染緩存之前必須綁定當前渲染緩存對象.
glBindRenderbuffer (GLenum target, GLuint renderbuffer)
綁定紋理
產生紋理索引之后,需要使用glBindTexture()綁定紋理,才能對該紋理進行操作。glBindTexture()告訴OpenGL下面對紋理的任何操作都是針對它所綁定的紋理對象的,比如glBindTexture(GL_TEXTURE_2D,1)即告訴OpenGL下面代碼中對2D紋理的任何設置都是針對索引為1的紋理的。
target:紋理被綁定的目標,它只能取值GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D或者GL_TEXTURE_CUBE_MAP。texture:紋理的名稱,并且,該紋理的名稱在當前的應用中不能被再次使用。
glBindTexture (GLenum target, GLuint texture)
混合顏色和透明度
通常用在兩個圖形重疊的時候
glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
混合方程式組合像素
指定幀緩存區與源顏色混合的方式
glBlendEquation (GLenum mode)
允許RGB和Alpha使用不同的混合方式
glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha)
設置源因子和目標因子
glBlendFunc有兩個參數,前者表示源因子,后者表示目標因子。這兩個參數可以是多種值,詳細資料點擊鏈接.
glBlendFunc (GLenum sfactor, GLenum dfactor);
分別指定源和目標的顏色(RGB)分量和A(alpha)分量
參數srcRGB表示顏色值的源混合因子,參數destRGB表示顏色在的目標混合因子,參數srcAlpha表示Alpha值的源混合因子,參數destAlpha表示Alpha值的目標混合因子
glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
分配存儲緩沖區對象空間
size是存儲相關數據所需要的內存數量。這個值通常是數據元素的個數乘以它們各自的存儲長度。
data可以是一個指向客戶機內存的指針(用于初始化緩沖區對象),也可以是NULL。
usage提供了一個提示, 就是數據在分配之后將如何進行讀取和寫入。
target可以代表的東西很多,可以點擊原文鏈接查看.
glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
更新緩沖區中對象的數據
target: 可以參考glBufferData中的描述,用來指定需要更新的緩沖區對象的類型
offset: 指定了更新數據相對于緩沖區對象中原始數據開始位置的偏移量,也就是說要從什么地方開始更新原來的數據(以字節為單位)
size:需要更新的數據量的大小
data:一個指向新數據源的指針,將新的數據源拷貝到緩沖區對象中完成更新
glBufferSubData用來更新緩沖區對象中的數據,可以更新一部分或者整個緩沖區中的數據(取決于offset和size的取值),如果offset是0,而size正好是用來緩沖區存儲數據的大小,那么整個數據就會被新的數據所替換。需要注意的是offset和size必須保證在原來緩沖區對象可以表示的范圍之內。(加入原來緩沖區對象中存儲了1024個字節,那么offset就不能大于1024,因為這樣的話就沒法更新數據了)
glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
配置FBO后檢查是否準備完畢
glCheckFramebufferStatus()檢查當前幀緩存的關聯圖像和幀緩存參數。這個函數不能在glBegin()/glEnd()之間調用。Target參數必須為GL_FRAMEBUFFER。它返回一個非零值。如果所有要求和準則都滿足,它返回GL_FRAMEBUFFER_COMPLETE。否則,返回一個相關錯誤代碼告訴我們哪條準則沒有滿足。
FBO完整性準則有:
(1)幀緩存關聯圖像的寬度和高度必須非零。
(2)如果一幅圖像被關聯到一個顏色關聯點,那么這幅圖像必須有顏色可渲染的內部格式(GL_RGBA, GL_DEPTH_COMPONENT, GL_LUMINANCE, etc)。
(3)如果一幅被圖像關聯到GL_DEPTH_ATTACHMENT,那么這幅圖像必須有深度可渲染的內部格式(GL_DEPTH_COMPONENT,GL_DEPTH_COMPONENT24, etc)。
(4)如果一幅被圖像關聯到GL_STENCIL_ATTACHMENT,那么這幅圖像必須有模板可渲染的內部格式(GL_STENCIL_INDEX,GL_STENCIL_INDEX8, etc)。
(5)FBO至少有一幅圖像關聯。
(6)被關聯到FBO的縮影圖像必須有相同的寬度和高度。
(7)被關聯到顏色關聯點上的所有圖像必須有相同的內部格式。
注意:即使以上所有條件都滿足,你的OpenGL驅動也可能不支持某些格式和參數的組合。如果一種特別的實現不被OpenGL驅動支持,那么glCheckFramebufferStatus()返回GL_FRAMEBUFFER_UNSUPPORTED。
glCheckFramebufferStatus (GLenum target)
清除一個或多個buffer
glClear (GLbitfield mask)
清除當前所有顏色
紅,綠,藍和AFA值是在顏色緩沖區被清除之后使用的,并且缺省值全是0.即(0,0,0,0),其實就是設置顏色
glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
指定深度緩沖區的清除值
glClearDepthf (GLclampf depth);
清空畫面的緩沖模板
glClearStencil (GLint s)
控制顏色通道渲染
原文鏈接
它可以控制顏色值中的那個通道繪制那個不被繪制(1為繪制),這個可以讓你查看各種顏色的渲染
glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
對shader容器中的源代碼進行編譯
glCompileShader (GLuint shader)
指明一個二維壓縮紋理圖形
target 指定活動紋理單元的目標紋理,必須為GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z,或者GL_TEXTURE_CUBE_MAP_NEGATIVE_Z.
level 指定細節級別數,0級表示基本圖像級別,n級表示第n級mipmap縮小圖。
internalformat 指定data中壓縮圖像數據的存儲格式
width 指明紋理圖像的寬度,所有OpenGL實現支持的2D紋理圖像都至少為64紋素(texel)寬,立方體映射紋理圖像都至少為16紋素寬。
height 指明紋理圖像的高度,所有OpenGL實現支持的2D紋理圖像都至少為64紋素(texel)高,立方體映射紋理圖像都至少為16紋素高。
border 指定邊框寬度,必須為零(夢維:沒錯,你必須傳入0,因為這是OpenGL ES)。
imageSize 指定data中壓縮紋理圖像的大小,單位為byte
data 指定一個指向壓縮圖像數據內存的指針。
glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
指定一個二維壓縮紋理子圖
紋理映射一個指定的紋理圖像的一部分到每個開啟了紋理映射的圖元上。在當前段著色器或頂點著色器使用內建紋理搜索函數時,貼圖被啟用。
glCompressedTexSubImage2D在一個已存在的二維紋理圖像的連續子區域重定義紋理子圖。由*data
*指向的紋素將替換已存在紋理數組的子區域,范圍是x方向區間[xoffset,xoffset+ width – 1],y方向區間[yoffset,yoffset + height – 1]。該區域在原始紋理數組范圍之外的區域可能不會包含任何紋素。
寬度為0雖然不是錯誤,但這樣的定義沒有意義。
format 必須與之前由 glCompressedTexImage2D指定的紋理圖像格式相同。
target 指定活動紋理單元的目標紋理,必須為GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_POSITIVE_X,GL_TEXTURE_CUBE_MAP_NEGATIVE_X,GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 或者 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z.
level 指定細節級別數,0級表示基本圖像級別,n級表示第n級mipmap縮小圖。
xoffset 指定在紋理數組中x方向紋素偏移量
yoffset 指定在紋理數組中y方向紋素偏移量
width 指定紋理子圖寬度
height 指定紋理子圖高度
format 指定data中壓縮圖像數據的存儲格式
imageSize 指定data中壓縮紋理圖像的大小,單位為byte
data 指定一個指向壓縮圖像數據內存的指針
glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
將像素復制到2D紋理圖像中
原文鏈接
紋理映射一個指定的紋理圖像的一部分到每個開啟了紋理映射的圖元上。在當前段著色器或頂點著色器使用內建紋理搜索函數時,貼圖被啟用。
glCopyTexImage2D 定義一個2D紋理圖像或者立方體映射紋理圖像,其像素來自于當前幀緩沖區(而非glTexImage2D那樣來自于客戶端內存)。
左下角位于 (x, y)且寬為width高為height的以屏幕對齊的像素矩形定義了mipmap級別為level的紋理數組。internalformat指定了紋理數組的內部格式。
矩形中的像素像調用glReadPixels函數并將參數format設為GL_RGBA一樣被精確地處理,但是處理過程在轉換RGBA值后就停止。后續的操作與函數glTexImage2D的描述一致,先將RGBA值就近截至[0,1]區間,然后轉換為紋理的內部格式以便存儲在紋素數組中。
internalformat所要求的格式組件必須是幀緩沖區所呈現格式的子集。例如:一個GL_RGBA格式的幀緩沖區可以提供任意internalformat格式組件,而一個GL_RGB格式的幀緩沖區只能用來提供GL_RGB 或者 GL_LUMINANCE基礎內部格式紋理所要求的格式組件,GL_ALPHA, GL_LUMINANCE_ALPHA, 或 GL_RGBA都不行。
像素排列時,屏幕坐標系中低x、y坐標與紋理坐標系中的低s、t坐標相對應。
如果指定矩形區域的任何像素位于當前渲染上下文所關聯的幀緩沖區區域之外,那么所獲取的這些像素的值都是未定義的。
glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
拷貝幀緩存圖像至紋理
這個函數性能比較低下,還是推薦使用FBO
glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
創建program
Program有點類似于一個程序的鏈接器。program對象提供了把需要做的事連接在一起的機制。在一個program中,shader對象可以連接在一起。
glCreateProgram (void)
創建shader 實例
Shader有點類似于一個程序的編譯器。
glCreateShader (GLenum type)
消除不必要的渲染操作
兩個參數分別表示禁用多邊形正面或者背面上的光照、陰影和顏色計算及操作,消除不必要的渲染計算。例如某對象無論如何位置變化,我們都只能看到構成其組成的多邊形的某一面時,可使用該函數。
glCullFace (GLenum mode)
清除緩沖區對象
刪除n個緩沖區對象,它們的名稱就是buffers數組的元素。釋放的緩沖區對象可以被復用(例如,通過調用glGenBuffers())。
如果一個緩沖區對象是在綁定時刪除的,這個對象的所有綁定都重置為默認的緩沖區對象,就像以0作為指定的緩沖區對象參數調用了glBindBuffer()一樣。如果試圖刪除不存在的緩沖區對象或名稱為0的緩沖區對象,這個操作將被忽略,并不會產生錯誤。
glDeleteBuffers (GLsizei n, const GLuint* buffers)
刪除FBO
glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers)
刪除Program
glDeleteProgram (GLuint program)
刪除render buffer
glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers)
刪除著色器
glDeleteShader (GLuint shader)
清除紋理對象
glDeleteTextures (GLsizei n, const GLuint* textures)
指定深度緩沖比較值
通常用作比較函數
glDepthFunc (GLenum func)
控制對深入緩沖區的讀寫
glDepthMask (GLboolean flag)
指定在-1到1內的標準化的深度坐標的線性映射到窗口的深度坐標
glDepthRangef (GLclampf zNear, GLclampf zFar)
將著色器從程序中分離
glDetachShader (GLuint program, GLuint shader)
關閉功能,由參數決定是什么功能
glDisable (GLenum cap)
禁用頂點數組
glDisableVertexAttribArray (GLuint index)
繪制頂點
當采用頂點數組方式繪制圖形時,使用該函數。該函數根據頂點數組中的坐標數據和指定的模式,進行繪制。
調用該函數之前需要,調用glEnableVertexAttribArray、glVertexAttribPointer等設置頂點屬性和數據。
glDrawArrays (GLenum mode, GLint first, GLsizei count)
glDrawArrays主要講數據空間損耗在頂點的定義處;glDrawElements主要講數據空間損耗在頂點索引的定義處;如果在你的工程中,畫的圖形較少或者,圖形雖多但很多相同的,則可采用glDrawArrays更節省數據占用的空間;相反,如果圖形多,而且形狀大不相同的時候,可以優先考慮采用glDrawElements函數。
glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
開啟某項功能
glEnable (GLenum cap)
啟用頂點數組
glEnableVertexAttribArray (GLuint index)
向圖形硬件提交緩沖區里的指令
將緩沖區中的指令(無論是否為滿)立刻送給圖形硬件執行,但是要等待圖形硬件執行完這些指令才返回
glFinish (void)
將緩沖區中的指令(無論是否為滿)立刻送給圖形硬件執行,發送完立即返回
glFlush (void)
切換渲染緩沖區對象
glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
切換2D紋理圖像
glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
控制多邊形的正面是如何決定的
mode的值為:
GL_CCW 表示窗口坐標上投影多邊形的頂點順序為逆時針方向的表面為正面。
GL_CW 表示頂點順序為順時針方向的表面為正面。
glFrontFace (GLenum mode)
分配緩沖區對象表示符
glGenBuffers (GLsizei n, GLuint* buffers)
為相關聯的紋理生成一組完整的mipmap
為target相關聯的紋理生成一組完整的mipmap。其中的target可以是GL_TEXTURE_1/2/3D/[1d/2d_ARRAY] 以及 GL_TEXTURE_CUBE_MAP . 所構建的層有GL_TEXTURE_BASE_LEVEL和GL_TEXTURE_MAX_LEVEL控制.
假設已經建立了第0層mipmap, 可以使用gluBuild1/2/3DMipmaps() 函數來創建和定義一系列大小遞減的mipmap。如果源紋理的大小不是2的冪,可以利用gluBuild*DMipmaps()函數把紋理圖像縮放為最鄰近的2的冪。
glGenerateMipmap (GLenum target)
創建FBO
glGenFramebuffers()需要兩個參數:第一個是要創建的幀緩存的數目,第二個是指向存儲一個或者多個ID的變量或數組的指針。它返回未使用的FBO的ID。ID為0表示默認幀緩存,即window系統提供的幀緩存。
當FBO不再被使用時,FBO可以通過調用glDeleteFramebuffers()來刪除。
一旦一個FBO被創建,在使用它之前必須綁定。
glGenFramebuffers (GLsizei n, GLuint* framebuffers)
創建渲染緩存對象
引用渲染緩存之前必須綁定當前渲染緩存對象
glGenRenderbuffers (GLsizei n, GLuint* renderbuffers)
創建紋理
參數含義:n:用來生成紋理的數量textures:存儲紋理索引的數組
glGenTextures()就是用來產生你要操作的紋理對象的索引的,比如你告訴OpenGL,我需要5個紋理對象,它會從沒有用到的整數里返回5個給你。產生紋理索引之后,需要使用glBindTexture()綁定紋理,才能對該紋理進行操作。glBindTexture()告訴OpenGL下面對紋理的任何操作都是針對它所綁定的紋理對象的,比如glBindTexture(GL_TEXTURE_2D,1)即告訴OpenGL下面代碼中對2D紋理的任何設置都是針對索引為1的紋理的。
glGenTextures (GLsizei n, GLuint* textures)
返回活動屬性
glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
獲得某個active uniform變量的所有信息,類型,名字等
glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
返回連接到程序對象的著色對象的句柄
glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
獲取指向頂點著色器程序中,相應數據的index
glGetAttribLocation (GLuint program, const GLchar* name)
查詢布爾數值狀態
每個函數原型中, 參數 pname 指的是你要查詢的狀態設置, 參數 params 是一個足夠保存所有狀態的值的數組. 鑒于狀態過多, 我們不可能面面俱到, 只在出現的地方給予解釋.
glGetBooleanv (GLenum pname, GLboolean* params)
返回緩沖對象的參數
glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params)
獲取錯誤
我們還可以通過使用gluErrorString()來獲取錯誤標識的描述字符串。
const GLubyte* gluErrorString(GLenum errorCode);
此處的errorCode是通過glGetError來獲得的。例如:
gluErrorString(GL_INVALID_ENUM); //此處將返回字符串:invalid enumerant
glGetError (void)
查詢浮點型變量值
每個函數原型中, 參數 pname 指的是你要查詢的狀態設置, 參數 params 是一個足夠保存所有狀態的值的數組. 鑒于狀態過多, 我們不可能面面俱到, 只在出現的地方給予解釋.
glGetFloatv (GLenum pname, GLfloat* params)
檢索信息的綁定緩存對象的附件
glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params)
獲取當前OpenGL實現所支持的紋理單位的數量
glGetIntegerv (GLenum pname, GLint* params)
獲取編譯情況
program:一個著色器程序的id;
pname:GL_LINK_STATUS;
param:返回值,如果一切正常返回GL_TRUE代,否則返回GL_FALSE。
glGetProgramiv (GLuint program, GLenum pname, GLint* params)
獲取連接錯誤
glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
獲取當前綁定的渲染緩存對象的一些參數
Target應該是GL_RENDERBUFFER;
第二個參數是所要得到的參數名字;
最后一個是指向存儲返回值的整型量的指針。渲染緩存的變量名有如下:
GL_RENDERBUFFER_WIDTH
GL_RENDERBUFFER_HEIGHT
GL_RENDERBUFFER_INTERNAL_FORMAT
GL_RENDERBUFFER_RED_SIZE
GL_RENDERBUFFER_GREEN_SIZE
GL_RENDERBUFFER_BLUE_SIZE
GL_RENDERBUFFER_ALPHA_SIZE
GL_RENDERBUFFER_DEPTH_SIZE
GL_RENDERBUFFER_STENCIL_SIZE
glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params)
獲取著色器編譯情況
glGetShaderiv (GLuint shader, GLenum pname, GLint* params)
獲取著色器日志
glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
獲取Shader精度值
glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
獲取著色器源代碼
glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
獲取標簽名字內容
glGetString (GLenum name)
獲取紋理浮點型參數
glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params)
獲取紋理整型參數
glGetTexParameteriv (GLenum target, GLenum pname, GLint* params)
獲取程序中的屬性
glGetUniformfv (GLuint program, GLint location, GLfloat* params)
glGetUniformiv (GLuint program, GLint location, GLint* params)
獲取局部變量中的指定變量
glGetUniformLocation (GLuint program, const GLchar* name)
獲取頂點屬性
glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params)
返回一個通用的頂點屬性參數
glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params)
返回指定的通用頂點屬性指針的地址
glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer)
指示進行控制的行為或模式
用來抗鋸齒或者控制畫面
glHint (GLenum target, GLenum mode)
判斷一個標識符是否是一個當前被使用的標識符
如果buffer是一個已經綁定的緩沖區對象的名稱,而且還沒有刪除,這個函數返回GL_TRUE。
如果buffer為0或者它不是一個緩沖區對象的名稱,這個函數返回GL_FALSE。
glIsBuffer (GLuint buffer)
獲取某個狀態是否被打開
glIsEnabled (GLenum cap)
判斷一個幀緩存對象是否正在被使用
glIsFramebuffer (GLuint framebuffer)
判斷一個程序對象是否正在被使用
glIsProgram (GLuint program)
判斷一個渲染緩沖區對象是否正在被使用
glIsRenderbuffer (GLuint renderbuffer)
判斷一個著色器對象是否正在被使用
glIsShader (GLuint shader)
判斷一個紋理是否正在被使用用
texture是由glGenTextures()函數返回的
glIsTexture (GLuint texture)
指定線段的柵格化寬度
glLineWidth (GLfloat width)
鏈接程序對象
glLinkProgram (GLuint program)
設置像素存儲模式
glPixelStorei (GLenum pname, GLint param)
設定OpenGL用于計算深度值的比例和單元
glPolygonOffset (GLfloat factor, GLfloat units)
從幀緩沖區讀取一個矩形像素數組,并把數據保存在內存中
glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
釋放著色器編譯器占得資源
glReleaseShaderCompiler (void)
為著色器緩沖區分配空間
第一個參數必須是GL_RENDERBUFFER。
第二個參數可以是用于顏色的(GL_RGB,GL_RGBA,etc.),用于深度的(GL_DEPTH_COMPONENT),或者是用于模板的格式(GL_STENCIL_INDEX)。
Width和height是渲染緩存圖像的像素維度。
width和height必須比GL_MAX_RENDERBUFFER_SIZE_EXT小,否則將會產生GL_UNVALID_VALUE錯誤。
glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
多參數指定范圍
多用在多重采樣
glSampleCoverage (GLclampf value, GLboolean invert)
限制繪圖區域
glScissor (GLint x, GLint y, GLsizei width, GLsizei height)
指定二進制 shader(有的顯卡支持在線編譯,有的支持二進制shader文件)
glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
給著色器實例指定源碼
glShaderSource (GLuint shader, GLsizei count, const GLchar* const string, const GLint length)
在模板上允許或禁止
模板和深度緩存測試一樣,允許或禁止在以單個像素為基礎上繪制。模板平面將最先通過GL繪制基元進行繪制,然后是幾何體和圖像在通過使用模板平面指定的屏幕部分上進行渲染。模板是一種典型的使用多通道渲染算法來達到特殊效果的方法,比如貼花,繪制輪廓和創造性的幾何體渲染等。
glStencilFunc (GLenum func, GLint ref, GLuint mask)
設置測試模板前后測試功能和參考值
設置遮罩或者裁剪用
glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask)
設置模板緩沖區的寫入掩碼
glStencilMask (GLuint mask)
允許對正面和背面獨立使用掩碼
glStencilMaskSeparate (GLenum face, GLuint mask)
比較結果修改蒙板緩存區中的值
glStencilOp (GLenum fail, GLenum zfail, GLenum zpass)
對正反面使用不同的模板進行更新操作
glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
根據像素(YUV)數據生成2D紋理
target:指定目標紋理,這個值必須是GL_TEXTURE_2D。
level:執行細節級別。0是最基本的圖像級別,n表示第N級貼圖細化級別。
internalformat:指定紋理中的顏色格式。可選的值有GL_ALPHA,GL_RGB,GL_RGBA,GL_LUMINANCE, GL_LUMINANCE_ALPHA 等幾種。
width:紋理圖像的寬度。
height:紋理圖像的高度。
border:邊框的寬度。必須為0。
format:像素數據的顏色格式, 不需要和internalformatt取值必須相同。可選的值參考internalformat。
type:指定像素數據的數據類型。可以使用的值有GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4,GL_UNSIGNED_SHORT_5_5_5_1等。pixels:指定內存中指向圖像數據的指針
glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
設置紋理貼圖的參數屬性
glTexParameterf (GLenum target, GLenum pname, GLfloat param)
glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params)
紋理過濾函數
可以用來確定如何把圖像從紋理圖象空間映射到幀緩沖圖象空間。即把紋理像素映射成像素
glTexParameteri (GLenum target, GLenum pname, GLint param)
設置紋理參數
glTexParameteriv (GLenum target, GLenum pname, const GLint* params)
替換/更新紋理
glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
更改一個uniform變量或數組的值
要更改的uniform變量的位置由location指定,location的值應該由glGetUniformLocation函數返回。通過調用glUseProgram,glUniform操作的程序對象將成為當前狀態的一部分。
glUniform{1|2|3|4}{f|i}使用傳進來的實參,修改通過location指定的uniform變量。
所有在程序對象中定義的活動uniform變量,在程序對象鏈接成功后都會被初始化為0.直到下一次程序對象鏈接成功再一次被初始化為0前,它們將保留通過調用glUniform賦給它們的值。
glUniform{1|2|3|4}{f|i}v可以用來更改單個uniform變量的值,或者一個uniform變量數組。
為當前程序對象指定Uniform變量的值。(譯者注:注意,由于OpenGL ES由C語言編寫,但是C語言不支持函數的重載,所以會有很多名字相同后綴不同的函數版本存在。其中函數名中包含數字(1、2、3、4)表示接受這個數字個用于更改uniform變量的值,i表示32位整形,f表示32位浮點型,ub表示8位無符號byte,ui表示32位無符號整形,v表示接受相應的指針類型。
glUniform1f (GLint location, GLfloat x)
glUniform1fv (GLint location, GLsizei count, const GLfloat* v)
glUniform1i (GLint location, GLint x)
glUniform1iv (GLint location, GLsizei count, const GLint* v)
glUniform2f (GLint location, GLfloat x, GLfloat y)
glUniform2fv (GLint location, GLsizei count, const GLfloat* v)
glUniform2i (GLint location, GLint x, GLint y)
glUniform2iv (GLint location, GLsizei count, const GLint* v)
glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z)
glUniform3fv (GLint location, GLsizei count, const GLfloat* v)
glUniform3i (GLint location, GLint x, GLint y, GLint z)
glUniform3iv (GLint location, GLsizei count, const GLint* v)
glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
glUniform4fv (GLint location, GLsizei count, const GLfloat* v)
glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w)
glUniform4iv (GLint location, GLsizei count, const GLint* v)
更改矩陣
glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
使用program
在鏈接了程序以后,我們可以使用glUseProgram()函數來加載并使用鏈接好的程序。參數是著色器id
glUseProgram (GLuint program)
驗證program是否可以在當前狀態下執行
glValidateProgram (GLuint program)
指定定點類型的屬性值
glVertexAttrib1f (GLuint indx, GLfloat x)
glVertexAttrib1fv (GLuint indx, const GLfloat* values)
glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y)
glVertexAttrib2fv (GLuint indx, const GLfloat* values)
glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z)
glVertexAttrib3fv (GLuint indx, const GLfloat* values)
glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
glVertexAttrib4fv (GLuint indx, const GLfloat* values)
一個通用頂點屬性數組。
當渲染時,它指定了通用頂點屬性數組從索引index處開始的位置和數據格式。
index:指示將被修改的通用頂點屬性的索引
size:指點每個頂點元素個數(1~4)
type:數組中每個元素的數據類型
normalized:指示定點數據值是否被歸一化(歸一化<[-1,1]或[0,1]>:GL_TRUE,直接使用:GL_FALSE)
stride:連續頂點屬性間的偏移量,如果為0,相鄰頂點屬性間緊緊相鄰
pointer:頂點數組
glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
設定視口
glViewport (GLint x, GLint y, GLsizei width, GLsizei height)
至此gl.h中的api已經搞完了.