Android:在glMapBufferOES中为OGL ES.1.1调用未实现的OpenGL ES API

时间:2014-07-23 08:41:47

标签: c++ opengl-es android-ndk opengl-es-1.1

我正在开发一个从iOS到Android NDK的OpenGL ES 1.1应用程序的端口。 我用我的Nexus S设备测试了端口并且工作正常,但是当我在较新的设备上测试它(例如Nexus 4和5,但对于其他更新的设备,它发生的情况相同)那里出现了错误

Called unimplemented OpenGL ES API

致电时:

vbo_buffer = (GLchar*)glMapBufferOES(GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES);

对于其他gl调用,没有问题。

详细信息:

我将OpenGL ES 1.1与glext包一起使用。如果我打印opengl版本,它会说:

07-23 10:32:51.804: D/ES1Renderer(32097): OpenGL ES Version: OpenGL ES-CM 1.1

在Android.mk中:

LOCAL_LDLIBS    := -llog -lGLESv1_CM -lz

在清单中:

<uses-feature android:glEsVersion="0x00010001" android:required="true" />

我使用从java到C / C ++ OpenGL的GLSurfaceView方法,这里是初始化

public void initGLView() {
    glView = new EAGLView(getActivity(), null);

    glView.setEGLContextClientVersion(1);
    glView.setRenderer(new ES1Renderer(glView));
}

成为GLSurfaceView和ES1Renderer的EAGLView子类正在实现GLSurfaceView.Renderer。

还有什么我应该设置告诉设备使用OGL ES 1.1吗?我不明白为什么它在旧设备上工作正常,但在新设备上失败了。

1 个答案:

答案 0 :(得分:0)

您正在谈论的切入点在OpenGL ES 1.1中不可用。但是,可以使用GL_OES_mapbuffer扩展程序。我建议你查询glGetString(GL_EXTENSIONS)字符串GL_OES_mapbuffer。然后,如果可用,请使用:

typedef void * (*MapBufferOESType)(GLenum, GLenum);
MapBufferOESType MapBufferOES = (MapBufferOESType)eglGetProcAddress("MapBufferOES");

然后尝试调用此入口点。