我正在制作一个OpenGL ES 1.1应用程序从iOS到Android NDK的端口。我用我的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与gleext包。如果我打印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" />
我使用GLSurfaceView方法从java到C/c++ OpenGL,这里是初始化
public void initGLView() {
glView = new EAGLView(getActivity(), null);
glView.setEGLContextClientVersion(1);
glView.setRenderer(new ES1Renderer(glView));
}
作为GLSurfaceView的子类,ES1Renderer实现了GLSurfaceView. renderer。
还有什么我应该设置告诉设备使用OGL ES 1.1?我不明白为什么它在旧设备上工作得很好,但在新设备上却失败了。
您正在谈论的入口点在OpenGL ES 1.1中不可用。然而,扩展GL_OES_mapbuffer可能可用。我建议您查询字符串GL_OES_mapbuffer
的glGetString(GL_EXTENSIONS)
。如果有的话,使用:
typedef void * (*MapBufferOESType)(GLenum, GLenum);
MapBufferOESType MapBufferOES = (MapBufferOESType)eglGetProcAddress("MapBufferOES");