OpenGL基础知识梳理——OpenGLES运行环境搭建流程_Mega_Li的博客-程序员秘密

技术标签: opengl学习  

上一篇博客中已经完成了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.

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lwx309025167/article/details/102730963

智能推荐

Win10安装多个jdk,共存环境配置,自由切换极其方便【详细教程】_bug菌¹的博客-程序员秘密

今天着手一个新的项目,是一个很古老的ssh项目,用的还是jdk1.7,外加tomcat 7.0,这写习惯了springboot项目,哪里还会记得这种配置,于是,项目必须给我一个钟头跑起来,我只要硬着头皮上本地环境:Windows10+jdk1.8;需求:在不影响别的项目的同时,也需要支持目前的项目,于是想法是jdk 怎么配置容易修改;于是我想到了,如下配置确实很节省时间,又方便!不信咱们往下看!首先,先来了解一下:当系统已经安装过一个版本jdk时,由于需要安装jdk8,这个时候..

阻抗,特征阻抗与等效阻抗_特征阻抗和阻抗区别_赋能大师兄的博客-程序员秘密

射频的黄金三角之一就是阻抗,我们在射频设计中,会经常与阻抗打交道,比如特征阻抗,负载阻抗,阻抗匹配等等。更多的时候,我们所设计的射频电路就是一个阻抗匹配的问题。我们今天一起来看一下有关阻抗的那些事儿。

下载、编译、运行android 7.1系统(ubuntu 16.0.4)_android7.1下载_吴传龙的博客-程序员秘密

android 7.x的系统版本新增的很多的新功能,比如说任务处理功能,允许用户双击“最近”按钮去快速切换到自己上一次使用的应用程序中。同时,“最近”菜单中还有一个“清除全部”按钮。再比如说新增了省流量功能,在接近用户计费周期末,或是流量包本身较小的情况下,减少应用消耗的数据流量。在启用这一模式时,系统将拦截后台的数据使用,并在可能的情况下减少前台运行应用使用的数据量,例如限制你看视频,下调画质,

2017年六月五日 NO.7 HTML(六)——表格结构标签(笔记)_活着为一生迷的博客-程序员秘密

表单结构标签 元素名 元素类型 功能 用法 table 流元素 创建表格,基于行,需分别标记每行 开始和结束标签 tr 无 表示表格中的行 开始和结束标签 td 无 表示表格中的单元格 开始和结束标签 th 无 创建表头单元格,用来数据对比和说明 开始和结束标签 thead 无 同tbody作用,用于标题

Netkiller Architect 手札之前言_weixin_34032792的博客-程序员秘密

1.1.系列文档下面是我多年积累下来的经验总结,整理成文档供大家参考:Netkiller Architect 手札 Netkiller Developer 手札 Netkiller PHP 手札 Netkiller Python 手札 Netkiller Testing 手札 Netkiller...

Druid 安装部署(单机版)_druid单机部署_程序员学习圈的博客-程序员秘密

1.安装包下载从https://imply.io/get-started 下载最新版本安装包2.安装部署 Imply提供了一套完整的部署方式,包括依赖库Druid,图形化的数据展示页面,SQL查询组件等,下面将基于Imply套件进行说明如何部署。2.1 将imply-2.7.10.tar.gz上传到hadoop102的/opt/software目录下,并解...

随便推点

如何备份思科cisco路由器配置_weixin_34257076的博客-程序员秘密

如何备份思科cisco路由器配置文件 本资料之提供大家参考学习^*^ 有什么不懂的地方在博客中留言 QQ:569535658发布时间:2009-4-08 15:52:13 发布人:fengyifan 在路由器的配置过程中,经常会用到COPY这个命令。下面我们就为大家介绍如何使用COPY命令备份配置文件,以及如何从TFTP服务器拷...

MIUI的root权限管理分析_root的su文件在哪里_Jack_Jia的博客-程序员秘密

一、授权管理       MIUI中对与root权限的管理和控制通过两个模块实现:       su 这是一个ELF可执行文件,在系统中的路径为/system/bin/su       Superuser.apk(Superuser.odex) 授权管理app       MIUI中的app提权到root的一般过程为:          某个app通过Runtime.g

c++中对类中私有成员中的静态变量初始化_私有静态成员变量初始化_wingWC的博客-程序员秘密

1.static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化。2.静态成员不能在类定义里边初始化,只能在class body外初始化。3.静态成员仍然遵循public,private,protected访问准则。4.静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。今天写程序出现:err

rt-thread 开发者能力认证考试(RCEA)复习题_hurryddd的博客-程序员秘密

目录一、问答题1、RT-Thread的启动流程2、加载时地址与运行时地址映射3、MDK环境下各种数据段存储的什么数据4、自动初始化原理5、文件系统的使用流程6、STM32 BSP的制作过程7、I/O设备管理框架层的意义8、RAM处理器寄存器9、RTOS和前后台系统二、编程题一、问答题1、RT-Thread的启动流程整个启动过程为:startu...

python的plotnine_python数据可视化系列---plotnine(1)_weixin_39979215的博客-程序员秘密

最近在学习python数据可视化,因为之前有R语言的ggplot2基础,并且一直受益于其语法的简单,但做出来的图十分漂亮的优点。因此,自然搜到了plotnine包。该包非常新,从其官网的版权申明年份也可看出---2019。plotnie与R语言的ggplot2都是基于Wilkinson在《Grammar of Graphics》一书中所提出的图形语法的具体实现。概括来讲,这套图形语法把绘图过程分为...

第十二周java作业--GUI组件的事件_zb_tjw的博客-程序员秘密

作业: 编写一个JFrame窗口,要求如下: 1. 在窗口的NORTH区放置一个JPanel面板。 2. JPanel面板放置如下组件: (1) JLable标签,标签文本为“兴趣”,右边接着是三个JCheckBox多选按钮,选项分别是“羽毛球”、“乒乓球”、“唱歌”。可以多选。 (2) JLabel标签,标签文本为“性别”,右边接着是两个JRadioButton按钮,选项分别是“男”、“

推荐文章

热门文章

相关标签