在 engine/scene 个实例中保留 Babylonjs 纹理缓存

persisting Babylonjs texture cache across engine/scene instances

长期听众,第一次来电。我正在 React 应用程序的上下文中开发一个 babylon-js 项目。为了帮助提高性能,我想只加载一次纹理并在 scene/engine 处理过程中保留它。 canvas 运行 babylon-js 并没有在应用的所有页面上存在,所以引擎和场景都被处理掉了。我调查了场景、材质等的序列化,但这似乎不起作用,因为纹理仍会再次加载(尽管现在我使用的是离线提供程序,但来自 indexdb)。当前的 运行 假设是将 canvas 提取到 react vDOM 外部,并在进入或退出 babylon-js 查看器组件时切换其可见性 css。我的问题是:我错过了什么吗?在反应上下文之外提取 canvas 让我觉得是一种反模式

频繁创建和处理 webgl 上下文是一项很大的工作 no-no,因为它不仅 resource/computationally 密集,而且还可能导致其他选项卡丢失上下文,因为浏览器可以处理的上下文数量有限provide 和资源是异步释放的。请记住,模式是概念,而不是规则,必须根据具体情况进行评估。

所以回答你的问题:不,你没有遗漏任何东西,最好的解决方案是将 webgl canvas 存储在 reacts vDOM 之外。