WebGLRenderingContext:isContextLost() 方法
WebGLRenderingContext.isContextLost()
方法返回一个布尔值,指示 WebGL 上下文是否已丢失,并且在渲染可以恢复之前必须重新建立。
语法
js
isContextLost()
参数
无。
返回值
一个布尔值,如果上下文已丢失,则为 true
,否则为 false
。
使用说明
WebGL 上下文可能由于多种原因而丢失,这使得在恢复渲染之前重新建立上下文成为必要。例如
- 两个或多个页面正在使用 GPU,但它们一起对 GPU 的需求过高,因此浏览器会告诉这两个上下文它们已丢失连接,然后选择其中一个以恢复访问权限。
- 用户的计算机具有多个图形处理器(例如,既有移动 GPU 又有台式机级 GPU 的笔记本电脑,前者主要在电池供电时使用),并且用户或系统决定切换 GPU。在这种情况下,所有上下文都将丢失,然后在切换 GPU 后恢复。
- 用户浏览器中运行的另一个页面执行使用 GPU 的操作,该操作耗时过长,导致浏览器决定重置 GPU 以打破停顿。这将导致整个浏览器中的每个 WebGL 上下文都丢失。
- 用户在允许在不重新启动系统的情况下更新图形驱动程序的操作系统上更新了其图形驱动程序。
示例
例如,在检查程序链接成功时,您还可以检查上下文是否未丢失
js
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS) && !gl.isContextLost()) {
const info = gl.getProgramInfoLog(program);
console.log(`Error linking program:\n${info}`);
}
规范
规范 |
---|
WebGL 规范 # 5.14.13 |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。
另请参阅
- The
WebGLContextEvent
信号上下文状态的变化。 - 在 WebGL 中处理上下文丢失:Khronos WebGL Wiki