首页 > 解决方案 > 如何在 Android 上的 OpenGL ES 3.1 中使用 GL_MAP_PERSISTENT_BIT?

问题描述

我最近从 using 切换glBufferDataglMapBufferRangewhich 让我可以直接访问 GPU 内存,而不是每帧都将数据从 CPU 复制到 GPU。

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

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

我如何在 Android 上的 OpenGL ES 3.1 中glMapBufferRange使用set 调用?GL_MAP_PERSISTENT_BIT

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

标签: androidopengl-esopengl-extensions

解决方案


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

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


推荐阅读