Spec-Zone.ru › Web APIs

XRWebGLLayer: getNativeFramebufferScaleFactor() статический метод

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

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

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

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

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

Статический метод XRWebGLLayer.getNativeFramebufferScaleFactor() возвращает числовое значение масштабирования, с помощью которого можно умножить разрешение указанной XRSession, чтобы получить родное разрешение буфера кадров устройства WebXR.

Эта информация может быть использована при создании нового XRWebGLLayer для настройки framebufferScaleFactor в объекте конфигурации layerInit , указанном при вызове конструктора XRWebGLLayer(). Для получения подробной информации см. Примечания по использованию и Примеры.

Если коэффициент масштабирования равен 1,0, то пиксели буфера кадров и пиксели родного экрана имеют одинаковый размер. Если коэффициент масштабирования больше нуля, то буфер кадров меньше родных размеров экрана, что приводит к масштабированию выходного изображения для отображения на экране после отрисовки в буфер кадров. Если коэффициент масштабирования меньше нуля, буфер кадров больше родного разрешения экрана, что приводит к масштабированию содержимого буфера кадров для отображения на устройстве XR. Это может происходить для сред отображения, которые используют методы супермасштабирования или антиалиасинга для улучшения восприятия качества изображения.

Синтаксис

XRWebGLLayer.getNativeFramebufferScaleFactor(session)

Параметры

session

XRSession для которого требуется вернуть коэффициент масштабирования буфера кадров.

Возвращаемое значение

Числовое значение, которое, при умножении на рекомендуемые размеры буфера кадров XRSession, приводит к родного разрешению буфера кадров устройства XR. Если сеанс завершён, эта функция возвращает 0,0.

Примечания по использованию

Коэффициент масштабирования, возвращаемый этой функцией, будет равен 1,0, если родное разрешение устройства XR и разрешение устройства XR совпадают. В любом случае, умножение рекомендуемого разрешения, определенного XRSession, на это значение даст фактическое родное разрешение XR-оборудования.

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

Например, рассмотрим устройство, использующее буфер кадров размером 2560x1440 пикселей (который используется для отрисовки двух представлений для левого и правого глаз, расположенных бок о бок, каждое с разрешением 1280x1440 пикселей). Представьте буфер кадров в полном размере:

Diagram showing how a framebuffer is divided between two eyes' viewpoints

Если на этом устройстве из-за ограничений графического процессора браузеру необходимо уменьшить качество изображения, чтобы повысить производительность до приемлемого уровня, он может выбрать уменьшение разрешения вдвое. В этом случае значение, возвращаемое XRWebGLLayer.getNativeFramebufferScaleFactor(), будет равно 2,0. Этот метод деления буфера кадров между представлениями показан на следующей диаграмме.

Diagram showing frame buffer as scaled to half resolution

Теперь ширина и высота буфера кадров составляют 50% от предыдущих значений, что приводит к общему размеру буфера кадров 1280 на 720 пикселей, причём половина буфера для каждого глаза составляет 640x720 пикселей. Теперь мы можем увидеть координаты каждого из окон, представляющих эти два представления:

Framebuffer and viewports with coordinates

Поскольку каждый глаз получает половину буфера кадров, в результате левый глаз получает 640x720 часть буфера с x и y окна на 0, шириной 640 и высотой 720. Правый глаз получает другую половину буфера кадров, с x окна установленным на 639.

При отрисовке кадра для этой сцены здесь мы получаем окно для представления и применяем его к WebGL, затем отрисовываем сцену. Это гарантирует, что рендер сцены будет соответствовать нужному представлению (определяемому данными положения и ориентации в позиции), и что выходной рендер будет ограничен правильной частью буфера кадров для глаза, который мы рисуем, независимо от выполняемого масштабирования.

Примеры

В этом примере мы запрашиваем буфер кадров с родным разрешением устройства, независимо от каких-либо проблем производительности:

function requestNativeScaleWebGLLayer(gl, xrSession) {
  return gl.makeXRCompatible().then(() => {
    let scaleFactor = XRWebGLLayer.getNativeFramebufferScaleFactor(xrSession);
    let glLayer = new XRWebGLLayer(xrSession, gl, {
      framebufferScaleFactor: scaleFactor,
    });
    xrSession.updateRenderState({ baseLayer: glLayer });
  });
}

Этот пример начинается с вызова функции контекста рендеринга WebGL makeXRCompatible(). После разрешения возвращённого promise мы продолжаем вызывать статическую функцию XRWebGLLayer getNativeFramebufferScaleFactor(), чтобы получить коэффициент масштабирования, необходимый для достижения родного разрешения, и затем передаём его в конструктор WebGLLayer() в качестве значения свойства framebufferScaleFactor в его объекте конфигурации layerInit.

Это даёт нам новый объект XRWebGLLayer, представляющий поверхность рендеринга, которую мы можем использовать для XRSession; мы устанавливаем его в качестве поверхности рендеринга для xrSession , вызывая его метод updateRenderState(), передавая новый glLayer в словаре XRRenderState через свойство XRRenderState.baseLayer. В результате получается контекст рендеринга, подобный показанному на диаграмме ниже:

Framebuffer and viewports with coordinates

Каждый раз, когда XRViewerPose's views итерируются для отрисовки, цикл рендеринга получает XRView для левого глаза с верхним левым углом в (0, 0) и шириной и высотой 1280x1440 пикселей. Для правого глаза он получает значение верхнего левого угла 1280, 0 и такую же ширину и высоту: 1280x1440.

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

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

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
getNativeFramebufferScaleFactor_static 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет

См. также

  • WebXR API устройств
  • Руководство по производительности 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/getNativeFramebufferScaleFactor_static

Spec-Zone.ru

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