通过前面的文章我们属性了 Surface 和 EGLSurface 的相关内容,这里我们继续分析让两者相关联的函数 native_window_api_connect()。
一、连接EGL API
1、window.h
native_window_api_connect
源码位置:/frameworks/native/libs/nativewindow/include/system/window.h
static inline int native_window_api_connect(struct ANativeWindow* window, int api)
{return window->perform(window, NATIVE_WINDOW_API_CONNECT, api);
}
这里的 window 是通过最初的参数传过来的,是一个本地窗口,在 Android 中该对象就是 Surface。所以这里调用的其实就是 Surface 的 perform() 方法。
2、Surface.cpp
源码位置:/frameworks/native/libs/gui/Surface.cpp
perform
int Surface::perform(int operation, va_list args)
{int res = NO_ERROR;switch (operation) {……case NATIVE_WINDOW_API_CONNECT:res = dispatchConnect(args);break;……default:res =