上一篇博客中已經完成了Windows上運行OpenGLES的簡單例程,現在分析下其調用流程。
1)EGL工作流程
首先需要了解下調用EGL創建與原生窗口相關的OpenGLES運行環境流程,具體可參考https://blog.csdn.net/afei__/article/details/84867104;流程大致分爲如下幾步:
1)調用平臺相關函數創建原生窗口(EGL不負責這個),得到窗口句柄EGLNativeWindowType
2)調用eglGetDisplay()獲取與原生窗口相關的連接EGLDisplay
3)調用eglInitialize()初始化EGLDisplay
4)獲取可用的渲染表面配置,一般調用eglChooseConfig()
5)根據EGLDisplay、EGLNativeWindowType窗口句柄、配置,調用eglCreateWindowSurface()創建渲染表面EGLSurface
6)根據EGLDisplay、配置,調用eglCreateContext()創建GL上下文EGLContext
7)調用eglMakeCurrent()使用配置好的上下文
2)示例代碼調用流程
紅寶書的例程代碼提供了一個開發框架用於加速OpenGLES開發,把上述調用EGL構造運行環境封裝爲一個函數esCreateWindow(),並且提供了不同平臺下與原生窗口操作相關(創建、顯示、消息處理等)的函數實現,使開發者更加專注於OpenGLES中的API調用。
以Hello_Triangle工程爲例,Hello_Triangle.c中並沒有main函數,main函數存在於Common庫中的esUtil_win32.c中(對應於Android平臺就是esUtil_Android.c中)。main()中申請一個ESContext變量,並調用esMain()對該變量進行初始化,包括對UserData變量的初始化、調用esCreateWindow()搭建GL運行環境,構造渲染用到的shader和program,具體的繪製實現;同時把渲染函數、相應消息函數等賦值給ESContext對象的回調函數接口。這樣的話開發者可以更加着重於實現渲染相關的GLES的API調用,不用花費過多心思於構造平臺相關的GLES運行環境。
3)編譯android平臺上的APK
紅寶書中還給出了在Windows中使用NDK將工程編譯爲手機上的APK運行的方法,自己實踐了下,流程如下。
1)下載JDK
從https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下載,我安裝的是64bit版本,安裝後將“安裝路徑\Java\jdk1.8.0_191\bin”加入系統路徑
2)安裝ADT
我是從https://www.androiddevtools.cn/下載的64bit版本,解壓後將“解壓路徑\sdk\tools”和“解壓路徑\sdk\platform-tools”加入系統路徑
3)安裝NDK
也是從https://www.androiddevtools.cn/下載的,我下載的r14b版本,解壓後將“解壓路徑”加入系統路徑
4)安裝Apache ant
從https://ant.apache.org/bindownload.cgi下載,解壓後將“解壓路徑\bin”加入系統路徑
至此需要的工具集已經安裝並配置完成(沒有安裝Cygwin),之後按照紅寶書中的說明,順利編譯生成了APK,在手機上正常運行。編譯操作如下圖所示,唯一不同的點是我安裝的ANDROID API版本爲20,因此把第一句命令中的18改爲了20.