如何在 Android 上的 OpenGL ES 3.1 中使用 GL_MAP_PERSISTENT_BIT?

How do I use GL_MAP_PERSISTENT_BIT in OpenGL ES 3.1 on Android?

我最近从使用 glBufferData 切换到 glMapBufferRange,这让我可以直接访问 GPU 内存,而不是每帧将数据从 CPU 复制到 GPU。

这在 OpenGL ES 3.0 中工作得很好,我每帧执行以下操作:

但某些 Android 设备可能至少具有 OpenGL ES 3.1,据我所知,可能还具有 EXT_buffer_storage 扩展名(如果扩展名有误,请纠正我?)。使用此扩展可以设置 persistent 缓冲区指针,不需要使用 GL_MAP_PERSISTENT_BIT 标志在每一帧中 mapping/unmapping。但是我无法弄清楚或在网上找到很多关于如何访问这些功能的方法。

如何在 Android 上使用 OpenGL ES 3.1 中设置的 GL_MAP_PERSISTENT_BIT 调用 glMapBufferRange

检查 glGetString(GL_EXTENSIONS) 似乎显示扩展存在于我的设备上,但我似乎无法在任何地方找到 GL_MAP_PERSISTENT_BIT,例如在 GLES31GLES31Ext 中,我只是不确定如何继续。

OpenGL ES 的标准 Android Java 绑定仅公开保证受 Android 上所有实现支持的扩展。如果您想公开不太普遍可用的供应商扩展,您需要滚动自己的 JNI 绑定,使用 eglGetProcAddress() 从使用 NDK 编译的本机代码中获取入口点。

对于这个,您需要扩展入口点 glBufferStorageEXT()