【问题标题】:Kindle Fire hitches and texture corruption at 60 fpsKindle Fire 在 60 fps 时出现故障和纹理损坏
【发布时间】:2012-06-04 05:59:54
【问题描述】:

这似乎是 Fire 特定的 GPU 问题,如果有任何帮助或建议,我将不胜感激。

在大多数情况下,我的塔防游戏能够以 60 fps 的速度运行,即使有几十个敌人和塔都向各个方向射击。然而,在看似随机的时间(即使没有发生任何事情——比如坐在主菜单上),间隔非常均匀的 400 毫秒连接会以大约 2-3 秒的间隔暂停游戏。然后突然间卡顿消失了,16x16 像素的纹理块将随机不渲染。

这两个故障似乎是相互排斥的,就像我所说的,只需启动游戏并从主菜单导航到关卡选择屏幕即可触发,其中加载的资源最少,游戏逻辑也很少发生。我使用 OpenSL 来制作音效,我注意到禁用 sfx 会将挂接持续时间更改为 280 毫秒。

然后我手动将帧速率从 60 fps 强制到 30 fps(通过在帧滴答循环中插入睡眠),两个故障都完全消失了。

这是一个演示纹理未渲染的屏幕截图。此错误发生在所有 32 位渲染表面中,无论深度/模板值如何,以及颜色清除是打开还是关闭。

谢谢!

编辑:实际上,显然纹理闪烁发生在任何帧速率下,但是,在 40 到 45 fps 之间的某个地方,400 毫秒的障碍消失了。

【问题讨论】:

  • 其他 FPS 限制呢?例如45/75
  • 实际上,显然纹理闪烁发生在任何帧速率下,但是,在 40 到 45 fps 之间的某个地方,400 毫秒的障碍消失了......它们非常肯定相关,但在 60 fps 时并不完全相互排斥.他们的出入发生率高度相关。

标签: android gpu


【解决方案1】:

好的,这是一个非常微妙的驱动程序错误,不一定特定于 Kindle Fire。我希望能帮助某人在未来避免类似的痛苦。我已经清楚地概述了症状,但错误的来源来自设置剪刀矩形。

本质上,我们有许多可以放大和缩小屏幕的动画 UI 元素,因此我们使用剪式矩形变得非常时髦。触发器似乎将剪式矩形设置在屏幕外,然后水平渲染到矩形之外。这样做会使 GPU 处于某种微妙的搞砸状态,这种状态似乎不会立即显现,但会逐渐变得更糟。

此外,这似乎修复了我们在 Droid RAZR 上遇到的一个错误,它具有与 Fire 相同的 GPU。该错误是我们在 logcat 中看到的游戏中的 5 秒冻结:

W/SharedBufferStack(14208): waitForCondition(LockCondition) timed out (identity=173, status=0). CPU may be pegged. trying again.

显然,这些类型的错误很难追踪并确定确切的条件,但它肯定与在屏幕外剪式矩形之外进行渲染有关。

【讨论】:

  • 要明确一点:解决卡顿、冻结和渲染异常的方法是在调用 glScissor() 之前将剪刀矩形剪裁到屏幕上。
猜你喜欢
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多