使用 WebGL 扩展
WebGL 与其姊妹 API(OpenGL 和 OpenGL ES)一样支持扩展。完整的扩展列表可在 khronos webgl extension registry 中找到。
注意:在 WebGL 中,与其他 GL API 不同,扩展仅在明确请求时可用。
规范的扩展名称、供应商前缀和首选项
扩展程序可能在正式批准之前就得到浏览器供应商的支持(但仅限于草案阶段)。在这种情况下,扩展程序的名称可以加上供应商前缀( MOZ_ 、 WEBKIT_ 等),或者只有在切换浏览器首选项后才可用。
如果您希望使用最先进的扩展,并希望在批准后继续工作(当然,假设扩展不会以不兼容的方式更改),您可以查询规范扩展名称以及供应商扩展名称。例如:
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 。
Naming conventions
WebGL 扩展以 "ANGLE" 、 "OES" 、 "EXT" 或 "WEBGL" 为前缀。这些前缀反映了来源和意图:
ANGLE_ :由 ANGLE library 作者编写的扩展。
OES_ 和 KHR_ :镜像 OpenGL ES(OES)或 OpenGL API 扩展的功能的扩展,这些扩展已获得各自架构审查委员会(Khronos)的批准。
OVR_ :针对虚拟现实进行优化的扩展。
EXT_ :镜像其他 OpenGL ES 或 OpenGL API 扩展的扩展。
WEBGL_ :特定于 WebGL 的扩展,旨在与多种 Web 浏览器兼容。它还应用于源自 OpenGL ES 或 OpenGL API 但其行为已发生显著改变的扩展。
查询可用扩展
WebGL 上下文支持查询可用的扩展。
const available_extensions = gl.getSupportedExtensions();
WebGLRenderingContext.getSupportedExtensions() 方法返回一个字符串数组,每个支持的扩展对应一个字符串。
Extension list
目前的扩展是:
ANGLE_instanced_arrays EXT_blend_minmax EXT_color_buffer_float EXT_color_buffer_half_float EXT_disjoint_timer_query EXT_float_blend EXT_frag_depth EXT_shader_texture_lod EXT_sRGB EXT_texture_compression_bptc EXT_texture_compression_rgtc EXT_texture_filter_anisotropic EXT_texture_norm16 KHR_parallel_shader_compile OES_draw_buffers_indexed OES_element_index_uint OES_fbo_render_mipmap OES_standard_derivatives OES_texture_float OES_texture_float_linear OES_texture_half_float OES_texture_half_float_linear OES_vertex_array_object OVR_multiview2 WEBGL_color_buffer_float WEBGL_compressed_texture_astc WEBGL_compressed_texture_etc WEBGL_compressed_texture_etc1 WEBGL_compressed_texture_pvrtc WEBGL_compressed_texture_s3tc WEBGL_compressed_texture_s3tc_srgb WEBGL_debug_renderer_info WEBGL_debug_shaders WEBGL_depth_texture WEBGL_draw_buffers WEBGL_lose_context WEBGL_multi_draw
启用扩展
在使用扩展之前,必须先使用 WebGLRenderingContext.getExtension() 启用它。例如:
const float_texture_ext = gl.getExtension("OES_texture_float");
如果不支持扩展,则返回值为 null ,否则返回扩展对象。
Extension objects
如果扩展定义了 WebGL 核心规范中没有的特定符号或函数,则它们将在调用 gl.getExtension() 返回的扩展对象上可用。
See also
WebGLRenderingContext.getSupportedExtensions() WebGLRenderingContext.getExtension() webglreport.com web3dsurvey.com - WebGL 扩展支持调查
© 2005–2024 MDN 贡献者。根据 Creative Commons Attribution-ShareAlike 许可证 v2.5 或更高版本获得许可。
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions