现象描述
这个错误出现在线上环境,少量用户会抛出这个未被捕获的错误,提示当前浏览器无法支持WebGL。通过机型和浏览器判断,理论上是应该支持的。
链路跟踪
- 在plugin-renderer中,用renderer-adapater的Application创建。代码
- renderer-adapter中的Applcation继承自Pixi.js的Application
- Pixi.js的Application通过一个autoDetectRenderer方法识别当前系统支持情况,并自动做出选择。代码
- 初始化WebGLRenderer构造函数,其中使用pixi-gl-core来创建上下文。代码
- 在pixi-gl-core的createContext方法中,判断是否正确创建WebGLContext,如没有则此报错。代码
问题排查
- 上述链路中存在一个疑点,即当第3步中使用autoDetectRenderer方法识别时,已经用isWebGLSupported方法判断了是可以支持WebGLContext的,但在第5步中又紧接着创建失败了。
- autoDetectRenderer中的判断规则更加严格,只能认为这个报错在非常特殊的情况下发生,也就是前后两次获取WebGLContext上下文环境出现了突然的改变,目前无法得知是什么原因。
解决方案
- 在eva.js中,捕获这个错误(上诉链路的第一步),并再次强制使用Canvas再初始化一次。