【问题标题】:Android NDK, Opengl es 2, VBO crashes the renderAndroid NDK,Opengl es 2,VBO 使渲染崩溃
【发布时间】:2016-09-04 03:38:57
【问题描述】:

好的,这是我第四次发布此问题。这是一个复杂的问题,我知道。

我会解释所有的,因为我不知道什么是重要的或不重要的,而且这个问题看起来像是代码中的一些愚蠢的东西,我没有意识到。

我一直在用 c++ NDK 中的渲染部分为 Android 开发游戏引擎,几天前,我对此没有任何问题,我可以在任何 android 设备上正确看到我的游戏,然后,我编写了更多代码,更新了Android Studio 从 1.5.2 到 2.1.3,将实验性 gradle 插件从 0.7.0 更新到 0.7.3,一直以来我只在 Nexus 6p 和 android 6 上测试了该应用程序,一切都很好,但是,哦,哦,当我在 Android 4 上测试它时,它什么也没显示,当我在 Android 5 上测试时,它显示了一些东西,但没有正确显示。

现在,我开始调试应用程序,我注意到当我使用 VBO 绘制时,渲染已损坏并且没有渲染任何内容,只有背景以我在 glClearColor 中设置的颜色显示。

所以当我绘制一个没有 VBO 的三角形时,它会正确渲染,但是如果我用 VBO 绘制相同的三角形甚至是另一个三角形,当我绘制一个没有 VBO 的三角形时,渲染会崩溃并且只显示背景,然后我用VBO画了另外一个,我注意到不管我调用glDrawElements,只要代码到达glBindBuffer,渲染器就会崩溃。

就是这样,我已经试过了:

  • 返回 Android Studio 1.5.2
  • 降级实验插件
  • 将 gradle 从 2.14.1 降级到 2.10
  • 我检查了所有 GLerrors,每次调用 gl,都返回 0。
  • 我什至开始从头开始编写所有代码(只是 c++ 代码),我得到了 结果一样

这快把我逼疯了。我在这上面浪费了 5 天时间,时间越长,我就觉得自己越笨。

这些是我的文件:

  • InterfaceJNI.h
  • InterfaceJNI.cpp
  • OpenGLMng.h
  • OpenGLMng.cpp
  • File.h
  • File.cpp
  • tmp.h
  • tmp.cpp
  • 我希望我能解决这个问题,并为这么微不足道的问题感到愚蠢。

    如果有任何想法或帮助,我将不胜感激,谢谢

    编辑: 问题可能不在代码中,可能在 gradle 设置中,或者在清单中,或者在 java 渲染器部分中,或者在任何地方,但我找不到在哪里

    【问题讨论】:

    • 你看过堆栈跟踪吗?它真的会在glBindBuffer() 中崩溃吗?
    • @reto 问题是堆栈跟踪没有显示任何东西,因为应用程序没有崩溃,代码继续运行,但使之前的所有入口无效

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


    【解决方案1】:

    好吧,我终于解决了。所以我发现了2个问题:

    1. 我需要明确的glBindBuffer(GL_ARRAY_BUFFER, 0); 来解绑缓冲区,我不知道 为什么我必须这样做,在这个阶段,因为,我不需要它 之前。
    2. GL_UNSIGNED_INT 似乎在 android 4 上不存在,再一次,我 不知道为什么现在它不存在,而几天前它存在。

    所以主要问题解决了,但是如果有人想解释更多为什么会这样,那就太好了。

    现在我要修改项目中的每个类,

    【讨论】:

    • 对索引使用GL_UNSIGNED_INT 在 ES 2.0 中不是标准的。它仅适用于支持OES_element_index_uint 扩展的设备。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多