我在用opengl开发android。我修改了GLSurfaceView
的代码,我注意到它使用了类EGL10
来处理opengl。
看着android平台的javadoc,我注意到还有一个有趣的类EGL14
,它的方法和常量几乎相同。
那么,EGL10
和EGL10
之间有什么区别?
最佳答案
它们只是egl的不同版本,egl是android上使用的opengl窗口系统接口。EGL10
对应于egl 1.0,这是2003年发布的规范。EGL14
对应于EGL 1.4,这是2014年发布的规范。
这意味着EGL14
是最近才出现的。最新的规范是2015年发布的egl 1.5。
不幸的是,这两个版本的Android Java绑定是完全不同的。虽然功能上egl 1.4是egl1.0的超集(至少afaik,我没有系统地比较规范),EGL14
在android中不是扩展版的EGL10
api。所以你不能把两者的功能混为一谈。你得选一个,然后坚持下去。
不用说,基于11年的发布时间差异,egl 1.4要比egl1.0好得多。
现在您可能想知道为什么GLSurfaceView
在其接口中使用EGL10
引用。我不确定,但我强烈怀疑这是为了向后兼容。EGL14
仅在api级别17中添加,而GLSurfaceView
自api级别3以来一直存在。为了避免破坏旧的应用程序,他们几乎必须引入一个与GLSurfaceView
相关的不同版本的EGL14
。
如果你想同时使用GLSurfaceView
和EGL14
,你必须跳过一些圈。例如,如果您在EGLConfig
接口中有一个EGL10
对象,并且希望相应的EGLConfig
对象与EGL14
接口一起使用,那么我找到的唯一方法是使用EGL10
版本的eglGetConfigAttrib()
从原始配置中提取配置ID,然后使用EGL14
版本查询EGL14
配置。打开。
当你开始混合这两个版本时,更有趣的是它们大多使用相同的方法名。这意味着您必须在处理这两个版本的源文件中使用限定名。