class EGL14 是什么意思?

What is the meaning of class EGL14?

我正在 Android 使用 OpenGL。我 grep 了 GLSurfaceView 的代码,我注意到它使用 class EGL10 来与 OpenGL 一起工作。

查看Android平台的Javadoc,我注意到还有一个有趣的class、EGL14,其方法和常量几乎与EGL10相同.

那么...EGL10EGL14 有什么区别?

它们只是 EGL 的不同版本,EGL 是 Android.

上使用的 OpenGL window 系统接口
  • EGL10对应EGL 1.0,是2003年发布的规范
  • EGL14对应EGL 1.4,是2014年发布的规范

这意味着 EGL14 更近。最新规范是 2015 年发布的 EGL 1.5。

不幸的是,这两个版本的 Android Java 绑定完全不同。虽然在功能上 EGL 1.4 是 EGL 1.0 的超集(至少 AFAIK,我没有系统地比较规格),Android 中的 EGL14 而不是 的扩展版本 EGL10 API。所以你不能只是混合和匹配两者之间的功能。您几乎必须选择一个并坚持下去。

不用说基于 11 年的发布时间差异,EGL 1.4 大大优于 EGL 1.0。

现在您可能想知道为什么 GLSurfaceView 在其界面中使用 EGL10 引用。我不确定,但我强烈怀疑这是为了向后兼容。 EGL14 仅在 API 级别 17 中添加,而 GLSurfaceView 自 API 级别 3 以来一直存在。为了避免破坏旧应用程序,他们几乎必须引入一个不同的版本与 EGL14.

有关的 GLSurfaceView

如果你想同时使用GLSurfaceViewEGL14,你必须跳过一些障碍。例如,如果你有一个来自 EGL10 接口的 EGLConfig 对象,并且想要相应的 EGLConfig 对象用于 EGL14 接口,我发现的唯一方法是使用 eglGetConfigAttrib()EGL10 版本从原始配置中提取配置 ID,然后使用 eglChooseConfig()EGL14 版本查询 EGL14 配置。

当您开始混合使用这两个版本时,"fun" 增加的是它们大多使用相同的方法名称。这意味着您必须在处理两个版本的源文件中使用限定名称。