我正在开发从 iOS 到 Android NDK 的 OpenGL ES 1.1 应用程序的端口。 我用我的 Nexus S 设备测试了这个端口并且它工作正常,但是当我在较新的设备(例如 Nexus 4 和 5,但对于其他较新的设备它发生相同)上测试它时出现错误
调用未实现的 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
在 list 中:
<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 的 EAGLView 子类,ES1Renderer 正在实现 GLSurfaceView.Renderer。
我还应该设置什么来告诉设备使用 OGL ES 1.1 吗?我不明白为什么它在旧设备上运行良好,但在新设备上却失败了。
最佳答案
您所说的入口点在 OpenGL ES 1.1 中不可用。但是扩展名,GL_OES_mapbuffer可能可用。我建议您在 glGetString(GL_EXTENSIONS)
中查询字符串 GL_OES_mapbuffer
。然后如果它可用,使用:
typedef void * (*MapBufferOESType)(GLenum, GLenum);
MapBufferOESType MapBufferOES = (MapBufferOESType)eglGetProcAddress("MapBufferOES");
然后尝试调用这个入口点。
关于c++ - 安卓 : Called Unimplemented OpenGL ES API at glMapBufferOES for OGL ES. 1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24905759/