我在用opengl开发android。我修改了GLSurfaceView的代码,我注意到它使用了类EGL10来处理opengl。
看着android平台的javadoc,我注意到还有一个有趣的类EGL14,它的方法和常量几乎相同。
那么,EGL10EGL10之间有什么区别?

最佳答案

它们只是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中不是扩展版的EGL10api。所以你不能把两者的功能混为一谈。你得选一个,然后坚持下去。
不用说,基于11年的发布时间差异,egl 1.4要比egl1.0好得多。
现在您可能想知道为什么GLSurfaceView在其接口中使用EGL10引用。我不确定,但我强烈怀疑这是为了向后兼容。EGL14仅在api级别17中添加,而GLSurfaceView自api级别3以来一直存在。为了避免破坏旧的应用程序,他们几乎必须引入一个与GLSurfaceView相关的不同版本的EGL14
如果你想同时使用GLSurfaceViewEGL14,你必须跳过一些圈。例如,如果您在EGLConfig接口中有一个EGL10对象,并且希望相应的EGLConfig对象与EGL14接口一起使用,那么我找到的唯一方法是使用EGL10版本的eglGetConfigAttrib()从原始配置中提取配置ID,然后使用EGL14版本查询EGL14配置。打开。
当你开始混合这两个版本时,更有趣的是它们大多使用相同的方法名。这意味着您必须在处理这两个版本的源文件中使用限定名。

07-24 15:40