OpenGLES命令需要渲染上下文和绘制表面。渲染上下文存储相关的OpenGLES 状态。绘制表面时用于绘制图元的表面,它指定渲染所需要的缓冲区类型。绘制表面还需要制定所需要的缓冲区的位深度。
EGL是Khronos渲染API与原生窗口系统之间的接口。iOS支持OpenGLES但不支持EGL。
OpenGLES应用程序必须在渲染之前私用EGL执行以下任务:
查询并初始化设备可用的显示器。
创建渲染表面。
创建渲染上下文。
库和包含文件
库:libGLESv2.lib 和EGL库libEGL.lib
头文件:
#include <EGL/egl.h>
#include <GLES3/gl3.h>
选择性包含 #include <GLES3/gl2ext.h>,这里是扩展列表的头文件
EGL命令语法
所有命令都以egl开头,每个单词首字母大写
数据类型:
32位整数 —— EGLint
32位无符号整数 —— EGLenum、EGLBoolean
指针 —— EGLConfig、EGLContext、EGLDisplay、EGLSurface、EGLClientBuffer
OpenGLES命令语法
所有命令以gl开头,每个单词首字母大写
有些命令可能采用不同风格的参数。风格活着类型根据采用的参数数量、参数使用的数据类型(字节b,无符号字节ub,短整数s,无符号短整数us,整数i,浮点数f)以及参数是否以向量v形式传递而各不相同。
错误处理:
GLenum glGetError(void)
基本错误代码:
GL_NO_ERROR 没有任何错误
GL_INVALID_ENUM 超出GLenum范围
GL_INVALID_VALUE 数值型参数超出范围。
GL_INVALID_OPERATION 特定命令在当前OpenGLES状态下不能执行。
GL_OUT_OF_MEMORY 内存不足时执行该命令。未定义?
基本状态管理:
void glEnable(GLenum cap)
void glDisable(GLenum cap)
cap:
GL_BLEND
GL_CULL_FACE
GL_DEPTH_TEST
GL_DITHER
GL_POLYGON_OFFSET_FILL
GL_PRIMITIVE_RESTART_FIXED_INDEX
GL_RASTERIZER_DISCARD
GL_SAMPLE_ALPHA_TO_COVERAGE
GL_SAMPLE_COVERAGE
GL_SCISSOR_TEST
GL_STENCIL_TEST
检查某个状态目前启用还是禁用
GLboolean glIsEnable(GLenum cap)