OpenGL ES 学习 -- 基本概念

Posted 夏至的稻穗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL ES 学习 -- 基本概念相关的知识,希望对你有一定的参考价值。

最近在研究 SurfaceView 和 TextureView,发现栅格化这东西,一直没怎么搞明白,一搜都是关于 OpenGL 的,没办法,当初也是要学习这个,现在重试拾起。

之前接触 OpenGL ,是主要解决一个渲染模糊问题,使用 OpenGL 就不会,而使用 SurfaceView 则不会,但存在延时问题,一直没扣明白,这个系列,期待重新认识 OpenGL 。android 图形学这东西,真的好多东西啊 - - 。

一. OpenGL ES 是什么?

OpenGL (open graphics library)是一个跨平台的图像程序接口,用于调用硬件的2D ,3D 图形处理器,是一种图形处理硬件的标准软件接口。
而 OpenGL ES 是 OpenGL 的分支,针对手机和嵌入式设备,裁减了 OpenGL 部分不必要的功能。

二. 应用场景

  • 游戏
  • 视频播放器
  • 图片,视频剪辑,特效

三. Android 对 OpenGL ES 的支持

Android 支持多版 OpenGL ES API (参考https://www.jianshu.com/p/48c52f862f42):

OpenGL ES 版本Android 版本兼容性功能
1.0 & 1.1Android 1.0固定的图像管道,开发难度相比2.0低
2.0Android 2.2 (API level 8)不兼容1.x可编程的渲染管道,性能效率更高,开发难度更高
3.0Android 4.3 (API level 18)兼容2.0性能更高,支持ETC2格式的透明纹理压缩
3.0Android 5.0 (API level 21)兼容2.0/3.0新增计算着色器、单独的着色器对象等新特性,更多查看Android5.0特性

四. 学习选择

建议还是选择 OpenGL 2.0 版本,这个跟设备厂商有关,就算版本是 4.3 以上,厂商也不一定实现了 3.0 的接口。

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

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

各类版本如下:

glEsVersion 值版本
2.00x00020000
3.00x00030000
3.10x00030001

五. OpenGL ES 在系统中的作用是什么?

通过下面这张图可以看到,它其实是 CPU 和 GPU 图形交互的一个桥梁,可以理解成一个库(图片来源https://www.jianshu.com/p/48c52f862f42)

因为 GPU 在处理逻辑运算方面,有天然的优势,因此,可以理解 OpenGL ES 就是一个能操作 GPU 的API。

六. 开发

  • 通过 Android 官方标准接口,调用 OpenGL
  • C 语言编写 OpenGL 代码,再通过 Jni 调用 (跨平台可以考虑)

参考:
https://learnopengl-cn.github.io/01%20Getting%20started/01%20OpenGL/
https://www.jianshu.com/p/8dd045253ef7
https://www.jianshu.com/p/48c52f862f42

以上是关于OpenGL ES 学习 -- 基本概念的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 学习 -- 绘制平面图形

Android OpenGL ES 学习 – 纹理

Android OpenGL ES 学习 – 纹理

Android OpenGL ES 学习 –矩阵变换

Android OpenGL ES 学习 –矩阵变换

Android OpenGL ES 学习 -- 渐变色