【问题标题】:Android -- GLSurfaceView EGL_BAD_ALLOCAndroid -- GLSurfaceView EGL_BAD_ALLOC
【发布时间】:2013-09-27 03:05:21
【问题描述】:

我的程序在两个Activities 之间切换,每个GLSurfaceView 膨胀一个使用VBO 的派生GLSurfaceView。在两个Activity之间来回切换几次后,程序崩溃并抛出以下异常。每次有上下文切换时,VBO 缓冲区都会被删除,onStop() 会被调用,并且下一个 Activity 的GLSurfaceView 的新实例会被膨胀。我将程序重构为仅在GLSurfaceViewActivity 之一上运行,并且该程序似乎可以正常运行。只使用多边形和颜色,没有纹理。这是伤害:


Java.lang.RuntimeException: createContext failed: EGL_BAD_ALLOC
   at android.opengl.GLSurfaceView$EglHelper
      .throwEglException(GLSurfaceView.java:1079)
   at android.opengl.GLSurfaceView$EglHelper
      .throwEglException(GLSurfaceView.java:1071)
   at android.opengl.GLSurfaceView$EglHelper
      .start(GLSurfaceView.java:927)
   at android.opengl.GLSurfaceView$GLThread
      .guardedRun(GLSurfaceView.java:1248)
   at android.opengl.GLSurfaceView$GLThread
      .run(GLSurfaceView.java:1118)

通过一些互联网研究,这是recognized bug。那么如何进行伤害控制呢? +200 表示朝着正确的方向轻推。

编辑:我解决了问题(我忘记在视图上调用 ONPAUSE() / ONRESTART())。第一个回答任何事情的人得到 +200。

【问题讨论】:

  • 为什么你会满足于 100 FPS,即使有问题的设备可能不支持它?没有 vsync 会浪费能量,渲染永远不会出现在屏幕上的帧。听起来好像启用了 vsync,这非常好。
  • 59 / 60 都很常见 :) 出于兴趣,您如何衡量 FPS?它可能实际上是 60,但由于您的测量技术,它略低于并且没有四舍五入。
  • 究竟是什么原因需要80?
  • 当然 :) 我会看看。顺便说一句,不要将任何时间安排在帧速率上,使用 (lastTimeMS + period)
  • 你应该让 Calendar ca = Calendar.getInstance();作为你们中的一员,一次获得实例

标签: android opengl-es


【解决方案1】:

令人讨厌的是,我还不能发表评论,但我认为你的意思是 onResume,而不是 onRestart。您的 Activity 可以暂停而不停止,这会导致 onPause,但不会导致 onRestart。

这张图片(来自Activity docs)很好地展示了这个活动的生命周期:

简而言之,记得将 onPause 和 onResume 传递给你的 super 和 GLSurfaceView。

来自http://android-developers.blogspot.com/2009/04/introducing-glsurfaceview.html

public class ClearActivity extends Activity {
    ... snip ...

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }

    private GLSurfaceView mGLView;
}

【讨论】:

  • 现在轻松赚到+200
  • 猜猜这意味着我下次没有理由发表答案而不是发表评论......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
相关资源
最近更新 更多