Disable/enable webGL/three.js 中的 webGL 上下文

Disable/enable webGL Context in webGL/three.js

我有一个很棒的项目 three.js,一切都按预期进行。它以不同 canvas 显示一些网格,这是我的问题。

该项目旨在显示很多很多 canvas,并且每个都有自己的上下文,并且达到了 16 个实时 webGL 上下文的致命限制。由于它想要在页面中显示更多内容,因此我正在寻找解决此限制的方法,方法是在实际未显示在可见页面上时禁用上下文。当用户滚动时,上下文将为 disabled/enabled,因此我可以放置任意多的上下文。

我发现了这个功能:renderer.forceContextLoss() 有了这个我可以强制禁用上下文。但是我没有找到任何可以重新启动它的东西。我设法检测到上下文丢失,但没有检测到它的恢复

如果您对我如何实现这一目标有任何想法,请随时给我一些提示。

提前致谢!

这已在其他地方介绍过,但让它看起来像有多个画布的最简单方法是只使用一个 three.js 实例,使其覆盖整个 window,放置占位符div在你想画东西的地方,然后用element.getClientBoundingRect在每个元素里设置你想画的每个场景的scissor和viewport

There's an example here

这是 Whosebug 中的答案,该示例源自该答案

这将比使用多个画布使用更少的内存,每个画布都需要它自己的数据、它自己的着色器等...