UNPKG

@pmndrs/xr

Version:
44 lines (43 loc) 2.13 kB
import { isAppleVisionPro } from './misc.js'; export function buildXRSessionInit(mode, domOverlayRoot, { anchors = true, handTracking = isAppleVisionPro() ? false : true, layers = true, meshDetection = true, planeDetection = true, customSessionInit, depthSensing = false, hitTest = true, domOverlay = true, bodyTracking = false, //until 6.7 since breaking change bounded, } = {}) { if (customSessionInit != null) { return customSessionInit; } const requiredFeatures = bounded == null ? ['local-floor'] : bounded ? ['bounded-floor'] : ['unbounded', 'local-floor']; const optionalFeatures = []; if (domOverlay instanceof Element) { domOverlay = true; } addXRSessionFeature(anchors, 'anchors', requiredFeatures, optionalFeatures); addXRSessionFeature(handTracking, 'hand-tracking', requiredFeatures, optionalFeatures); addXRSessionFeature(layers, 'layers', requiredFeatures, optionalFeatures); addXRSessionFeature(meshDetection, 'mesh-detection', requiredFeatures, optionalFeatures); addXRSessionFeature(planeDetection, 'plane-detection', requiredFeatures, optionalFeatures); addXRSessionFeature(depthSensing, 'depth-sensing', requiredFeatures, optionalFeatures); addXRSessionFeature(domOverlay, 'dom-overlay', requiredFeatures, optionalFeatures); addXRSessionFeature(hitTest, 'hit-test', requiredFeatures, optionalFeatures); addXRSessionFeature(bodyTracking, 'body-tracking', requiredFeatures, optionalFeatures); const init = { requiredFeatures, optionalFeatures, }; if (domOverlayRoot != null) { init.domOverlay = { root: domOverlayRoot }; } //TODO: replace with call to isSupportedFeature (unbounded, ...) if (depthSensing) { Object.assign(init, { depthSensing: { usagePreference: ['gpu-optimized'], dataFormatPreference: [] } }); } return init; } function addXRSessionFeature(value, key, requiredFeatures, optionalFeatures) { if (value === false) { return; } if (value === true) { optionalFeatures.push(key); return; } requiredFeatures.push(key); }