0

我已经懒洋洋地追了一段时间的崩溃,但现在应该找到它:Chrome 死于它的“Snap!” 一段时间后在 WebGL 页面上显示消息,而 Firefox 运行没有问题。

在通过以下片段进行大约 27,000 次迭代后,它在创建时捕捉Float32Array

webglContext.bindBuffer (webglContext.ARRAY_BUFFER, buffer.webglBuffer);
typedArray = new Float32Array (buffer); <- SNAP!
//typedArray = new Float32Array (buffer); (1)
webglContext.bufferData (webglContext.ARRAY_BUFFER, typedArray, webglContext.STATIC_DRAW);
//typedArray = null; (2)
webglContext.vertexAttribPointer (attribute, buffer.itemSize, webglContext.FLOAT, false, 0, 0);

如您所见,我正在绑定一个先前创建的(一次)webgl 缓冲区,将本机数组转换为类型化数组,将类型化数组传递给 webgl,最后告诉 webgl 使用哪个属性。

现在围绕着这个奇怪的事实:

  • Firefox 连续运行该页面数小时而不会中断,Chrome 会在几分钟后崩溃 - 大约 27,000 次迭代(成功的迭代次数差异很大)
  • 我对顶点位置、颜色、纹理、纹理坐标有不同的缓冲区。Chrome 总是在位置缓冲区崩溃,我在绘图周期中首先将其传递给 webgl。
  • 缓冲区非常大,大约。位置缓冲区中的 150.000 个数字
  • 在 DevTools 中我没有看到任何可疑的东西(不过我是这个工具的新手)
    • 时间轴>内存在 1.5 秒内从 10 MB 增加到 18 MB,然后回落到 10 MB,当它上升到大约 10 MB 时发生崩溃。又是 14 MB
    • 堆>快照>比较显示添加/删除了一些数字(相等的计数)
  • 通过取消注释 (2) 使用后清除typedArray无济于事
  • 通过取消注释(1)将工作加倍解决了问题

我偶然发现了最后一个事实,因为我想减少等待崩溃的时间 - 但我从未见过两次创建类型化数组时发生崩溃。

使用 Chrome 31.0.1650.63 m,并添加 webgl 标签,因为我认为这可能与数据量有关......

感谢您的任何想法...

4

0 回答 0