android栈的五个功能层,12.2 Android中OpenGL软件层次栈

12.2  Android中OpenGL软件层次栈

按照分层理念的设计,Android中的OpenGL实现也是层次设计的,形成了一个软件层次栈。最上面的是Java层,接着下面是JNI层,再调用下面的包裹(wrapper)层,包裹层下面则是OpenGL的软件实现或硬件实现。

图12-1给出了包android.opengl中的API类的调用层次关系。最上面虚线框图中左侧的四个类是OpenGL ES 1.0/1.1的API类,右侧的GLES 20是ES 2.0的API类。这五个类中的成员函数都是静态(static关键字)的,且是native的(意味着它们都由JNI层中的C++代码实现)。它们的JNI层代码位于frameworks/base/core/jni,因而封装在libandroid_runtime.so库中。JNI层中的C++代码将调用路径frameworks/native/opengl/libs(ICS及以前的版本是frameworks/base/opengl/libs)下面的代码生成的wrapper(包裹)库,见图12-1的最下面的虚线框。

72a754532fce083df695c7827736c3f1.png

图12-1  包android.opengl的调用层次栈图12-2则给出了包javax.microedition.khronos.opengles和包javax.microedition.khronos.egl的调用层次堆栈。

1801d21b7130100993bf4b5ababbe0bc.png

(点击查看大图)图12-2  OpenGL ES和EGL调用层次栈

如图12-2所示,最上面的左边的虚线框是包javax.microedition.khronos.opengles,它用于支持OpenGL ES1.0/1.1 API接口规范,右边的虚线框中的包javax.microedition.khronos.egl则是EGL接口。OpenGL ES 为附加功能和可能的平台特性开发提供了扩展机制,但仍然需要一个可以让 OpenGL ES 和本地视窗系统交互且与平台无关的层。EGL 就是 OpenGL ES 和底层 Native 平台视窗系统之间的接口。 OpenGL ES 本质上是一个图形渲染管线的状态机,而 EGL 则是用于监控这些状态以及维护Frame buffer 和其他渲染Surface 的外部层。EGL 包含了一组数据类型,同时也提供了对一组平台相关的本地数据类型的支持。

位于第二层的包com.google.android.gles_jni实现了其上面的接口类,它依赖于JNI层的C++实现,而JNI层则依赖于下面的包裹库。在后面的章节中还要具体讲述到,包裹库下面的是OpenGL的硬件实现库或软件实现库,它们通过专门的图形处理器或ARM应用处理器去实现真正的绘制功能。它们才是真正的OpenGL实现。

【责任编辑:book TEL:(010)68476606】

点赞 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值