WebGL非常好且异步,可以发送一长串渲染命令而无需等待它们完成。然而,如果出于某种原因您确实需要等待渲染完成,那么必须使用 gl.finish()
同步方式。毫无疑问,如果 gl.finish()
接受回调并立即返回将是更好的选择。
问题: 有可靠的仿真方法吗?
用例:我正在将大量顶点渲染到一个大型离屏画布上,然后使用 drawImage
将这个大型画布的部分复制到页面上的小型画布上。 我实际上没有使用 gl.finish()
,但是 drawImage()
看起来效果相同。在我的应用程序中,重新渲染仅在用户执行操作(例如单击按钮)时触发,并且可能需要几百毫秒。 在渲染期间,如果浏览器仍然响应(允许滚动等),那将是很好的。 我特别寻找 Chrome 的解决方案,不过在 Firefox 和 Safari 中也能工作的解决方案也不错。
可能的(糟糕)答案:您可以尝试估计渲染需要多长时间,然后设置一个以调用 gl.finish()
开始的超时。 但是,对于所有顶点缓冲区大小和所有用户可靠地进行此估算将非常麻烦且不准确。
可能的(非)答案:requestAnimationFrame
解决了我要找的东西...但它并没有解决吧?
2018 年的可能答案:也许 ImageBitmap
API 可以解决这个问题-请参见 MDN docs.
drawImage
一样。 - moka