1 OpenGL ES和EGL基本概念

1.1 OpenGL ES

  • OpenGL ES的全称是 OpenGL for Embedded Systems。这是一个针对嵌入式设备(如智能手机、平板电脑、游戏控制台和车载系统)设计的图形绘制API。OpenGL ES是标准的OpenGL API的一个子集,提供了简化和优化的功能,以适应嵌入式系统的性能和资源限制。

  • OpenGL ES 是 OpenGL 的子集,区别在于 OpenGL ES 删减了 OpenGL 一切低效能的操作方式,有高性能的决不留低效能的,即只求效能不求兼容性。(即:OpenGL ES 能实现的,OpenGL 也能实现;OpenGL 部分 API,OpenGL ES 不支持)

    alt text

1.2 EGL

EGL的英文全称是 Embedded-System Graphics Library。EGL 是一种接口,用于在不同的平台上管理OpenGL、OpenGL ES及其他图形上下文,并与本地窗口系统(Linux就是X11窗口系统)进行交互。它在嵌入式系统中尤其常用,比如智能手机、平板电脑和其他需要高效图形处理的设备。主要作用有:

  1. 与设备的原生窗口系统通信;

  2. 查询绘图表面的可用类型和配置;

  3. 创建绘图表面;

  4. 在OpenGL ES 和其他图形渲染API之间同步渲染;

  5. 管理纹理贴图等渲染资源。

alt text

2 OpenGL ES 版本

OpenGL ES 1.x 针对固定管线硬件 OpenGL ES 2.x 针对可编程管线硬件
  1. OpenGL ES 1.0 以 OpenGL 1.3 规范为基础

  2. OpenGL ES 1.1 以 OpenGL 1.5 规范为基础

  3. OpenGL ES 2.0 以 OpenGL 2.0 规范为基础

  4. OpenGL ES 3.0 于 2012 年公布,在 OpenGL 3.x 和 4.x 的基础上增加了许多新的功能。(基本上 Android 4.3 以后的平台, iPhone 5s ,iPad Air ,iPad mini 2 及后续版本都支持OpenGL ES 3.0版本)

3 OpenGL ES Shading Language(后面简称GLSL ES)

OpenGL ES Shading Language 是着色器语言,GLSL ES 是在 GLSL 的基础上新增和删除了部分特性。

GLSL ESGLSL 拥有着多个版本文档,用来对应不同版本的 OpenGL ESOpenGL

下面两张表格描述了不同版本下的 GLSL ESGLSL 对应的 OpenGL ESOpenGL 版本和文档更新时间,以及在 Shader 中对应的版本预处理标识。

alt text

alt text

alt text

4 相关库和头文件

4.1 GLES头文件

alt text

4.2 GLES库文件

alt text

4.3 EGL头文件和库文件

alt text

  1. 我使用头文件 #include <GLES3/gl32.h> 和库文件 libGLESv2.so 可以编译通过,或者我使用 #include <GLES3/gl32.h> 和库文件 libGLESv2_nvidia.so.2 也可以编译通过。

  2. 我不能知道 v2 库它们具体对应的 OpenGL ES版本,他们可能兼容2.0到3.2之间吗??

5 命令行工具查看版本

5.1 glxinfo

glxinfo是一个用于查询和显示OpenGL及GLX(OpenGL Extension to the X Window System)信息的命令行工具。它可以帮助你了解当前系统上图形硬件和驱动程序支持的OpenGL版本、扩展以及其他相关信息。具体来说,glxinfo可以提供以下信息:

  1. OpenGL版本:当前系统支持的OpenGL版本。

  2. 渲染器信息:当前使用的GPU和驱动程序的信息。

  3. 扩展列表:支持的OpenGL和GLX扩展。

  4. GLX配置:可用的GLX可视配置和FB配置。

    alt text

上图可以看出系统支持的OpenGL ES版本是 3.2(目前OpenGL ES最高版本就是3.2)

5.2 eglinfo

eglinfo 是一个命令行工具,用于显示EGL(Embedded-System Graphics Library)信息。EGL是一种接口,用于连接OpenGL ES和底层本地窗口系统(linux下也就是x窗口),它提供了创建和管理图形上下文及同步绘图操作的方法。eglinfo 工具可以显示有关EGL实现的详细信息,包括版本、扩展、可用配置等。

alt text

目前 EGL 最高版本就是 1.5