我正在开发一个从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吗?我不明白为什么它在旧设备上工作正常,但在新设备上失败了。
答案 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");
然后尝试调用此入口点。