OpenGL ES 自定義著色器

著色器

創(chuàng)建著色器

GLuint glCreateShader(GLenum type);
type:創(chuàng)建著色器的類型。
GL_VERTEX_SHADER  頂點著色器
GL_FRAGMENT_SHADER 片元著色器
返回值:是指向新著色器的句柄。

刪除著色器

void glDeleteShader(GLuint shader);
shader:要刪除著色器對象的句柄。

編譯著色器

將著色器的源代碼附著到著色器對象上。

void glShaderSource(GLuint shader , GLSizei count ,const GLChar * const *string, const GLint *length);
shader:指向著色器對象的句柄。
count:著色器源字符串的數(shù)量,著色器可以由多個源字符串組成,但是每個著色器只有一個main函數(shù)。
string:指向保存數(shù)量的count的著色器源字符串的數(shù)組指針。
length:指向保存每個著色器字符串大小數(shù)量為count的整數(shù)數(shù)組指針。

開始編譯著色器源代碼。

void glCompileShader(GLuint shader);
shader:需要編譯的著色器對象的句柄

創(chuàng)建與鏈接程序

創(chuàng)建

創(chuàng)建一個程序?qū)ο?/p>

GLUint glCreateProgram( );
返回值:返回一個執(zhí)行新程序?qū)ο蟮木浔?

刪除

void glDeleteProgram( GLuint program );
program:指向需要刪除的程序?qū)ο缶浔?

著色器與程序的附著

void glAttachShader( GLuint program , GLuint shader );
program:指向程序?qū)ο蟮木浔?shader:指向程序鏈接著色器對象的句柄。

斷開鏈接

void glDetachShader(GLuint program);
program:指向程序?qū)ο蟮木浔?shader:指向程序斷開鏈接的著色器對象的句柄

程序的鏈接

glLinkProgram(GLuint program);
program:指向程序?qū)ο蟮木浔?

獲取鏈接的狀態(tài)

void glGetProgramiv (GLuint program,GLenum pname, GLint *params);
program:需要獲取信息的程序?qū)ο蟮木浔?pname:獲取的參數(shù)信息,可以是:
GL_ACTIVE_ATTRIBUTES 
GL_ACTIVE_ATTRIBUTES_MAX_LENGTH 
GL_ACTIVE_UNIFORM_BLOCK 
GL_ACTIVE_UNIFORM_BLOCK_MAX_LENGTH 
GL_ACTIVE_UNIFROMS 
GL_ACTIVE_UNIFORM_MAX_LENGTH 
GL_ATTACHED_SHADERS 
GL_DELETE_STATUS
GL_INFO_LOG_LENGTH
GL_LINK_STATUS 
GL_PROGRAM_BINARY_RETRIEVABLE_HINT 
GL_TRANSFORM_FEEDBACK_BUFFER_MODE 
GL_TRANSFORM_FEEDBACK_VARYINGS 
GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 
GL_VALIDATE_STATUS

params:指向查詢結(jié)果整數(shù)位置的指針

FrameBuffer&RenderBuffer

-w546

RenderBuffer

一個RenderBuffer對象是通過應(yīng)用分配的一個2D圖像緩沖區(qū)。RenderBuffer對象能夠被用來分配和存儲顏色、深度或者模板值。也能夠在FrameBuffer中被用作顏色、深度、模板的附件。一個RenderBuffer是一個類似于屏幕窗口系統(tǒng)提供的可繪制的表面。比如pBuffer,一個RenderBuffer并不能直接使用紋理對象。

FrameBuffer

一個FrameBuffer對象(通常被稱為FBO)。是一個收集顏色、深度、和模板緩沖區(qū)的附著點。描述屬性的狀態(tài),例如顏色、深度和模板緩沖區(qū)的大小和格式,都關(guān)聯(lián)到FBO。各種各樣的2D圖形能夠被附著FrameBuffer對象的顏色附著點。它們包含了RenderBuffer對象存儲的顏色值,一個2D紋理或立方體貼圖?;蛘咭粋€mip-level的二維切面的3D紋理。同樣,各種各樣的2D圖形包含了當(dāng)時的深度值,可以附加到一個FBO的深度附著點中去,唯一的2D圖像能夠附著在FBO的模板附著點,是一個RenderBuffer對象存儲的模板值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容