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