【问题标题】:Android NDK C++ openGL ES 2 context gives bad displayAndroid NDK C++ openGL ES 2 上下文显示不好
【发布时间】:2014-12-26 20:14:50
【问题描述】:

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

当我打电话给glCreateShader log cat 时,我通过谷歌搜索了一下给出了一个错误“称为未实现的 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) 上对其进行测试时,没有出现 BAD DISPLAY ERROR ,但应用程序在使用致命信号 SIGSEV 调用 glCreateShader 时崩溃

这是怎么回事?

【问题讨论】:

  • 你是如何设置display的值的?您可能还想显示config 选择代码。即使该错误确实表明问题出在显示器上。
  • 是的,对不起,我刚刚意识到我也应该发布显示代码,因为最终问题出在 eglchooseconfig 属性(EGL_RENDERABLE_TYPE、EGL_OPENGL_ES2_BIT)中,无论如何感谢您的输入

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


【解决方案1】:

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

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

【讨论】:

  • 噢,真棒!那成功了!我必须添加 EGL_RENDERABLE_TYPE、EGL_OPENGL_ES2_BIT 并且所有错误都消失了
  • 那会是什么例子,链接到 GLESv2 但只使用 GLES 1 API(并使用 EGL 设置 GLES 1 上下文,我猜)?当我在 NDK 示例目录中搜索 GLESv2 时,我没有找到任何未正确标记的示例。
  • 如果您指的是 NDK 中的 native-activity 示例,它仅链接到 GLESv1_CM。
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多