OpenGL ES 自定义着色器

342 阅读2分钟

着色器

创建着色器

GLuint glCreateShader(GLenum type);
type:创建着色器的类型。
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:着色器源字符串的数量,着色器可以由多个源字符串组成,但是每个着色器只有一个main函数。
string:指向保存数量的count的着色器源字符串的数组指针。
length:指向保存每个着色器字符串大小数量为count的整数数组指针。

开始编译着色器源代码。

void glCompileShader(GLuint shader);
shader:需要编译的着色器对象的句柄

创建与链接程序

创建

创建一个程序对象

GLUint glCreateProgram( );
返回值:返回一个执行新程序对象的句柄

删除

void glDeleteProgram( GLuint program );
program:指向需要删除的程序对象句柄

着色器与程序的附着

void glAttachShader( GLuint program , GLuint shader );
program:指向程序对象的句柄。
shader:指向程序链接着色器对象的句柄。

断开链接

void glDetachShader(GLuint program);
program:指向程序对象的句柄。
shader:指向程序断开链接的着色器对象的句柄

程序的链接

glLinkProgram(GLuint program);
program:指向程序对象的句柄。

获取链接的状态

void glGetProgramiv (GLuint program,GLenum pname, GLint *params);
program:需要获取信息的程序对象的句柄。
pname:获取的参数信息,可以是:
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:指向查询结果整数位置的指针

#FrameBuffer&RenderBuffer -w546

RenderBuffer

一个RenderBuffer对象是通过应用分配的一个2D图像缓冲区。RenderBuffer对象能够被用来分配和存储颜色、深度或者模板值。也能够在FrameBuffer中被用作颜色、深度、模板的附件。一个RenderBuffer是一个类似于屏幕窗口系统提供的可绘制的表面。比如pBuffer,一个RenderBuffer并不能直接使用纹理对象。

FrameBuffer

一个FrameBuffer对象(通常被称为FBO)。是一个收集颜色、深度、和模板缓冲区的附着点。描述属性的状态,例如颜色、深度和模板缓冲区的大小和格式,都关联到FBO。各种各样的2D图形能够被附着FrameBuffer对象的颜色附着点。它们包含了RenderBuffer对象存储的颜色值,一个2D纹理或立方体贴图。或者一个mip-level的二维切面的3D纹理。同样,各种各样的2D图形包含了当时的深度值,可以附加到一个FBO的深度附着点中去,唯一的2D图像能够附着在FBO的模板附着点,是一个RenderBuffer对象存储的模板值。