XRWebGLLayer
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех наиболее широко используемых браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости с браузерами.
Интерфейс XRWebGLLayer API устройства WebXR обеспечивает связь между устройством WebXR (или имитируемым устройством XR в случае сеанса встраивания) и контекстом WebGL, используемым для отрисовки сцены для отображения на устройстве. В частности, он предоставляет доступ к буферу кадра и области видимости WebGL для удобного доступа к контексту.
Хотя XRWebGLLayer в настоящее время является единственным типом слоя буфера кадра, поддерживаемым WebGL, вполне возможно, что будущие обновления спецификации WebXR позволят использовать другие типы слоёв и соответствующие источники изображений.
Конструктор
-
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