Intel for Android* Developers Learning Series #11: OpenGL ES* Support, Performance, and Features for Android* on the Intel® Atom™ Processor





5.00/5 (4投票s)
Android 上 3D 图形的标准 API 是 OpenGL ES,它是当今所有移动设备上使用最广泛的 3D 图形 API。
1. 引言
Android 上 3D 图形的标准 API 是 OpenGL ES,它是当今所有移动设备上使用最广泛的 3D 图形 API。Android 使用 OpenGL ES 来加速 2D 和 3D 图形。在 Android 的早期版本中,OpenGL ES 加速在某种程度上是可选的,但随着 Android 的发展和屏幕尺寸的增大,加速的 OpenGL ES 已成为 Android 图形系统的重要组成部分。
OpenGL ES 的三个版本是 1.0 和 1.1,从一开始就在 Android 上得到支持,以及 2.0,它在 Android 2.2 中添加。今天,Android 开发者可以选择使用任何版本。表 1 总结了迄今为止 Android 的所有主要版本以及哪些版本内置了 Intel® Atom™ 处理器系统映像。
Release | 名称 | API | 支持 | Intel® Atom™ 支持 |
---|---|---|---|---|
Android 1.5 | Cupcake | 3 | OpenGL ES 1.0 | |
Android 1.5 | Cupcake | 3 | OpenGL ES 1.0 | |
Android 1.6 | Donut | 4 | OpenGL ES 1.0, 1.1 | |
Android 2.0 | Eclair | 5 | OpenGL ES 1.0, 1.1 | |
Android 2.1 | Eclair | 7 | OpenGL ES 1.0, 1.1 | |
Android 2.2 | Froyo | 8 | OpenGL ES 1.0, 1.1, 2.0 | |
Android 2.3.3 | Gingerbread | 10 | OpenGL ES 1.0, 1.1, 2.0 | 是 |
Android 3.0 | Honeycomb | 11 | OpenGL ES 1.0, 1.1, 2.0 | |
Android 3.1 | Honeycomb | 12 | OpenGL ES 1.0, 1.1, 2.0 | |
Android 3.2 | Honeycomb | 13 | OpenGL ES 1.0, 1.1, 2.0 | |
Android 4.0 | Ice Cream Sandwich | 14 | OpenGL ES 1.0, 1.1, 2.0 | |
Android 4.0.3 | Ice Cream Sandwich | 15 | OpenGL ES 1.0, 1.1, 2.0 | 是 |
Android 4.1 | Jelly Bean | 16 | OpenGL ES 1.0, 1.1, 2.0 | 是 |
自 Android 2.3.3 起,Intel Atom 平台就支持 Android,包括 OpenGL ES 1.0、1.1 和 2.0。Intel Atom 处理器上的 OpenGL ES 支持非常全面,并且由于独特的特性组合,其性能优于大多数其他 Android 解决方案。
- PowerVR SGX540 和 SGX544MP2 GPU(400 MHz 及以上)
- 更快的浮点运算
- 用于 Android 虚拟设备模拟的 x86 系统映像
- Intel® Hardware Accelerated Execution Manager (Intel HAXM)
- Intel® Graphics Performance Analyzers (Intel GPA)
Intel 已与 Google 合作,并通过持续发布 x86 系统映像、Intel HAXM 和 Intel GPA,致力于为 Android 平台提供出色的支持,以应对未来版本的 Android。
2. 用于 Android 虚拟设备模拟的 x86 系统映像
每位嵌入式开发人员都知道虚拟设备模拟器如何加速新应用程序的开发。但是,使用 ARM 系统映像的 Android 虚拟设备 (AVD) 速度非常慢,因为 AVD 必须在 Windows* 或 Linux* 开发系统上模拟每个 ARM 指令。在典型的 ARM AVD 上,仅启动 Android 就可能需要 5 分钟或更长时间。Intel 已经解决了这个问题,推出了 Intel Hardware Accelerated Execution Manager (Intel HAXM)。当此工具安装并与 Intel x86 Atom 系统映像 AVD 一起使用时,您的应用程序开发将得到极大的加速,您甚至无需 Intel Atom 硬件即可开始。
请注意,Google 的 AVD 模拟目前仅支持 OpenGL ES 1.0 和 1.1 开发,不支持 2.0。这是 Google 模拟软件的限制,与 CPU 或 GPU 的架构无关。
3. Intel® Graphics Performance Analyzers
面向 Intel Atom 处理器上的 Android 的 OpenGL ES 应用开发者还可以使用另一个重要工具:Intel Graphics Performance Analyzers (Intel GPA)。这套工具可提供对 CPU、GPU 和 OpenGL ES 的数十个关键系统指标的实时视图。Intel GPA 可以在 Windows 或 Ubuntu Linux 开发系统上运行,并通过 Android 调试接口 (adb) 与运行在 Android 目标设备上的驱动程序组件进行通信。通过进行一些实验,开发人员可以快速直观地发现图形管线中的瓶颈,并确定代码优化的最佳机会。
有关更多信息以及下载最新版本的 Intel GPA (2012 R4) 用于 Android 开发,请参阅:http://software.intel.com/en-us/vcsource/tools/intel-gpa?cid=sem121p7972
4. OpenGL ES 驱动程序的获取位置
获取用于 Android 的 Intel Atom 处理器 OpenGL ES 驱动程序非常简单。当您下载支持 Intel Atom 处理器的 Android SDK 时,它们已集成到 x86 系统映像中。Intel 和 Google 的开发人员共同努力,使 x86 设备上的 Android 应用程序开发与 ARM 设备一样简单,即使您的应用程序广泛使用 OpenGL ES。
Android 版本 2.3.3 (Gingerbread)、4.0.3 (Ice Cream Sandwich) 和 4.1 (Jelly Bean) 内置了对 Intel Atom 处理器的完全支持,包括 OpenGL ES 1.1 和 2.0 的驱动程序。只需从 Android SDK Manager 中选择这些版本之一。请确保您选择的版本列出了“Intel x86 Atom System Image”作为包含项。此外,请务必下载并安装 Intel Hardware Accelerated Execution Manager (Intel HAXM),它在 SDK Manager 的“Extras”下列出。如果您尚未安装 Android SDK Manager,可以从以下网址下载:https://developer.android.com.cn/sdk/index.html
或者,您也可以从 Intel 的网站直接下载 Intel x86 系统映像:http://software.intel.com/en-us/articles/android-ice-cream-sandwich-x86-emulator-image
5. PowerVR* GPU
Intel Atom 处理器配备了 PowerVR 图形加速器,这是当今移动设备上使用最广泛的 OpenGL ES 加速器。PowerVR 是一种成熟、经过验证的设计,基于 Universal Scalable Shader Engine (USSE) 架构。然而,并非所有 PowerVR 核心都相同。SGX540 系列的 USSE 数量是 SGX530 核心的两倍,而 SGX544MP2 核心是 SGX530 的四倍,因此如果时钟速率相同,性能将分别翻倍或翻四倍。然而,Intel Atom 处理器还具有比其他实现更高的时钟速率,这为 OpenGL ES 提供了更高的性能,最终带来了更流畅的用户体验。表 2 总结了 Intel Atom 处理器中采用的 PowerVR 核心系列。
Intel® Atom™ 系列 | GPU 核心 | GPU 时钟 |
---|---|---|
Intel® Atom™ Z24XX | PowerVR SGX 540 | 400 MHz |
Intel® Atom™ Z2580 | PowerVR SGX 544MP2 | 待定 |
PowerVR 中的 USSE 架构实际上可以处理 OpenGL 2.1 和 DirectX* 10.1 的统一着色器模型要求,但只有 OpenGL ES 1.1 和 OpenGL ES 2.0 及其扩展公开的功能可供 Android 开发者使用。
6. OpenGL ES 扩展
OpenGL ES 1.1 和 2.0 的定义规范要求 OpenGL ES 功能集在不同平台之间基本相同。这是标准化 API 的目的。但是,GPU 开发人员可以通过 OpenGL ES 的扩展来公开其 GPU 的特殊功能。Khronos 维护的官方在线 OpenGL ES 扩展注册中心,所有扩展都在此记录,网址为:http://www.khronos.org/registry/gles
大多数 Android 平台都提供重要的 OpenGL ES 扩展,例如对压缩纹理和直接纹理流的支持,但如今 OpenGL ES 使用了许多不同的压缩纹理格式。Intel Atom 处理器中的 PowerVR 核心对各种压缩纹理格式提供了最广泛的支持。
压缩纹理是 3D 应用程序降低内存需求和提高性能的重要技术,但使用的各种格式仅通过扩展定义,因此因平台而异。支持最广泛的格式是 Ericsson Texture Compression (ETC1_RGB8),但它仅支持每像素 8 位精度,并且不支持每像素 alpha。除了 ETC1_RGB8 之外,PowerVR GPU 还支持 PVRTC 格式,它相比 ETC1_RGB8 具有一些重要的优势。PVRTC 格式支持每像素 2 位或 4 位精度的压缩纹理,并可选地支持每像素 alpha 信息。这些功能可以显著减小纹理相对于 ETC1_RGB8 格式的大小,并为创建 alpha 混合效果提供更大的灵活性。
PowerVR 核心和 PVRTC 也用于所有代的 Apple iPhone*、iPod* Touch 和 iPad* 设备,因此除了基础 OpenGL ES 标准之外,它还为 Android 在 Intel Atom 处理器上的兼容性提供了一些支持,这对于在 Android 和 iOS 平台之间开发应用程序非常重要。有关更多信息,请参阅“纹理压缩支持”:
https://developer.android.com.cn/guide/topics/graphics/opengl.html
OpenGL ES 的其他重要扩展可实现 OpenGL ES 与 Android 系统其他部分(例如 OpenMAX* 的视频帧)之间的快速纹理图像流。Intel Atom 处理器上的 OpenGL ES 驱动程序也支持这些重要的扩展。
Android 应用程序不应假设任何特定的 OpenGL ES 扩展在任何特定设备上都可用。相反,行为良好的应用程序将在运行时查询 OpenGL ES 以获取可用扩展的列表。可以通过这些调用从 OpenGL ES 和 EGL 驱动程序获取扩展列表。
glGetString(GL_EXTENSIONS);
eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS);
Google Play 网站上有一个有用的应用程序,它可以执行此查询并在其上运行的任何 Android 设备上显示返回的列表:https://play.google.com/store/apps/details?id=com.realtechvr.glview
适用于 Android 的 OpenGL ES 扩展在很大程度上取决于 GPU 核心,而不是 CPU 架构的差异。Intel Atom 处理器提供的 OpenGL ES 扩展与任何其他带有 PowerVR GPU 的 Android 平台基本相同,即使 Intel Atom 处理器具有 x86 CPU 架构。事实上,Intel Atom 处理器上的 PowerVR 核心比大多数其他 GPU 支持更多专有的 OpenGL ES 扩展,其中一些非常有用。当然,使用这些专有扩展会将您的应用程序的可移植性限制在具有 PowerVR 核心的 Android 设备上。“IMG”结尾的扩展名很可能专属于 PowerVR,但这并非绝对规则。最好使用 GLView 等工具在各种 Android 设备上自行测试所需的扩展。
以下是一些专属于 PowerVR 的 OpenGL ES 扩展示例:
glFramebufferTexture2DMultisampleIMG()
glRenderbufferStorageMultisampleIMG()
glMultiDrawArraysEXT()
glMultiDrawElementsEXT()
7. 浮点性能
对于 OpenGL ES 应用程序的良好性能而言,CPU 和 GPU 核心都提供快速的浮点性能至关重要。着色器程序大量使用浮点运算,这在 GPU 上执行,但 OpenGL ES 应用程序代码通常也需要大量的浮点计算,这些计算必须在 CPU 上进行,以便为调用 OpenGL ES 做好准备。这是 Intel Atom 处理器相对于基于 ARM 的解决方案的另一个优势领域,因为它们在 CPU 和 GPU 核心上都具有快速的浮点执行能力。
没有浮点硬件的系统使用定点数学,并使用一个名为“Common-Lite”的 OpenGL ES 1.1 的独立驱动程序。但是 Intel 提供的 Android 系统映像仅包含 OpenGL ES 1.1 的“Common”(浮点)驱动程序,因为所有 Intel Atom 处理器都在 CPU 和 GPU 核心中内置了硬件浮点,因此无需使用定点。OpenGL ES 2.0 的 Khronos 标准强制要求仅使用浮点。
8. Android Framework SDK
Android SDK 通过使用 GLSurfaceView 类,为在 Android 应用程序中使用 OpenGL ES 提供了最简便的方法。此类负责 EGL 的大部分初始化、线程处理以及分配一个 OpenGL ES 可以渲染且 Android 可以显示的表面。OpenGL ES 还可以渲染到具有一些附加功能(如转换和 alpha 混合)的 TextureView 对象,但需要更多的代码来设置和使用。Android SDK 通过 Google 和 Khronos 的这些软件包中的 Java* 绑定提供对 OpenGL ES 的支持。
- jvax.microedition.khronos.egl:Khronos 标准实现
- javax.microedition.khronos.opengles:Khronos 标准实现
- android.opengl:已更新,以提供更好的性能
今天可以在 Android 上使用的三个版本的 OpenGL ES API 是:1.0、1.1 和 2.0。OpenGL ES 1.0 已被 1.1 取代。OpenGL ES 2.0 通过着色器编程提供了更大的灵活性,但不兼容为 OpenGL ES 1.1 编写的旧代码。表 3 总结了可用于应用程序开发并为其定义类的 OpenGL ES API 版本。
OpenGL ES API 版本 | 类 |
---|---|
OpenGL ES 1.0 | android.opengl.GLES10 |
OpenGL ES 1.0 | android.opengl.GLES10Ext |
OpenGL ES 1.1 | android.opengl.GLES11 |
OpenGL ES 1.0 | android.opengl.GLES11Ext |
OpenGL ES 2.0 | android.opengl.GLES20 |
Intel Atom 处理器平台为 Android 提供了对使用任何这些 OpenGL ES 版本的应用程序的完全支持,无论是通过 SDK 还是 NDK。
9. Android NDK
Native Development Kit (NDK) 是 Google 开发的,旨在通过绕过 Dalvik VM 并原生运行 C/C++ 代码来帮助开发人员提高 Android 应用程序的性能。Google 决定将 NDK 提供给所有 Android 开发人员,因为它简化了移植用 C/C++ 编写的现有应用程序的过程,并为最需要它的应用程序(如 3D 游戏)提供了最佳性能。
Android NDK 支持 OpenGL ES 1.1 和 2.0,并为两者都提供了一些示例应用程序。大多数使用 OpenGL ES 的应用程序都是用 C/C++ 编写的,NDK 提供了一种将 C/C++ 代码与基于 Java 的 Android 框架相结合的机制。这称为 Java Native Interface (JNI),并且它正成为在 Android 上实现需要快速图形的应用程序的主流方法。NDK 从 r6b 版本开始支持 Intel Atom 处理器的 JNI,您可以从以下网址下载:https://developer.android.com.cn/sdk/ndk/index.html
10. Renderscript
Renderscript 最初于 Android 3.0 中推出。它是 Google 开发的另一项技术,旨在通过绕过 Dalvik VM 来加速计算密集型算法(包括图形)。但是,与 NDK 不同,Renderscript 代码是在 Android 设备上运行时编译的。Renderscript 设计用于利用多个处理器,但目前仅利用 CPU 上可用的处理核心,而不利用 GPU。Google 可能会在未来的版本中改进 Renderscript 以利用 GPU 核心,并且现有的 Renderscript 代码应该能够在新的功能可用时利用这些新功能,希望无需修改。
Renderscript 对其运行的硬件进行抽象,因此应用程序开发人员无需担心 CPU 架构,甚至无需担心实际有多少处理器可用。但是,Renderscript 并未为此使用现有的并行计算标准,例如 GLSL 或 OpenCL*。相反,它是一种基于 C99 的新语言,内置了对 OpenGL ES 的支持。Renderscript 的抽象确保它可以在任何 Android 设备上运行,包括 Intel Atom 处理器。有关 Renderscript 的更多信息,请参阅:http://android-developers.blogspot.com/2011/02/introducing-renderscript.html
11. 结论
在为 Android 开发 OpenGL ES 应用程序时,Intel Atom 处理器 x86 架构不是问题,因为该处理器提供了开发人员期望从基于 ARM 的解决方案获得的相同功能,甚至更多。GPU 的架构对于确保 Android 平台之间的 OpenGL ES 兼容性更为重要,而 Intel Atom 处理器的 PowerVR 核心是当今移动设备上使用最广泛的 GPU。Intel Atom 处理器将一流的 PowerVR 核心与快速浮点运算以及对快速 AVD 模拟和图形管线性能分析的卓越支持软件相结合,为 Android 上的 OpenGL ES 应用程序提供了最佳的整体解决方案。
12. 关于作者
Clay D. Montgomery 是嵌入式系统上 OpenGL 驱动程序和应用程序的领先开发人员。他的经验包括在 STB Systems、VLSI Technology、Philips Semiconductors、Nokia、Texas Instruments、AMX 以及作为独立顾问,在多个平台上进行图形加速器硬件、图形驱动程序、API 和 OpenGL 应用程序的设计。他在 Freescale i.MX 和 TI OMAP 平台以及 Vivante、AMD 和 PowerVR 图形核心上开发一些最早的 OpenGL ES、OpenVG 和 SVG 驱动程序和应用程序方面发挥了重要作用。他开发并教授了关于嵌入式 Linux 上 OpenGL* ES 开发的研讨会,并代表多家公司参与 Khronos Group。
OpenGL ES、OpenMAX 和 OpenVG 是 Khronos Group 的商标。
OpenCL 和 OpenCL 标志是 Apple Inc. 的商标,经 Khronos 许可使用。
DirectX 是 Microsoft Corporation 的商标。
版权所有 2012 年 9 月 25 日,Intel Corporation