Android NDK C++ openGL ES 2 上下文提供糟糕的显示

Android NDK C++ openGL ES 2 context gives bad display

本文关键字:显示 上下文 C++ NDK openGL ES Android      更新时间:2023-10-16

我正在尝试在C++中使用NDK实现openGL ES 2.0游戏。我的测试设备是华硕Zenphone 5我很确定它支持openGL ES 2.0,因为它可以非常流畅地运行基于Play商店的openGL ES 2的游戏,以及androind NDK中的helloGl2示例。

当我调用日志猫时glCreateShader谷歌搜索给出了一个错误"调用未实现的 api",我发现这是因为该应用程序默认使用 openGL ES 1 上下文。

因此,我从以下位置修改了 EGL 上下文创建代码:

context = eglCreateContext(display, config, NULL, NULL);

EGLint contextAttrs[] = {
        EGL_CONTEXT_CLIENT_VERSION,2,EGL_NONE
};
context = eglCreateContext(display, config, NULL, contextAttrs);

现在这给出了一个不同的错误

 E/libEGL(12670): validate_display:257 error 3008 (EGL_BAD_DISPLAY)

但是,当我在Galaxy s3(GT-I9100)上测试它时,没有显示错误,但是该应用程序在调用带有致命信号SIGSEV的glCreateShader时崩溃

这是怎么回事?

如果要创建 ES 2 上下文,则还需要在 EGL 配置的属性中包含EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,仅向上下文属性添加EGL_CONTEXT_CLIENT_VERSION, 2是不够的。

另外,请确保您链接到 libGLESv2.so(-lGLESv2 LOCAL_LDLIBS),并确保不会意外链接到 libGLESv1_CM.so 中。(在同一过程中使用它们需要一些额外的技巧。