6

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

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

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

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

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

谢谢!

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

等级选择画面

主菜单

4

1 回答 1

2

好的,这是一个非常微妙的驱动程序错误,不一定特定于 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.

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

于 2012-05-30T23:56:59.433 回答