EGL(Embedded Graphics Library)
EGL的主要功能如下:
1:和本地窗口系统通讯(native windowing system);
2:查询可用的配置;
3:创建OpenGL ES可用的“绘图表面”(drawing surface);
4:同步不同类别的API之间的渲染,比如在OpenGL ES和OpenVG之间同步。或者在OpenGL和本地窗口的绘制命令之间;
5:管理“渲染资源”,比如纹理映射(rendering map);
OpenGL ES 需要渲染上下文和绘制表面才能完成图形图像的绘制。
渲染上下文:存储相关OpenGL ES 状态。
绘制表面:是用于绘制图元的表面,它指定渲染所需要的缓存区类型,例如颜色缓存区,深度缓冲区和模版缓冲区。
OpenGL ES API并没有提供如何创建渲染上下文或者上下文如何连接到原生窗口系统。唯一支持OPenGL ES却不支持EGL的平台是iOS。
OpenGL ES 错误处理
错误代码 | 描述 |
---|---|
GL_NO_ERROR | 从上一次调用glGetError以来没有生成任何错误 |
GL_INVALID_ENUM | GLenum参数超出范围,忽略生成错误命令 |
GL_INVALID_VALUE | 数值型参数超出范围,忽略生成错误命令 |
GL_INVALID_OPERATION | 特定命令在当前OpenGL ES状态无法执行 |
GL_OUT_OF_MEMORY | 内存泄漏或者OpenGL ES的管线状态未定义 |
用EAGL创建屏幕上的渲染表面的步骤
EAGL渲染表面.jpg着色器相关函数
1: GLuint glCreateShader(GLenum type)
type ----//出啊关键着色器类型。GL_VERTES_SHADER或者GL_FRAGMENT_SHADER
返回值----//是指向新着色器对象的句柄,可以调用glDeleteShader删除。
使用: GLuint shader = glCreateShader(GL_VERTEX_SHADER);
2: glDeleteShader(GLuint shader)
shader---//要删除的着色器对象句柄
使用:glDeleteShader(shader);
3: glShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
shader---//指向着色器对象的句柄
count --- //着色器源字符串的数量,着色器可以由多个源字符串组成。但是每个着色器只有一个main函数
string---//指向保存数量的count的着色器源字符串的数组指针
length---//指向保存每个着色器字符串大小且元素数量为count的整数数组指针
使用: glShaderSource(*shader, 1, &source,NULL);//将着色器源码附加到着色器对象上
4: glCompileShader(GLuint shader)
使用: glCompileShader(*shader);// 把着色器源代码编译成目标代码
5: glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
shader---//需要编译的着色器对象句柄
pname---//获取的信息参数。可以为GL_COMPILE_STATUS/GL_DELETE_STATUS/GL_INFO_LOG_LENGTH/GL_SHADER_SOURCE_LENGTH/GL_SHADER_TYPE
params---//指向查询结果的整数存储位置的指针。
6: glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *infolog)
shader---//需要获取信息日志的着色器对象句柄
maxLength---//保存信息日志的缓存区大小
length---//写入的信息日志的长度(减去null终止符);如果不需要知道长度,这个参数可以设置为Null。
infoLog---//指向保存信息的日志的字符缓存区的指针。
7: GLuint program = glCreateProgram();
创建一个程序对象
返回值:返回一个执行新程序对象的句柄。
8: glDeleteProgram(GLuint program);
删除一个程序对象
program:指向需要删除的程序对象句柄。
9: glAttachShader(GLuint program, GLuint shader);
program:指向程序对象的句柄
shader:指向程序连接的着色器对象的句柄。
使用:glAttachShader(program, verShader);//着色器与程序连接/附着
10: glDetachShader(<#GLuint program#>, <#GLuint shader#>)
program:指向程序的句柄
shader:指向程序断开连接的着色器对象句柄
使用:glDeleteShader(verShader);
11: glLinkProgram(GLuint program)
program:指向程序对象的句柄
12: glGetProgramiv(GLuint program, GLenum pname, GLint *params);
使用: glGetProgramiv(self.myPrograme, GL_LINK_STATUS, &linkStatus);// 获取链接状态
13: glGetProgramInfoLog(<#GLuint program#>, GLsizei bufsize, <#GLsizei *length#>, <#GLchar *infolog#>)
program:指向需要获取信息的程序对象句柄
maxLength:存储信息日志的缓存区大小
length:写入的信息日志长度(减去null终止符),如果不需要知道长度,可以设置为Null。
infoLog:指向存储信息日志的字符缓存区的指针。
使用: glGetProgramInfoLog(self.myPrograme, sizeof(message), 0, &message[0]);//从程序信息日志中获取信息
14: glUseProgram(GLuint program)
使用: glUseProgram(self.myPrograme);//使用program
网友评论