一、OpenGL ES——前言
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 不支持)
1.2 EGL
EGL的英文全称是 Embedded-System Graphics Library。EGL 是一种接口,用于在不同的平台上管理OpenGL、OpenGL ES及其他图形上下文,并与本地窗口系统(Linux就是X11窗口系统)进行交互。它在嵌入式系统中尤其常用,比如智能手机、平板电脑和其他需要高效图形处理的设备。主要作用有:
-
与设备的原生窗口系统通信;
-
查询绘图表面的可用类型和配置;
-
创建绘图表面;
-
在OpenGL ES 和其他图形渲染API之间同步渲染;
-
管理纹理贴图等渲染资源。
2 OpenGL ES 版本
-
OpenGL ES 1.0 以 OpenGL 1.3 规范为基础
-
OpenGL ES 1.1 以 OpenGL 1.5 规范为基础
-
OpenGL ES 2.0 以 OpenGL 2.0 规范为基础
-
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 ES
和 GLSL
拥有着多个版本文档,用来对应不同版本的 OpenGL ES
和 OpenGL
。
下面两张表格描述了不同版本下的 GLSL ES
、GLSL
对应的 OpenGL ES
、OpenGL
版本和文档更新时间,以及在 Shader 中对应的版本预处理标识。
4 相关库和头文件
4.1 GLES头文件
4.2 GLES库文件
4.3 EGL头文件和库文件
-
我使用头文件
#include <GLES3/gl32.h>
和库文件libGLESv2.so
可以编译通过,或者我使用#include <GLES3/gl32.h>
和库文件libGLESv2_nvidia.so.2
也可以编译通过。 -
我不能知道
v2
库它们具体对应的OpenGL ES版本
,他们可能兼容2.0到3.2之间吗??
5 命令行工具查看版本
5.1 glxinfo
glxinfo是一个用于查询和显示OpenGL及GLX(OpenGL Extension to the X Window System)信息的命令行工具。它可以帮助你了解当前系统上图形硬件和驱动程序支持的OpenGL版本、扩展以及其他相关信息。具体来说,glxinfo可以提供以下信息:
-
OpenGL版本:当前系统支持的OpenGL版本。
-
渲染器信息:当前使用的GPU和驱动程序的信息。
-
扩展列表:支持的OpenGL和GLX扩展。
-
GLX配置:可用的GLX可视配置和FB配置。
上图可以看出系统支持的OpenGL ES版本是 3.2
(目前OpenGL ES最高版本就是3.2)
5.2 eglinfo
eglinfo
是一个命令行工具,用于显示EGL(Embedded-System Graphics Library)信息。EGL是一种接口,用于连接OpenGL ES和底层本地窗口系统(linux下也就是x窗口),它提供了创建和管理图形上下文及同步绘图操作的方法。eglinfo 工具可以显示有关EGL实现的详细信息,包括版本、扩展、可用配置等。
目前 EGL
最高版本就是 1.5