【发布时间】:2023-03-19 19:59:02
【问题描述】:
为了试验 WebGL,我编写了一个在画布上渲染一堆 2D 精灵的脚本。所有的精灵都只是纹理矩形。每个矩形上的纹理都是相同的。它们在每一帧中随机改变位置。
我在 Windows 上看到一个奇怪的问题:在 Chrome 中,帧速率几乎比 Firefox 低 2 倍(在 Mac 上,Chrome 和 Firefox 具有相似的帧速率)。 Chrome 的 Windows 版本中是否存在影响 WebGL 性能的已知问题?
另一个问题是,当我将精灵计数从大约 500 增加到 5000 时,帧速率从几乎每秒 60 帧下降到每秒 20-30 帧。如果我错了,请纠正我,但是对于现代显卡来说,渲染 5000 个纹理四边形不应该是一个相对较轻的工作量吗?以 30 fps 运行的现代游戏的多边形数量可能要高得多。
我的渲染是这样工作的:
我创建了三个 WebGL 缓冲区:用于顶点位置、纹理坐标和顶点索引。这些缓冲区中的每一个都有足够的空间来容纳 5000 个精灵。我还创建内存类型数组来保存顶点位置、纹理坐标和索引(
Float32Array用于顶点和纹理坐标,Uint16Array用于索引)。在每一帧上,添加精灵时,我将顶点、纹理坐标和索引数据写入内存数组(此时,不会发生 WebGL 调用)。
在帧结束时,我使用
bufferSubData将内存数组中的数据上传到WebGL 缓冲区并调用drawElements。
我做错了吗? 5k精灵的帧率不应该很高吗?最后,为什么 Chrome 的帧率比 Firefox 低?
【问题讨论】:
标签: google-chrome firefox graphics webgl