安卓OpenGL问题(奇怪)

6
这是一个有些奇怪的问题。我有一个基本应用程序(仪表板,...)和一个GLSurfaceview,在其中我绘制3D对象和纹理。一切都很好,但当我回到其他活动时,嗯,截图比文字更好:
这是之前的仪表板: Before 这是OpenGL: opengl 而这是我按下“返回”键后的仪表板: enter image description here 正如你所看到的,图片和文本都不见了。我运行的是4.0+版本的Android系统,所以我认为这是因为Android使用OpenGL来绘制元素,而在我的2.2设备上不会发生这种情况。
你有什么想法是什么导致了这个问题吗? 顺便说一下,如果我不使用纹理,这种情况就不会发生。
3个回答

6

好的,我发现了我的问题。我在UI线程上调用mTextureManager.deleteAllTextures()从我的片段的onPause();中删除纹理。

我通过使用一个

mSurfaceView.queueEvent(new Runnable(){
    //delete all textures here
}

希望这篇文章能帮助其他人...


1
但那似乎是一个不好的选择,因为它会减缓您的应用程序速度。 - Martin
1
有时候你必须关闭它,参见http://developer.android.com/guide/topics/graphics/hardware-accel.html以获取不支持的操作列表。有些东西告诉我这不是你的问题,还有其他的bug在这里。如果你从一个不同的非GLSurfaceView活动转换到另一个活动,那么你是否看到了相同的问题?有一次我遇到了一个bug,在GLSurfaceView被销毁时访问了一个顶点缓冲区,看到了类似的问题。检查日志窗口中的OpenGL错误。 - Nathan
@nathan 谢谢你的评论。如果我转换到另一个活动,是的,它仍然无法正常工作。在logcat中没有看到任何错误,但我明天会检查一下。加载纹理越多,应用程序就越容易崩溃... - AMerle

3
如果您正在使用纹理和顶点缓冲区,我认为当您离开视图时,它们会被清除。如果您收到SurfaceDestroyed或SurfaceCreated调用,则必须重新创建纹理和VBO,并将它们重新加载到图形卡中。
我曾经遇到过类似的问题,其中一个错误导致了OpenGL状态的混乱。然后,当我转到另一个活动(该活动是硬件加速的)时,该活动也变得一团糟。在我的情况下,我不得不找出我制造的OpenGL错误并修复它。

问题不在我的纹理上,因为OpenGL运行得很好。我有一个经典的activityA包含imageviewsbuttons等,还有一个包含我的GLSurfaceviewactivityB。当我从ActivityB返回时,所有的应用程序都会出现问题,有黑色的方块等。希望我表述清楚了。 - AMerle

2

您的问题是否与我的相关?请阅读以确保不是:在Galaxy S3上暂停GLSurfaceView后只能看到文本 - 移动时文本模糊。没有按钮背景

我的问题是在UI线程上执行openGL功能,这会破坏用于硬件加速的openGL上下文。

如果您想进行测试:在Android清单中禁用应用程序范围内的硬件加速。 如果您的问题消失,则很可能是我遇到的相同问题。阅读我的答案以了解如何在保留硬件加速的同时解决此问题。

<application android:hardwareAccelerated="false" ...>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接