上一篇文章我们对 OpenGL ES 相关知识有了一定的了解,并知道在使用 OpenGL ES 是需要先通过 eglGetDisplay() 方法获取 EGLDisplay 默认主屏幕句柄。这里就分析一下 eglGetDisplay() 中的 egl_init_drivers() 初始化 OpenGL ES 的对应流程。
一、OpenGL ES初始化
1、egl.cpp
源码位置:/frameworks/native/opengl/libs/EGL/egl.cpp
egl_init_drivers
EGLBoolean egl_init_drivers() {
EGLBoolean res;
pthread_mutex_lock(&sInitDriverMutex);
res = egl_init_drivers_locked();
pthread_mutex_unlock(&sInitDriverMutex);
return res;
}
这里调用 egl_init_drivers_locked() 函数来实现驱动程序的初始化工作。
egl_init_drivers_locked
static EGLBoolean egl_init_drivers_locked() {
if (sEarlyInitState) {
// 已经初始化过
return EGL_FALSE;
}
// 获取驱动加载程序
Loader& loader(Loader::getInstance());
// 动态加载EGL实现
egl_connection_t* cnx = &gEGLImpl;
cnx->hooks[egl_connection_t::GLESv1_IN