2011-08-05 41 views
0

对于我们在Android OS上的游戏,我们主要使用ndk来编写我们的游戏和一个薄的Java包装,因此我们可以支持所有使用gles 2.0硬件的设备。在gl上下文销毁后的空白屏幕onResume(Android)

我们的实现是非常标准的,使用GLSurfaceView的覆盖我们: *创建/恢复的C游戏++部分onSurfaceChanged(), *渲染onDrawFrame(), *告知发动机大约在destroyContex失去GL上下文(),通常在应用程序暂停或遭到破坏时发生。当onSurfaceChanged()和第一个onDrawFrame之间的时间间隔,虽然屏幕是黑色的,但是我们可以通过调用onSurfaceChanged()和onDrawFrame之间的时间间隔来重新加载gl上下文(onSurfaceChanged但我注意到有不少3D游戏没有这种问题(例如Gun Bros),他们也似乎没有重新加载资源(除非他们拥有所有内存并快速重新加载它们)。

有关这是为什么发生的任何信息?

回答

0

只是一个想法,但如果你在使用glConadPixels或类似的方法在destroyContext()上转储屏幕,然后你在onSurfaceChanged()上做的第一件事是上传并绘制,你将在用户之前显示一个有效的图像你的第一个onDrawFrame。

+0

不幸的是,'onDestroyContext'被称为_after_上下文已被销毁,所以任何的gl调用都会在此时产生错误。我开始认为每个人都在使用一个经过修改的GLSurfaceView,最终证明它很容易做到;但最终是可能引发问题的黑客攻击。 – MichalisB