WebGLRenderingContext: isContextLost() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

WebGLRenderingContext.isContextLost() 方法返回一个布尔值,指示 WebGL 上下文是否已丢失,以及是否必须重新建立才能恢复渲染。

语法

js
isContextLost()

参数

无。

返回值

如果上下文已丢失,则返回 true;否则返回 false

用法说明

WebGL 上下文丢失可能由多种原因引起,需要重新建立上下文才能恢复渲染。例如:

  • 两个或多个页面同时使用 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

浏览器兼容性

另见