Android OpenGL ES ---支持所有扩展吗?

fie*_*sor 4 android opengl-es

我真的很困惑OpenGL ES扩展如何在Android上运行,包括Java API和NDK的API.

首先,我来自桌面上的vanilla OpenGL世界.在那个世界中,扩展非常直观地加载和使用.首先检查GL_EXTENSIONS以查看系统是否公布了您需要的扩展,然后通过wglGetProcAddress,glXGetProcAddress或dlsym动态加载扩展的入口点(取决于您是分别使用WinAPI,X11还是OS X) .

但是现在,今天我刚刚第一次看到android上的GL11Ext界面,位于:http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html

我的第一个想法是"哇,什么!?所以所有的扩展都是由deafult加载!?" 那么,如果您尝试使用未由系统公布的扩展,会发生什么?

现在,我发现更令人费解的是通过NDK的OpenGL ES扩展,这对我来说似乎完全没用(除非有人可以向我解释如何加载它们).我需要针对android 2.2,所以我使用的是android-8 NDK平台头文件.当我看到android-8的标题时,我确实找到了GLES/glext.h和GLES2/gl2ext.h,但是现在发现了eglGetProcAddress()!

我想glext.h和gl2ext.h确实公开了扩展的函数声明,但是如果你要告诉我我应该使用它们那么我仍然会感到困惑.因为在这种情况下我们回到了关于Java API的问题,"所以所有扩展都默认加载到NDK的ES API中?"

Rom*_*Guy 7

Java API中提供的唯一扩展是所有Android设备上都必须存在的扩展.这就是为什么您不会在Java API中找到特定于供应商的扩展.最新的NDK在android-9头文件中提供了eglGetProcAddress.

  • 我没有通过经验发现它:我在 Google 的 Android 团队工作,主要负责 UI 框架和图形堆栈 :) 对于 NDK,这意味着 eglGetProcAddress 仅可作为公共 API 与 android-9 一起使用。您可能可以在早期版本的 Android 上使用它,但不能保证它会起作用。对于在 gl2ext.h 中声明的扩展,您应该始终首先查询支持的扩展列表。 (2认同)