THREE.WebGLRenderer (ThreeJS v110) 崩溃新版本的 Safari 桌面 - 修复而不升级?

THREE.WebGLRenderer (ThreeJS v110) crashing new versions of Safari desktop - fix without upgrade?

THREE.WebGLRenderer 在 three.js (v110)

的 CDN 版本中使新版本的 safari 崩溃

在最新版本的 safari 中调用 new THREE.WebGLRenderer() 会导致页面崩溃,这会导致 safari 立即重新加载页面并在页面顶部显示警告“由于出现问题已重新加载此网页。”。

这只是最近才开始发生,可能只出现在最新版本的 Safari(我使用的是 Safari 15)和 OSX(我使用的是 Big Sur)上。

这在 Safari 移动版 (iOS v14.7.1) 上不是问题

关于如何在不升级到需要重大返工的最新版本 ThreeJS 的情况下解决此问题的任何建议? (尤其是更新到 ES6 之后)

要复制,只需 运行 在 Safari new THREE.WebGLRenderer() 控制台中的 javascript 中,它甚至在用于创建场景之前就崩溃了。

将 three.js 更新到最新版本无法解决问题。这是 Safari 15 的错误 per the creator of three.js

您可以从 here 报告此问题,但它已经被报告了。

最简单的解决办法就是升级到最新版本的threejs。但是,对于那些可能正在寻找基于代码的快速解决方法以避免需要升级 threejs 版本的人来说,这对我有用...

在 WebGLRenderer 构造函数中:

  1. contextAttributes
  2. 中删除 xrCompatible
  3. 尝试使用 _canvas.getContext( 'webgl2', contextAttributes ) 创建上下文,只有在不成功时,才回退到 _canvas.getContext( 'webgl', contextAttributes ) 因为 webgl2 版本应该在 Safari Desktop 上成功,这避免了发生崩溃的第二次调用(在我的threejs的旧版本110)