Spec-Zone.ru › Web APIs

Использование расширений WebGL

WebGL, как и его родственные API (OpenGL и OpenGL ES), поддерживает расширения. Полный список расширений доступен в реестре расширений WebGL Khronos.

Примечание: В 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");

Обратите внимание, что префиксы производителей не рекомендуются, поэтому большинство браузеров реализуют экспериментальные расширения с помощью флагов функций, а не префиксов производителей.

Флаги функций:

  • webgl.enable-draft-extensions в Firefox
  • chrome://flags/#enable-webgl-draft-extensions в браузерах на базе Chromium (Chrome, Opera).

Правила именования

Расширения WebGL имеют префиксы "ANGLE", "OES", "EXT" или "WEBGL". Эти префиксы отражают происхождение и намерение:

  • ANGLE_: Расширения, написанные авторами библиотеки ANGLE.
  • OES_ и KHR_: Расширения, которые дублируют функциональность из OpenGL ES (OES) или расширений API OpenGL, утверждённых соответствующими советами по архитектурному обзору (Khronos).
  • OVR_: Расширения, оптимизированные для виртуальной реальности.
  • EXT_: Расширения, которые дублируют другие расширения API OpenGL ES или OpenGL.
  • WEBGL_: Расширения, специфичные для WebGL и предназначенные для совместимости с несколькими веб-браузерами. Также они должны использоваться для расширений, которые изначально были частью API OpenGL ES или OpenGL, но поведение которых было существенно изменено.

Запрос доступных расширений

Контекст WebGL поддерживает запрос доступных расширений.

const available_extensions = gl.getSupportedExtensions();

Метод WebGLRenderingContext.getSupportedExtensions() возвращает массив строк, по одной для каждого поддерживаемого расширения.

Список расширений

Текущие расширения:

  • 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 , если расширение не поддерживается, или объект расширения в противном случае.

Объекты расширений

Если расширение определяет специфические символы или функции, которые не доступны в основной спецификации WebGL, они будут доступны в объекте расширения, возвращаемом вызовом gl.getExtension().

См. также

  • WebGLRenderingContext.getSupportedExtensions()
  • WebGLRenderingContext.getExtension()
  • webglreport.com
  • web3dsurvey.com - Обзор поддержки расширений WebGL

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API