Android如何加载硬件OpenGLES库

本文介绍了Android系统如何加载硬件OpenGLES库,包括libEGL.so、libGLESv1_CM.so和libGLESv2.so的作用。详细阐述了libEGL库加载EGL和OpenGLES API的过程,涉及TLS的初始化、egl.cfg配置文件的使用以及软硬件库的选择。同时讨论了eglMakeCurrent()在TLS中的作用,以及如何通过TLS调用OpenGLES API。
摘要由CSDN通过智能技术生成

注:文章部分引用自http://blog.csdn.net/andyhuabing/article/details/7176049

最近需要移植一个硬件的GPU 3D功能到Android系统里,哪么学习Android与OpenGLES的关系哪是必需的了,首先就是如何加载软/硬OpenGLES的库。

1:首先在没有加进硬件3D代码之前,Android默认使用的是软件OpenGLES API的库,也就是libGLES_android 。其中Android内部依赖以下三个库去加载管理OpenGLES API。

1):libEGL.so

EGL是用来管理绘图表面的(Drawing surfaces),并且提供了如下的机制
(1)与本地窗口系统进行通信
(2)查找绘图表面可用的类型和配置信息
(3)创建绘图表面
(4)同步OpenGL ES 2.0和其他的渲染API(Open VG、本地窗口系统的绘图命令等)
(5)管理渲染资源,比如材质

EGL 和 OpenGL ES API的联系
(1)通过解析OpenGL ES API函数库 libGLES_android.so来获取函数指针,进行调用。
(2)通过线程局部存储机制进行联系。

其实Android自身的libEGL并非真正的EGL API,libEGL具有加载管理OpenGLES库,并提供真正EGL库 API的封装。

例如libGLES_android.so里就有EGL API的真正实现:frameworks/base/opengl/libagl/egl.cpp。

而硬件3D的EGL API的实现通常单独编译成一个库,例如GPU Vivante厂商的EGL API库一般就命名为libEGL_VIVANTE.so 。

 

2):libGLESv1_CM.so,libGLESv2.soz

这两个库都是对OpenGLES API的封装,其中libGLESv1_CM.so是对OpenGLES1.0库的封装,libGLESV2.so是对OpenGLES2.0库的封装。这两个库封装的对像是OpenGLES API的实现,所以用软件OpenGLES的话,部分API的实现可以在libGLES_android.so中实现,当然在frameworks/base/opengl/libagl/目录下会有原码。而硬件OpenGLES的话,API的实现一般会编译成库,例如GPU Vivante厂商的OpenGLES1.0的API库一般就命名为libGLESv1_CM_VIVANTE.so,OpenGLES2.0的API库一般命名为libGLESv2_VIVANTE.so 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值