使用 WebGL 扩展

WebGL 及其姊妹 API(OpenGL 和 OpenGL ES)都支持扩展。完整的扩展列表可在 khronos webgl 扩展注册表 中找到。

注意:在 WebGL 中,与其他 GL API 不同,只有在显式请求时才可以使用扩展。

规范扩展名称、供应商前缀和首选项

浏览器供应商可能会在扩展正式批准之前(但仅在扩展处于草案阶段时)支持这些扩展。在这种情况下,其名称可以以供应商前缀(MOZ_WEBKIT_ 等)开头,或者只有在切换浏览器首选项后才能使用该扩展。

如果您希望使用最前沿的扩展,并希望在批准后继续使用(当然,假设扩展不会以不兼容的方式更改),那么您需要查询规范扩展名称和供应商扩展名称。例如

js
const ext =
  gl.getExtension("OES_vertex_array_object") ||
  gl.getExtension("MOZ_OES_vertex_array_object") ||
  gl.getExtension("WEBKIT_OES_vertex_array_object");

请注意,供应商前缀已被弃用,因此大多数浏览器通过功能标记而不是供应商前缀来实现实验性扩展。

功能标记为

  • Firefox 中的 webgl.enable-draft-extensions
  • Chromium 基于浏览器的浏览器(Chrome、Opera)中的 chrome://flags/#enable-webgl-draft-extensions

命名约定

WebGL 扩展以“ANGLE”、“OES”、“EXT”或“WEBGL”为前缀。这些前缀反映了来源和意图

  • ANGLE_:由 ANGLE 库 作者编写的扩展。
  • OES_KHR_:反映 OpenGL ES (OES) 或由各自体系结构审查委员会 (Khronos) 批准的 OpenGL API 扩展的功能的扩展。
  • OVR_:针对虚拟现实进行优化的扩展。
  • EXT_:反映其他 OpenGL ES 或 OpenGL API 扩展的扩展。
  • WEBGL_:特定于 WebGL 且旨在与多个 Web 浏览器兼容的扩展。它还应用于源自 OpenGL ES 或 OpenGL API 但其行为已发生重大更改的扩展。

查询可用扩展

WebGL 上下文支持查询哪些扩展可用。

js
const available_extensions = gl.getSupportedExtensions();

WebGLRenderingContext.getSupportedExtensions() 方法返回一个字符串数组,每个字符串代表一个受支持的扩展。

扩展列表

启用扩展

在可以使用扩展之前,必须使用 WebGLRenderingContext.getExtension() 启用它。例如

js
const float_texture_ext = gl.getExtension("OES_texture_float");

如果扩展不受支持,则返回值为 null,否则为扩展对象。

扩展对象

如果扩展定义了 WebGL 核心规范中不可用的特定符号或函数,则可以通过对 gl.getExtension() 的调用返回的扩展对象获得这些符号或函数。

另请参阅