Spec-Zone.ru › Web APIs

XRWebGLLayer

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает во всех наиболее широко используемых браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Экспериментальная функция: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости с браузерами.

Интерфейс XRWebGLLayer API устройства WebXR обеспечивает связь между устройством WebXR (или имитируемым устройством XR в случае сеанса встраивания) и контекстом WebGL, используемым для отрисовки сцены для отображения на устройстве. В частности, он предоставляет доступ к буферу кадра и области видимости WebGL для удобного доступа к контексту.

Хотя XRWebGLLayer в настоящее время является единственным типом слоя буфера кадра, поддерживаемым WebGL, вполне возможно, что будущие обновления спецификации WebXR позволят использовать другие типы слоёв и соответствующие источники изображений.

EventTarget XRLayer XRWebGLLayer

Конструктор

XRWebGLLayer() Экспериментальная

Создаёт и возвращает новый объект XRWebGLLayer для использования указанным XRSession, используя конкретный WebGLRenderingContext или WebGL2RenderingContext в качестве целевого контекста.

Свойства экземпляра

antialias Только для чтения Экспериментальная

Булевое значение, указывающее, поддерживает ли буфер кадра контекста WebGL антиалиасинг. Конкретный тип антиалиасинга определяется браузером.

fixedFoveation Экспериментальная

Число, указывающее степень фовеации, используемой XR-композитором. Фиксированная фовеация (FFR) отрисовывает края текстур глаза с меньшим разрешением, чем центр, и уменьшает нагрузку на графический процессор.

framebuffer Только для чтения Экспериментальная

Возвращает WebGLFramebuffer, подходящий для передачи в метод bindFrameBuffer().

framebufferWidth Только для чтения Экспериментальная

Возвращает ширину буфера кадра XRWebGLLayer.

framebufferHeight Только для чтения Экспериментальная

Возвращает высоту буфера кадра слоя.

ignoreDepthValues Только для чтения Экспериментальная

Булево значение, указывающее, должен ли XR-композитор использовать содержимое буфера глубины слоя при композировании сцены.

Статические методы

getNativeFramebufferScaleFactor() Экспериментальная

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

Методы экземпляра

getViewport() Экспериментальная

Возвращает новый экземпляр XRViewport, представляющий положение, ширину и высоту, на которые необходимо установить область видимости контекста WebGL, чтобы отрисовка попадала в выделенную для содержимого указанного представления область буфера кадра. Таким образом, например, отрисовка левого и правого глаз происходит в соответствующих частях буфера кадра.

Примеры

Связывание слоя с контекстом WebGL

Этот фрагмент, взятый из Отрисовка кадра в нашем примере WebXR «Движение и анимация», демонстрирует, как XRWebGLLayer извлекается из состояния отрисовки объекта XRSession и затем привязывается как текущий буфер кадра WebGL для отрисовки, вызывая функцию WebGL bindFrameBuffer().

let glLayer = xrSession.renderState.baseLayer;
gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);

Отрисовка каждого представления в кадре

Каждый раз, когда графический процессор готов отрисовать сцену на устройстве XR, XR-среда вызывает функцию, указанную при вызове метода XRSession requestAnimationFrame() для запроса отрисовки кадра.

Эта функция получает в качестве входных данных XRFrame, который содержит данные, необходимые для отрисовки кадра. Эта информация включает позу (объект XRViewerPose), описывающий положение и направление взгляда зрителя в сцене, а также список объектов XRView, каждый из которых представляет одну перспективу сцены. В текущих реализациях WebXR в этом списке никогда не будет более двух элементов: один описывает положение и угол обзора левого глаза, а другой — правого.

let pose = xrFrame.getViewerPose(xrReferenceSpace);

if (pose) {
  const glLayer = xrSession.renderState.baseLayer;
  gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);

  for (const view of pose.views) {
    const viewport = glLayer.getViewport(view);
    gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);

    /* Render the view */
  }
}

Спецификации

Спецификация
API устройства WebXR
# xrwebgllayer-interface

Совместимость с браузерами

Рабочий стол Мобильное устройство
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
XRWebGLLayer 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
XRWebGLLayer 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
antialias 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
fixedFoveation Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет
framebuffer 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
framebufferHeight 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
framebufferWidth 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
getNativeFramebufferScaleFactor_static 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
getViewport 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет
ignoreDepthValues 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет

См. также

  • API устройств WebXR
  • Начало работы с WebGL
  • WebGLRenderingContext и WebGL2RenderingContext
  • Отрисовка кадра в нашем примере WebXR «Движение и анимация»

© 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/XRWebGLLayer

Spec-Zone.ru

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