GlContext

GlContext是bgfx里使用OpenGL的最底层的封装,它的具体实现有5种。
EGL,主要用于OpenGL ES & Android
WGL,主要用于OpenGL & Windows
GLX,主要用于OpenGL & Linux
EAGL,用于iOS
NSGL,用于OS X
这里选取EGL进行分析
eglOpen和eglClose用于加载libEGL库并获取对应的函数地址,bgfx通过BGFX_USE_GL_DYNAMIC_LIB宏支持动态加载或静态链接。https://www.khronos.org/registry/EGL/sdk/docs/man/html/indexflat.php
GlContext最主要的函数是create,create初始化EGL,创建EGL的Surface和Context:
eglGetDisplay获取一个EGL display connection
eglInitialize初始化这个EGL display connection并返回EGL版本号
eglChooseConfig配置需要的frame buffer属性,EGL返回满足条件的EGLConfig
eglCreateWindowSurface​根据EGLConfig创建一个window surface
eglCreateContext根据EGLConfig创建一个rendering context
eglMakeCurrent​绑定context到当前的渲染线程,同时绑定context到刚创建的draw/read surface
eglSwapInterval指定eglSwapBuffers最小的刷新周期为0,默认为1即开启垂直同步,0为只要渲染完成就刷新
最后通过import加载libGLESv2库并获取OpenGL ES的函数地址供以后调用,至此一个GIContext就创建好了,重要的数据都保存在成员变量里。
glcontext_egl.h/.cpp里除了GlContext外还有一个SwapChainGL结构,这个结构用于根据GlContext的m_display和m_config创建新的surface和context。