上一篇博客中已经完成了Windows上运行OpenGLES的简单例程,现在分析下其调用流程。
1)EGL工作流程
首先需要了解下调用EGL创建与原生窗口相关的OpenGLES运行环境流程,具体可参考;流程大致分为如下几步:
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.