javascript - 处理多个 Canvas 上下文的解决方案

标签 javascript html canvas webgl multiple-instances

我正在构建一个图形 Web 应用程序,我将在其中绘制一个元素并最终传输其内容。

问题是我的目标是使用一些需要 Canvas 上下文以及在某些情况下不同类型上下文的库( Three.js 、 sketch.js 等)。其他人需要“2d”上下文,其他人需要“webgl”上下文等。

当我希望最终有一个 Canvas 来传输它时,如何处理在 Canvas 上绘制的所有这些库的可靠方法是什么?

现在,我为每个库创建一个隐藏 Canvas ,并有一个主渲染循环,我在其中调用:

masterCtx.drawImage(canv1, 0, 0);
masterCtx.drawImage(canv2, 0, 0);
//etc

但后来我可能还有其他需要上下文的库。我是否应该只有 1 个 Canvas 和 1 个上下文,并尝试从头开始自己实现该库实现的所有功能?我还有什么其他选择?

我的标准是性能、可扩展性和稳健性

谢谢

最佳答案

一张 Canvas 上不能有 2 个不同的上下文。

解决方案:

至于共享 Canvas ,我怀疑这是否有效。每个库都期望 Canvas 处于特定状态。您可以使用 ctx.save() 和 ctx.restore() 保存和恢复 2d Canvas 的所有状态,但保存和恢复 WebGL 的所有状态将是一个巨大的开销。

关于javascript - 处理多个 Canvas 上下文的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403331/

相关文章:

javascript - 仅在 Ipad 上的 Div 上链接不工作 - 任何其他设备/浏览器工作 100%

javascript - 无法在 element.nodeName=input 和 element.type=text 上创建 checkboxradio

html - 我想使用 DOM 但现在我有错误

javascript - Canvas 。 AngularJS。添加文本和图像

javascript - 在 Javascript 中将 Blob 的一部分绘制到 html Canvas 上,无需数据 url

javascript - 如何在pixijs中使用绝对坐标

javascript - 基于 Web 的游戏引擎 - 输入请求

javascript - 替换文件中的 Javascript 对象

javascript - 在javascript中覆盖ctrl-=

javascript - 如果父菜单有子菜单,则单击两次以转到链接,如果没有子菜单,则单击一次以链接