c++ - 安卓 : Called Unimplemented OpenGL ES API at glMapBufferOES for OGL ES. 1.1

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

我正在开发从 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/

相关文章:

Android NDK -stdio.h : sys/cdefs. h 未找到

android - 使用 NDK 时 Unresolved inclusion 错误

c++ - Win32 确定键盘何时连接/断开连接

C++如何将字符转换为十六进制

android - Scaled ModelMatrix 与漫射照明混淆

我可以在桌面上使用 OpenGL GLES 而不是完整的 OpenGL 吗?

android - QVideoFrame::map() 崩溃

c++ - QDialog show() 跟随返回结果 Action

c++ - 我可以使用我的部分数据作为锁吗?

ios - Monotouch - 显示一系列图像(太慢)