EGL14类是什么意思?

时间:2015-09-15 23:14:55

标签: android opengl-es opengl-es-2.0

我正在使用OpenGL处理​​Android。我grep GLSurfaceView的代码,我注意到它使用EGL10类与Opengl一起工作。

在Android平台的javadoc上行走我注意到还有另一个有趣的类EGL14,它的方法和常量几乎与EGL10相同。

那么...... EGL10和EGL14有什么区别?

1 个答案:

答案 0 :(得分:7)

它们只是EGL的不同版本,它是Android上使用的OpenGL窗口系统界面。

  • 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 不是 {{}的扩展版本1}} API。因此,您无法在两者之间混合和匹配功能。你几乎必须选择一个,并坚持下去。

毋庸置疑,基于11年的发布时间差异,EGL 1.4远远优于EGL 1.0。

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

如果你想同时使用EGL14GLSurfaceView,你必须跳过一些箍。例如,如果您有EGL14接口的EGLConfig对象,并希望相应的EGL10对象与EGLConfig接口一起使用,那么我发现的唯一方法是使用EGL14 EGL10版本的eglGetConfigAttrib()从原始配置中提取配置ID,然后使用EGL14 EGL14版本eglChooseConfig()查询 $scope.buffer = angular.copy($scope.allData[row]); 配置。

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