【问题标题】:Is OpenGL function loader needed?需要OpenGL函数加载器吗?
【发布时间】:2019-05-26 17:27:33
【问题描述】:
在桌面操作系统上,GLEW、GLAD 等 OpenGL 函数加载器用于在运行时加载函数。但是在安卓上呢?函数是如何加载的?我查看了一些应用程序,它们似乎都依赖于EGL 和GLES。但是 AFAIK EGL 不是加载库,而是一个接口。嗯,像GLES 这样的接口实际上是一个接口。
这就引出了另一个问题:在桌面上一般不使用EGL,Android 怎么会使用它?
【问题讨论】:
标签:
android
opengl-es
android-ndk
egl
【解决方案1】:
回到我使用 android 的时候,你可以链接到 GLES 2.0 库,也可以链接到 GLES 3.0 库,就好像它们为你提供了函数指针一样。是的。如果您使用 GLES3.0,但运行它的手机仅支持 2.0,您的应用将无法加载。为了解决这个问题,我总是链接到 GLES 2.0,并使用 eglGetProcAddress 编写自己的函数加载器来提取 GLES3.0 API(如果可用)。这几乎就是 windows/linux 上的函数加载器的工作方式(使用 wglGetProcAddress 或 glxGetProcAddress)。
GLES 一直是完整桌面 GL 的精简版。它始终针对完整 API 的较小子集(删除所有遗留的垃圾),这反过来又在一定程度上简化了 OpenGL 驱动程序代码,这反过来应该会减少内存使用并节省一点电池寿命。基本上,它更适合在关注电池寿命的低功耗系统上使用。
【解决方案2】:
在桌面上通常不使用 EGL 时,Android 怎么会使用它?
它在 Android 之前广泛用于嵌入式电子设备,因此我怀疑它对于新的智能手机操作系统来说阻力最小,因为所有 GPU 供应商都已经实现了 EGL。