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

智能推荐

target html语言,html中a标签的target属性_Serena558的博客-程序员秘密

[修复Win8.1 BUG] 解决Win8.1英文字体发虚不渲染问题Win8.1更新了宋体字体,中文字体显示漂亮了,但英文字体发虚不渲染,尤其是小号的英文和数字字体,看下图. 1.下载Win8的宋体2.打开字体文件点击安装3.导入注册表文件4.重启Win8.1 下载链 ...ArcGIS 栅格数据已加载后的获取原文...

3dsmax意外关闭_sun大师兄的博客-程序员秘密

删除C:\Program Files\Autodesk\3ds Max 2014\plugins\vray2014文件用管理员用户打开系统,没有多个用户的可以不用操作上一步奏。英文版,系统盘位置:\用户\Administrator\AppData\Local\Autodesk\3dsMax\2014 - 64bit(版本信息各版本有不同文件夹)\ENU。下面的en-US除此文件夹的其他文件备份一份(帮助你找好之前的设置)。再删除ENU文件夹下的全部文件。再次运行你版本出现问题的MAX。你就发现可.

自动驾驶技术——初学者笔记2:自动驾驶算法简介_小泉ZJQ的博客-程序员秘密

最近正在研读工信出版社的《第一本无人驾驶技术书》,这里做一下笔记。自动驾驶系统主要由三部分组成,算法端,用户操作系统和云端。这一章简单学习算法端。简单说来就是从传感器的原始数据中提取出来有意义的信息,用以了解周围的环境,并根据周围的环境做出决策。黄标展示出了算法端的组件:传感,感知和决策。1.1 传感传感是通过自动驾驶中的多个传感器,获取周围的数据。自动驾驶的传感器包括以下几种:GPS/...

NFT IP授权热度渐起,NFT2.0时代即将到来?_沉睡者IT的博客-程序员秘密

最近几条关于 NFT IP 授权的新闻扎堆出现,让很多人终于开始关注这一赛道。在这几天,有的无聊猿被挂到「人才市场」,有的无聊猿则穿上了新的系列套装。这些让人眼前一亮的新尝试在如今的 Crypto 寒冬中格外难能可贵,似乎也在昭示着,熊市中,人们逐渐从对于 NFT 赛道中各类 Infura(基建)项目近乎迷信的关注,转变成了对于 NFT 品牌价值的发掘。诚然,Infura 是底层基础,似乎是所有项目的「必经之路」,但说到底 Infura 比的是市占率,而关于市占率,在无比崇尚正统性的 Crypto 世界中,

OpenLDAP 搭建入门_weixin_30347335的博客-程序员秘密

系统环境:CentOS 7slapd版本:2.4.44简介OpenLDAP是一款轻量级目录访问协议,基于X.500标准的,支持TCP/IP协议,用于实现账号集中管理的开源软件,提供一整套安全的账号统一管理机制,属于C/S架构。OpenLDAP默认以Berkeley DB作为后端数据库,Berkeley DB数据库 是一类特殊的数据库,主要以散列的数据类型进行数据存储,主要用于搜索、浏览、更...

linux实验二:SET-UID程序漏洞实验_weixin_33829657的博客-程序员秘密

SET-UID程序漏洞实验20125113 赵恺一、实验描述Set-UID 是Unix系统中的一个重要的安全机制。当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限。例如,如果程序的拥有者是root,那么任何人运行这个程序时都会获得程序拥有者的权限。Set-UID允许我们做许多很有趣的事情,但是不幸的是,它也是很多坏事情的罪魁祸首。因此本次实验的目标有两点:1.欣赏...

随便推点

C++怎么产生随机数_邹氏情歌cium的博客-程序员秘密

使用rand函数和time函数可以使数字随着时间的变化而变化。这里可以用srand()函数。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。如果没有设置随机数种子,那么每次随机数种子都自动设成相同值1 ,进而导致rand()所产...

Git 统计代码量_gitee统计代码量_姜某人的博客-程序员秘密

分析 Git 日志来统计代码量为啥会用到这个功能呢? 一个是统计工作量,贡献量的时候 —— 这一看就是要发奖金啊 另一个是统计自己代码量的时候 —— 十有八九是准备跳槽了咳咳,言归正传。我在桔子哥的博客网站 【桔子小窝】 中找到了这篇博客,下面是博客内容。指定用户名版git log --author="_Your_Name_Here_" --pretty=tfo...

wifi认证Portal开发系列(三):portal协议_bangbang0203的博客-程序员秘密

中国移动WLAN业务PORTAL协议规范介绍一、用户上线认证流程上线流程完成用户账号的认证,并把认证结果通知Portal Server,Portal server将会通知WLAN用户并且显示相应的认证结果。用户上线认证方式有两种:CHAP和PAP,其中CHAP方式为必选功能,PAP方式为可选功能。1.1、用户上线Chap认证流程用户访问网站,经过...

RESTEasy + JBOSS 7 Hello world application---reference_aebdm757009的博客-程序员秘密

RESTEasyis JBOSS provided implementation of JAX-RS specification for buildingRESTful Web Servicesand RESTful Java applications. Though this is not limited to be used in JBOSS only, and you can...

PVE安装Ros/Windows/群晖 资源合集_虚坏叔叔的博客-程序员秘密

链接:https://pan.baidu.com/s/11zuxseu_d5cfAvhadqF4Rw提取码:4xnv

前端实现图片下载_今天2岁的博客-程序员秘密

前端实现图片下载在这里我们需要一个插件 html2canvas 下载它npm install --save html2canvas在需要的页面引入import html2canvas from "html2canvas"我这里使用的是需要下载多个的,但是我没有找到怎么直接下载多个,然后,我就直接使用了递归一个下载完了之后下载下一个,直到下载完成,我在图片上传到阿里云,图片超过1的时候也是这样操作的。但是这个东西需要使用到ref , 这里其实有点坑, ref 我有试过,给出变量赋值,但是这个在下面

推荐文章

热门文章

相关标签