是否需要 OpenGL 函数加载器?
Is OpenGL function loader needed?
在桌面操作系统上,GLEW、GLAD 等 OpenGL 函数加载器用于在运行时加载函数。但是 Android 呢?函数是如何加载的?我查看了一些应用程序,它们似乎都依赖于 EGL
和 GLES
。但是 AFAIK EGL
不是一个加载库,而是一个接口。好吧,一个接口到一个接口作为GLES
实际上是一个接口。
这引出了另一个问题:为什么 Android 使用 EGL
而通常不在桌面上使用?
当我稍微使用 android 时,您可以 link 到 GLES 2.0 库,或者您可以 link 到 GLES 3.0 库,就像它们一样为您提供函数指针。左右。如果您使用 GLES3.0,但 phone 您 运行 它只支持 2.0,您的应用将无法加载。为了解决这个问题,我总是 link 转至 GLES 2.0,并使用 eglGetProcAddress 编写我自己的函数加载器以提取 GLES3.0 API(如果可用)。这几乎就是 windows/linux 上函数加载器的工作方式(使用 wglGetProcAddress 或 glxGetProcAddress)。
GLES 一直是完整桌面 GL 的精简版。它始终以完整 API 的较小子集为目标(删除所有遗留问题),这反过来在一定程度上简化了 OpenGL 驱动程序代码,这反过来应该会减少内存使用并节省一点电池寿命.基本上,它只是更适合在关注电池寿命的低功率系统上使用。
How come Android uses EGL when it is generally not used on desktops?
它在 Android 之前广泛用于嵌入式电子设备,所以我怀疑它是新智能手机阻力最小的路径 OS,因为所有 GPU 供应商都已经实现了 EGL。
在桌面操作系统上,GLEW、GLAD 等 OpenGL 函数加载器用于在运行时加载函数。但是 Android 呢?函数是如何加载的?我查看了一些应用程序,它们似乎都依赖于 EGL
和 GLES
。但是 AFAIK EGL
不是一个加载库,而是一个接口。好吧,一个接口到一个接口作为GLES
实际上是一个接口。
这引出了另一个问题:为什么 Android 使用 EGL
而通常不在桌面上使用?
当我稍微使用 android 时,您可以 link 到 GLES 2.0 库,或者您可以 link 到 GLES 3.0 库,就像它们一样为您提供函数指针。左右。如果您使用 GLES3.0,但 phone 您 运行 它只支持 2.0,您的应用将无法加载。为了解决这个问题,我总是 link 转至 GLES 2.0,并使用 eglGetProcAddress 编写我自己的函数加载器以提取 GLES3.0 API(如果可用)。这几乎就是 windows/linux 上函数加载器的工作方式(使用 wglGetProcAddress 或 glxGetProcAddress)。
GLES 一直是完整桌面 GL 的精简版。它始终以完整 API 的较小子集为目标(删除所有遗留问题),这反过来在一定程度上简化了 OpenGL 驱动程序代码,这反过来应该会减少内存使用并节省一点电池寿命.基本上,它只是更适合在关注电池寿命的低功率系统上使用。
How come Android uses EGL when it is generally not used on desktops?
它在 Android 之前广泛用于嵌入式电子设备,所以我怀疑它是新智能手机阻力最小的路径 OS,因为所有 GPU 供应商都已经实现了 EGL。