2014-12-10 2 views
1

glGetBufferSubData 전화를 으로 변환하려고합니다. Android OpenGL ES을 사용할 수 없습니다. 따라서 가정 glMapBufferOESglUnmapBufferOESxOES 기능을 포함Android - OpenGL ES 및 glMapBufferOES/glUnmapBufferOES 사용

#define GL_GLEXT_PROTOTYPES  <--- 
#include <EGL/egl.h> 
#include <GLES2/gl2.h> 
#include <GLES2/gl2ext.h> 
... 

예를 들어,이 추가. 실제로 이러한 기능은 발견되어 정상적으로 컴파일되지만 APK는 충돌합니다. 나는 다음과 같이 포인터로 그들을 얻을하기로 결정

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); 
} 

아직 다시 한번 내 보상이 충돌이다 (위의 GL_WRITE_ONLY_OES 오타 아닌, 사실 GL_READ_ONLY_OES 단순히 존재하지 않는다). 내 Android 4.4.4 KitKat에 하나의 GL_x_vertex_buffer_object 확장자가 없기 때문에 glGetBufferSubDataOES을 사용하려고하지 않습니다. Genymotion을 사용하고 있습니다. 내 측면에 특정 오류가 있거나 glMapBufferOES을 확인할 수있는 특정 확장 프로그램이 있습니까?

답변

1

확인해야 할 확장 프로그램은 GL_OES_mapbuffer입니다. 결과가 glGetString(GL_EXTENSIONS) 인 경우 장치가 확장을 지원합니다.

+0

대답은 고맙습니다. 확장이 발견되지 않는 경우 버퍼 또는 glMapBuffer 및 glGetBufferSubData에서 데이터를 검색하는 다른 옵션이 있습니까? –

+0

나는 ES 2.0에서 합리적인 방법이 있다고 생각하지 않는다. 프레임 버퍼에 버텍스 데이터를 쓰는 것을 끝내는 미친 렌더링을 할 수 있습니다. 나중에 다시 읽는 대신 VBO에 저장 한 데이터의 복사본을 보관하는 것이 훨씬 쉽습니다. –

+0

아마도 이것이 최선의 방법 일 것입니다. 데이터를 엿볼 수있는 위험이 있습니다 (특히 임베디드 시스템에서 지원되지 않는 확장 기능은 없습니다). 걱정됩니다. Thanx –