Opengl es Android-OpenGL ES和glMapBufferOES/glUnmapBufferOES的使用

Opengl es Android-OpenGL ES和glMapBufferOES/glUnmapBufferOES的使用,opengl-es,android-ndk,opengl-es-2.0,genymotion,Opengl Es,Android Ndk,Opengl Es 2.0,Genymotion,我正在尝试将我的glGetBufferSubData调用转换为Android OpenGL ES,但我找不到方法。例如,我添加了以下内容: #define GL_GLEXT_PROTOTYPES <--- #include <EGL/egl.h> #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> ... 然而,我的回报再次是崩溃(上面的GL\u WRITE\u ONLY\u OES不是打字错误;

我正在尝试将我的
glGetBufferSubData
调用转换为Android OpenGL ES,但我找不到方法。例如,我添加了以下内容:

#define GL_GLEXT_PROTOTYPES      <---
#include <EGL/egl.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
...
然而,我的回报再次是崩溃(上面的
GL\u WRITE\u ONLY\u OES
不是打字错误;事实上
GL\u READ\u ONLY\u OES
根本不存在)。 我没有尝试使用
glGetBufferSubDataOES
,因为在我的Android 4.4.4 KitKat上没有一个
GL\u x\u vertex\u buffer\u对象
扩展。
我用的是Genymotion。我这边是否有任何明显的错误或特定的扩展名需要检查
glMapBufferOES

您需要检查的扩展名是。如果在
glGetString(GL\u扩展名)
的结果中显示了这一点,则您的设备支持该扩展名。

Thanx获取答案。如果也找不到扩展,是否还有其他从缓冲区检索数据的选项,或者只有glMapBuffer和glGetBufferSubData?我认为在ES 2.0中没有合理的方法。您可能会进行一些疯狂的渲染,最终将顶点数据写入帧缓冲区,并将其读回。简单地保留存储在VBO中的数据副本,而不是稍后将其读回,这可能是最好的方法。无法窥视数据的危险(例如,没有支持的扩展,特别是嵌入式系统)令人担忧:)Thanx
PFNGLMAPBUFFEROESPROC glMapBufferOES = NULL;
PFNGLUNMAPBUFFEROESPROC glUnmapBufferOES = NULL;

...

glMapBufferOES = (PFNGLMAPBUFFEROESPROC) eglGetProcAddress("glMapBufferOES");
glUnmapBufferOES = (PFNGLUNMAPBUFFEROESPROC) eglGetProcAddress("glUnmapBufferOES");

...

if (glMapBufferOES && glUnmapBufferOES) {
   vector<float> v(buffer_size);
   float* mv = (float*)glMapBufferOES(GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
   memcpy(&v[0], &mv[0], buffer_size * sizeof(float));
   glUnmapBufferOES(GL_ARRAY_BUFFER);
}