gl Context 销毁后 onResume() 空白屏幕,Android
对于我们在 Android 操作系统上的游戏,我们主要使用 ndk 来编写我们的游戏和一个瘦 Java 包装器,以便我们可以支持所有具有 gles 2.0 硬件的设备。
我们的实现非常标准,使用 GLSurfaceView 的覆盖我们: * 创建/恢复游戏的 C++ 部分 onSurfaceChanged(), * 渲染onDrawFrame(), * 通知引擎关于 destroyContex() 中丢失的 gl 上下文,这通常在应用程序暂停或被破坏时发生。
当重新创建 gl 上下文时(恢复时 - onSurfaceChanged()),我们将信息传回游戏并重新加载所有 gl 资源。在 onSurfaceChanged() 和第一个 onDrawFrame 之间的时间里,虽然屏幕是黑色的,但我注意到很多 3D 游戏不存在此类问题(例如《Gun Bros》),它们似乎也不会重新加载资源(除非它们拥有所有内存并快速加载回来)。
关于为什么会发生这种情况的任何信息?
For our game on Android OS we have been using the ndk mainly, to write our game and a thin Java wrapper so than we can support all devices with gles 2.0 hardware.
Our implementation is pretty standard, using the overrides of GLSurfaceView we:
* create/resume the c++ part of the game onSurfaceChanged(),
* render onDrawFrame(),
* inform the engine about lost gl Context at destroyContex() which usually occurs when the app pauses or gets destructed.
When the gl context gets recreated (when resuming - onSurfaceChanged()) we pass back the information to the game and reload all gl resources back in. During the time between onSurfaceChanged() and the first onDrawFrame though the screen is black but I have noticed quite a few 3D games that dont have this kind of a problem (i.e Gun Bros), they also dont seem to reload their resources (unless they have everything memory and quickly load them back in).
Any info on why is this happening?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只是一个想法,但如果你在 destroyContext() 上使用 glReadPixels 或类似的方法转储屏幕,然后你在 onSurfaceChanged() 上做的第一件事就是上传它并绘制,你将在第一个 onDrawFrame 之前向用户显示有效的图像。
Just an idea, but if you dump the screen with glReadPixels or similar on destroyContext(), and then the first thing you do on onSurfaceChanged() is to upload that and draw, you will show the user a valid image before your first onDrawFrame.