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
这是 Whosebug 中的答案,该示例源自该答案
这将比使用多个画布使用更少的内存,每个画布都需要它自己的数据、它自己的着色器等...
我有一个很棒的项目 three.js,一切都按预期进行。它以不同 canvas 显示一些网格,这是我的问题。
该项目旨在显示很多很多 canvas,并且每个都有自己的上下文,并且达到了 16 个实时 webGL 上下文的致命限制。由于它想要在页面中显示更多内容,因此我正在寻找解决此限制的方法,方法是在实际未显示在可见页面上时禁用上下文。当用户滚动时,上下文将为 disabled/enabled,因此我可以放置任意多的上下文。
我发现了这个功能:renderer.forceContextLoss()
有了这个我可以强制禁用上下文。但是我没有找到任何可以重新启动它的东西。我设法检测到上下文丢失,但没有检测到它的恢复
如果您对我如何实现这一目标有任何想法,请随时给我一些提示。
提前致谢!
这已在其他地方介绍过,但让它看起来像有多个画布的最简单方法是只使用一个 three.js 实例,使其覆盖整个 window,放置占位符div在你想画东西的地方,然后用element.getClientBoundingRect
在每个元素里设置你想画的每个场景的scissor和viewport
这是 Whosebug 中的答案,该示例源自该答案
这将比使用多个画布使用更少的内存,每个画布都需要它自己的数据、它自己的着色器等...