【问题标题】:Blank screen onResume() after gl Context destruction, Androidgl Context破坏后的空白屏幕onResume(),Android
【发布时间】:2011-08-05 14:31:59
【问题描述】:

对于我们在 Android 操作系统上的游戏,我们主要使用 ndk 来编写我们的游戏和一个精简的 Java 包装器,这样我们就可以支持所有具有 gles 2.0 硬件的设备。

我们的实现非常标准,使用 GLSurfaceView 的覆盖我们: * 创建/恢复游戏的 c++ 部分 onSurfaceChanged(), * 渲染 onDrawFrame(), * 在destroyContex() 通知引擎丢失gl Context,这通常发生在应用程序暂停或被破坏时。

当重新创建 gl 上下文时(恢复时 - onSurfaceChanged()),我们将信息传递回游戏并重新加载所有 gl 资源。在 onSurfaceChanged() 和第一个 onDrawFrame 之间的时间虽然屏幕是黑色的但我注意到很多没有这种问题的 3D 游戏(例如 Gun Bros),他们似乎也没有重新加载资源(除非他们拥有所有内存并快速加载它们)。

关于为什么会发生这种情况的任何信息?

【问题讨论】:

    标签: android opengl-es-2.0 android-ndk glsurfaceview


    【解决方案1】:

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

    【讨论】:

    • 不幸的是,onDestroyContext 是在上下文被销毁之后调用的,因此任何 gl 调用都会在此时构成错误。我开始认为每个人都在使用修改后的 GLSurfaceView,最终证明这很容易做到;但最终是一个可能引发问题的黑客攻击。
    猜你喜欢
    • 2012-05-06
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多