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 пикселей). Представьте буфер кадров в полном размере:
Если на этом устройстве из-за ограничений графического процессора браузеру необходимо уменьшить качество изображения, чтобы повысить производительность до приемлемого уровня, он может выбрать уменьшение разрешения вдвое. В этом случае значение, возвращаемое XRWebGLLayer.getNativeFramebufferScaleFactor(), будет равно 2,0. Этот метод деления буфера кадров между представлениями показан на следующей диаграмме.
Теперь ширина и высота буфера кадров составляют 50% от предыдущих значений, что приводит к общему размеру буфера кадров 1280 на 720 пикселей, причём половина буфера для каждого глаза составляет 640x720 пикселей. Теперь мы можем увидеть координаты каждого из окон, представляющих эти два представления:
Поскольку каждый глаз получает половину буфера кадров, в результате левый глаз получает 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. В результате получается контекст рендеринга, подобный показанному на диаграмме ниже:
Каждый раз, когда XRViewerPose's views итерируются для отрисовки, цикл рендеринга получает XRView для левого глаза с верхним левым углом в (0, 0) и шириной и высотой 1280x1440 пикселей. Для правого глаза он получает значение верхнего левого угла 1280, 0 и такую же ширину и высоту: 1280x1440.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | Нет |
См. также
© 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