我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况

Posted 欧阳鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况相关的知识,希望对你有一定的参考价值。

一、OpenGL ES对android平台的支持情况

在android的官方文档 OpenGL ES 中有介绍,如下所示:

Android 可通过开放图形库 (OpenGL®)(特别是 OpenGL ES API)来支持高性能 2D 和 3D 图形。OpenGL 是一种跨平台的图形 API,用于为 3D 图形处理硬件指定标准的软件接口。OpenGL ES 是 OpenGL 规范的一种形式,适用于嵌入式设备。Android 支持多版 OpenGL ES API:

  • OpenGL ES 1.0 和 1.1 - 此 API 规范受 Android 1.0 及更高版本的支持。
  • OpenGL ES 2.0 - 此 API 规范受 Android 2.2(API 级别 8)及更高版本的支持。
  • OpenGL ES 3.0 - 此 API 规范受 Android 4.3(API 级别 18)及更高版本的支持。
  • OpenGL ES 3.1 - 此 API 规范受 Android 5.0(API 级别 21)及更高版本的支持。

注意:要使设备支持 OpenGL ES 3.0 API,则需要使用由设备制造商提供的此图形管道的一个实现。搭载 Android 4.3 或更低版本的设备可能不支持 OpenGL ES 3.0 API。如需了解如何检查运行时支持的 OpenGL ES 版本,请参阅检查 OpenGL ES 版本。

OpenGL ES版本Android版本描述
OpenGL ES1.0Android 1.0+OpenGL ES 1.x是针对固定硬件管线的,Android 1.0和更高的版本支持这个API规范。
OpenGL ES2.0Android 2.2(API 8)+OpenGL ES 2.x是针对可编程硬件管线的,不兼容OpenGL ES 1.x,Android 2.2(API 8)和更高的版本支持这个API规范。
OpenGL ES3.0Android 4.3(API 18)+向下兼容OpenGL ES 2.x,Android 4.3(API 18)及更高的版本支持这个API规范。
OpenGL ES3.1Android 5.0 (API 21)+向下兼容OpenGL ES3.0/2.0,Android 5.0(API 21)和更高的版本支持这个API规范

二、声明 OpenGL 要求

如果您的应用使用的 OpenGL 功能不一定在所有设备上可用,则您必须在 AndroidManifest.xml 文件中包含这些要求。以下是最常见的 OpenGL 清单声明:

2.1OpenGL ES 版本要求

如果您的应用需要特定版本的 OpenGL ES,则您必须通过将以下设置添加到清单中来声明该要求,如下所示。

  • 对于 OpenGL ES 2.0:
<!-- Tell the system this app requires OpenGL ES 2.0. -->
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
    

如果添加此声明,Google Play 会阻止将应用安装到不支持 OpenGL ES 2.0 的设备中。如果您的应用是专为支持 OpenGL ES 3.0 的设备而打造,则您也可以在清单中指明这一点:

  • 对于 OpenGL ES 3.0:
    <!-- Tell the system this app requires OpenGL ES 3.0. -->
    <uses-feature android:glEsVersion="0x00030000" android:required="true" />
    
  • 对于 OpenGL ES 3.1:
    <!-- Tell the system this app requires OpenGL ES 3.1. -->
    <uses-feature android:glEsVersion="0x00030001" android:required="true" />
    

注意:OpenGL ES 3.x API 可向后兼容 2.0 API,这意味着您可以在应用中更灵活地使用 OpenGL ES 实现。在清单中将 OpenGL ES 2.0 API 声明为必需项之后,您就可以将该 API 版本作为默认版本,在运行时检查 3.x API 的可用性,然后,如果设备支持的话,便可使用 OpenGL ES 3.x 功能。如需详细了解如何检查设备支持的 OpenGL ES 版本,请参阅检查 OpenGL ES 版本。

2.2 纹理压缩要求

如果您的应用使用了纹理压缩格式,那么您必须使用 <supports-gl-texture> 在清单文件中声明应用支持的格式。如需详细了解可用的纹理压缩格式,请参阅纹理压缩支持。

如果您在清单中声明了纹理压缩要求,而用户的设备不支持您声明的压缩类型中的至少一种,则您的应用不会对此类用户显示。如需详细了解 Google Play 过滤如何处理纹理压缩,请参阅 <supports-gl-texture>文档的 Google Play 和纹理压缩过滤部分。

三、选择 OpenGL API 版本

OpenGL ES 1.0 API 版本(以及 1.1 扩展)、2.0 版本和 3.0 版本均可提供高性能图形界面,用于创建 3D 游戏、可视化图表和界面。OpenGL ES 2.0 和 3.0 的图形编程基本相似,不同之处在于版本 3.0 表示 2.0 API 与其他功能的超集。OpenGL ES 1.0/1.1 API 的编程明显不同于 OpenGL ES 2.0 和 3.0,因此开发者在开始借助这些 API 进行开发之前应仔细考虑以下因素:

  • 性能 - 通常,OpenGL ES 2.0 和 3.0 可提供比 ES 1.0/1.1 API 更快的图形性能。不过,具体的性能差异可能因运行 OpenGL 应用的 Android 设备而异,这是因为硬件制造商对 OpenGL ES 图形管道的实现存在不同。
  • 设备兼容性 - 开发者应考虑他们的客户可用的设备类型、Android 版本和 OpenGL ES 版本。如需详细了解各种设备的 OpenGL 兼容性,请参阅 OpenGL 版本和设备兼容性部分。
  • 编码便利性 - OpenGL ES 1.0/1.1 API 提供了一个固定函数管道和多个便捷函数,这些是 OpenGL ES 2.0 或 3.0 API 不具备的。刚接触 OpenGL ES 的开发者可能会发现针对版本 1.0/1.1 进行编码更快且更便捷。
  • 图形控制力 - OpenGL ES 2.0 和 3.0 API 通过使用着色程序提供完全可编程的管道,因而能够提供更强的控制力。通过更直接地控制图形处理管道,开发者可以打造使用 1.0/1.1 API 难以生成的效果。
  • 纹理支持 - OpenGL ES 3.0 API 能够最好地支持纹理压缩,因为它保证了支持透明度的 ETC2 压缩格式的可用性。1.x 和 2.0 API 实现通常包含对 ETC1 的支持,但这种纹理格式不支持透明度,因此您通常必须采用目标设备支持的其他压缩格式来提供资源。如需了解详情,请参阅纹理压缩支持

尽管性能、兼容性、便利性、控制力等因素可能会影响您的决策,但您应选择一种您认为可为用户提供最佳体验的 OpenGL API 版本。

以上是关于我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况

我的OpenGL学习进阶之旅OpenGL ES对Android平台的支持情况

我的OpenGL学习进阶之旅OpenGL ES命令语法

我的OpenGL学习进阶之旅OpenGL ES命令语法

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (下)

我的OpenGL学习进阶之旅OpenGL ES 着色语言 (下)