【问题标题】:Android opengl issue (weird)Android opengl问题(奇怪)
【发布时间】:2013-01-25 23:19:24
【问题描述】:

这是一个奇怪的问题。 我有一个基本应用程序(仪表板,...)和一个 GLSurfaceview,我在其中绘制 3D 对象和纹理。一切都很顺利,但是当我回到其他活动时,嗯,截图胜过文字:

这是之前的仪表板

这是opengl:

当我回击时,这是我的仪表板:

如您所见,图像和文字都消失了。我在 4.0+ 上运行,所以我想这是因为 android 使用 opengl 绘制元素,因为它在我的 2.2 设备上没有这样做。

您知道是什么原因造成的吗? 顺便说一句,当我不使用纹理时,它不会发生。

【问题讨论】:

    标签: android opengl-es textures


    【解决方案1】:

    好的,我发现我有什么问题。我正在删除 UI 线程 上的纹理,方法是在片段的 onPause();

    上调用 mTextureManager.deleteAllTextures()

    我通过删除我的纹理来解决它

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

    希望这会帮助其他人......

    【讨论】:

    • 但这似乎是一个糟糕的选择,因为它会减慢您的应用速度。
    • 有时您必须将其关闭,请参阅developer.android.com/guide/topics/graphics/hardware-accel.html 了解不支持的操作列表。有些东西告诉你这不是你的问题,而且这里还有其他一些错误。如果您在不同的非 glsurfaceview 活动之间转换,那么您会看到同样的问题吗?有一次我遇到了一个错误,我在 glsurfaceview 被破坏时访问了顶点缓冲区并看到了类似的问题。检查日志窗口是否有打开 gl 错误。
    • @nathan 谢谢你的评论。如果我转换到另一个活动,是的,它仍然是坏的。在 logcat 中没有看到任何错误,但我明天会检查它。我加载的纹理越多,应用程序损坏的越多......
    【解决方案2】:

    如果您正在使用纹理和顶点缓冲区,我相信当您离开视图时它们会被清除。如果您收到 SurfaceDestoyed 或 SurfaceCreated 调用,那么我相信您必须重新创建纹理和 vbo 并将它们重新加载到显卡。

    有一次我遇到了类似的问题,我引入了一个搞砸了 open gl 状态的错误。然后,当我进行另一项活动(硬件加速)时,该活动也一团糟。就我而言,我必须找到我制作的 open gl 错误并修复它。

    【讨论】:

    • 好吧,问题不在于我的纹理,因为 opengl 运行得很好。我有一个经典的activityA 包含imageviewsbuttons 等,还有一个activityB 包含我的GLSurfaceview。当我从ActivityB返回时出现问题,所有应用程序都已损坏,带有黑色方块等。希望我足够清楚。
    【解决方案3】:

    您的问题可能与我的有关吗?阅读以确保它不是:Text only thing visible after pausing GLSurfaceView on Galaxy S3 - Text blur when moved. No button backgrounds

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

    如果您想测试:在 android 清单中禁用硬件加速应用程序范围。 如果您的问题消失了,很可能与我遇到的问题相同。阅读我对自己问题的回答,了解如何在保持硬件加速开启的情况下解决此问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多