通過前面的文章我們屬性了 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 =