Canvas游戏加热GPU但帧速率表现平稳

时间:2014-11-12 20:13:53

标签: html5 canvas html5-canvas rendering game-engine

我几个月来一直在使用HTML5 canvas开发游戏,而且我最近开始在macbook上进行一些开发工作。尽管帧速率平滑约为60fps,但几秒钟后游戏将macbook GPU推升至80摄氏度以上。我的桌面机器(其中有一个radeon 7870显卡)也注意到了一段时间GPU温度上升,粉丝开始。

考虑到这是一款没有任何特别奇特的效果或过多的2D游戏,以合理的分辨率运行,这似乎表明了一个主要的性能问题,因为它似乎对GPU征税很多。我已经实现了我推荐的许多性能优化(在整数坐标处渲染,没有阴影,在屏幕外预渲染)。对游戏进行分析显示,到目前为止,drawImage调用消耗的时间最多,但是如果这是热量问题的原因,我预计帧速率下降和/或其他迹象表明性能滞后 - 但帧速率是在macbook上很漂亮,没有任何延迟。

为了尝试解决这个问题,我最近将游戏分成多个层,并使用预渲染来避免不必要的重绘图层,但这实际上使得帧速率明显变差,并且还没有解决热量问题一点都不在这一点上,我想知道我做出的任何其他优化是否会产生任何影响(例如,避免不必要的fillStyle更改),或者我是否会浪费我的时间?

如果有人可以提供建议或阐明这个问题的根源,我将不胜感激。一个相对基本的2D游戏不应该导致这种程度的GPU热量,理想情况下我需要它可以在笔记本电脑和低端设备上播放,最好不要惹火它们:)

1 个答案:

答案 0 :(得分:1)

尝试一个最小的项目,就像大多数引擎提供的项目模板一样。或者只是画一个精灵而不是别的。如果显示相同的行为,则无法对其执行任何操作。它也可能是引擎,驱动程序或浏览器错误。

您必须考虑到,在Windows桌面中,GPU通常处于空闲状态,并且绘制内容的工作量极少。即使在2D游戏中,所有着色器单元等都以全速运行以提供最佳性能。只有最新型号和驱动程序(嘿,尝试更新驱动程序!)允许GPU在确定游戏不需要以60 fps运行的全部性能时限制游戏。因此,即使它是一个简单的2D游戏,GPU仍然可能会启动,因为它会进入"将所有电源重新路由到着色器"模式。

另请注意,2D游戏本质上都是3D游戏,但具有固定或正交投影。从GPU的角度来看,2D游戏只是另一款3D游戏,恰好世界只会沿着两个轴进行翻译。