【发布时间】:2013-09-27 03:05:21
【问题描述】:
我的程序在两个Activities 之间切换,每个GLSurfaceView 膨胀一个使用VBO 的派生GLSurfaceView。在两个Activity之间来回切换几次后,程序崩溃并抛出以下异常。每次有上下文切换时,VBO 缓冲区都会被删除,onStop() 会被调用,并且下一个 Activity 的GLSurfaceView 的新实例会被膨胀。我将程序重构为仅在GLSurfaceView 和Activity 之一上运行,并且该程序似乎可以正常运行。只使用多边形和颜色,没有纹理。这是伤害:
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();作为你们中的一员,一次获得实例