最近,我从使用glBufferData切换到glMapBufferRange,这使我可以直接访问GPU内存,而不是将数据从CPU复制到GPU的每一个帧。
这很好,在OpenGL ES 3.0中,每帧执行以下操作:
glMapBufferRange获取一个指向GPU缓冲区内存的指针。glUnmapBuffer取消对缓冲区的映射,以便我可以呈现。但是一些安卓设备可能至少有OpenGL es3.1,据我所知,也可能有存储扩展(如果是错误的扩展,请纠正我?)使用此扩展,可以设置持久缓冲区指针,这些指针不需要使用GL_MAP_PERSISTENT_BIT标志映射/取消对每个帧的映射。但是,在如何访问这些功能方面,我无法在网上找到更多的信息。
如何在安卓上使用glMapBufferRange ES 3.1中的GL_MAP_PERSISTENT_BIT设置来调用OpenGL呢?
检查glGetString(GL_EXTENSIONS)似乎确实表明我的设备上存在扩展,但我似乎找不到GL_MAP_PERSISTENT_BIT在哪里,例如在GLES31或GLES31Ext中,我只是不知道如何继续。
发布于 2021-05-10 21:35:25
用于OpenGL ES的标准Android绑定只公开所有在Android上实现都支持的扩展。如果希望公开不那么普遍可用的供应商扩展,则需要使用与NDK一起编译的本机代码中的eglGetProcAddress()来获取入口点,从而提交自己的JNI绑定。
对于这个,您需要扩展入口点glBufferStorageEXT()。
https://stackoverflow.com/questions/67460102
复制相似问题