这是一个奇怪的。我有一个基本应用程序(仪表板,...)和一个 GLSurfaceview,我在其中绘制 3D 对象和纹理。一切都很顺利,但是当我回到其他活动时,嗯,截图胜过文字:
这是之前的仪表盘
这是opengl:
当我回击时,这是我的仪表板:
如您所见,图像消失了,文字也消失了。我在 4.0+ 上运行,所以我想这是因为 android 使用 opengl 绘制元素,因为它在我的 2.2 设备上没有这样做。
你知道是什么原因造成的吗?顺便说一句,当我不使用纹理时,它不会发生。
好的,我发现我有什么问题。我通过调用我的片段来删除UI Thread上的纹理mTextureManager.deleteAllTextures()
onPause();
我通过删除我的纹理来解决它
mSurfaceView.queueEvent(new Runnable(){
//delete all textures here
}
希望这会帮助其他人......
如果您正在使用纹理和顶点缓冲区,我相信当您离开视图时它们会被清除。如果您收到 SurfaceDestoyed 或 SurfaceCreated 调用,那么我相信您必须重新创建纹理和 vbo 并将它们重新加载到显卡。
有一次我遇到了类似的问题,我引入了一个搞砸了 open gl 状态的错误。然后,当我进行另一项活动(硬件加速)时,该活动也一团糟。就我而言,我必须找到我制作的 open gl 错误并修复它。
你的问题可能和我的有关吗?阅读以确保它不是:在 Galaxy S3 上暂停 GLSurfaceView 后仅显示文本 - 移动时文本模糊。没有按钮背景
我的问题是在 UI 线程上执行 openGL 功能,这破坏了用于硬件加速的 openGL 上下文。
如果要测试:在 android 清单中禁用硬件加速应用程序范围。如果你的问题消失了,那很可能是我遇到的同样的问题。阅读我对自己问题的回答,了解如何在保持硬件加速的同时解决此问题。
<application android:hardwareAccelerated="false" ...>