OpenGL ES 自定义着色器
2020-08-06 本文已影响0人
Joker_King
着色器
创建着色器
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
-w546RenderBuffer
一个RenderBuffer对象是通过应用分配的一个2D图像缓冲区。RenderBuffer对象能够被用来分配和存储颜色、深度或者模板值。也能够在FrameBuffer中被用作颜色、深度、模板的附件。一个RenderBuffer是一个类似于屏幕窗口系统提供的可绘制的表面。比如pBuffer,一个RenderBuffer并不能直接使用纹理对象。
FrameBuffer
一个FrameBuffer对象(通常被称为FBO)。是一个收集颜色、深度、和模板缓冲区的附着点。描述属性的状态,例如颜色、深度和模板缓冲区的大小和格式,都关联到FBO。各种各样的2D图形能够被附着FrameBuffer对象的颜色附着点。它们包含了RenderBuffer对象存储的颜色值,一个2D纹理或立方体贴图。或者一个mip-level的二维切面的3D纹理。同样,各种各样的2D图形包含了当时的深度值,可以附加到一个FBO的深度附着点中去,唯一的2D图像能够附着在FBO的模板附着点,是一个RenderBuffer对象存储的模板值。