Signatur
Beschreibung
Die Eigenschaft maxLayers des VRDisplayCapabilities-Interfaces aus der veralteten WebVR-API gibt an, wie viele Ebenen (VRLayerInit-Objekte) das Gerät höchstens gleichzeitig darstellen kann. Diese Ebenen übergibt man an VRDisplay.requestPresent(), um die Ausgabe auf dem Headset zu starten.
In der Praxis ist der Wert entweder 0 oder 1. Ist canPresent gleich true, muss maxLayers mindestens 1 sein. Der Wert 0 bedeutet, dass das Display keine Ausgabe darstellen kann, zum Beispiel ein reiner Orientierungssensor. Die WebVR-Spezifikation 1.1 unterstützt ohnehin nur eine Ebene. Größere Werte waren für spätere Versionen vorgesehen.
Die Eigenschaft ist nützlich, bevor man requestPresent() aufruft. Damit prüft man, ob das Gerät überhaupt darstellen kann und wie viele Ebenen man höchstens übergeben darf. Übergibt man mehr Ebenen, als maxLayers erlaubt, wird das Promise abgelehnt.
Rückgabewert
0 (keine Darstellung möglich) oder 1.Beispiele
maxLayers aller angeschlossenen Displays auslesen
const listDisplays = async () => {
if (!navigator.getVRDisplays) {
console.log('WebVR wird nicht unterstützt.');
return;
}
const displays = await navigator.getVRDisplays();
for (const display of displays) {
const { maxLayers, canPresent } = display.capabilities;
console.log(`${display.displayName}: maxLayers=${maxLayers}, canPresent=${canPresent}`);
}
};
listDisplays();
Vor requestPresent() prüfen, ob das Display darstellen kann
const canvas = document.querySelector('#vr-canvas');
const button = document.querySelector('#enter-vr');
button.addEventListener('click', async () => {
const [display] = await navigator.getVRDisplays();
if (!display) return;
if (display.capabilities.maxLayers < 1) {
console.warn('Dieses Gerät kann keine Ebenen darstellen.');
return;
}
// Nie mehr Ebenen übergeben, als maxLayers erlaubt
const layers = [{ source: canvas }].slice(0, display.capabilities.maxLayers);
try {
await display.requestPresent(layers);
console.log('VR-Darstellung gestartet');
} catch (err) {
console.error('requestPresent fehlgeschlagen:', err);
}
});
Funktionsprüfung mit Rückfall auf WebXR
const detectVR = async () => {
if ('xr' in navigator) {
const ok = await navigator.xr.isSessionSupported('immersive-vr');
return ok ? 'WebXR' : 'keine VR';
}
if (navigator.getVRDisplays) {
const displays = await navigator.getVRDisplays();
const usable = displays.some(d => d.capabilities.maxLayers > 0);
return usable ? 'WebVR' : 'keine VR';
}
return 'keine VR';
};
detectVR().then(result => console.log('Verfügbar:', result));
// Wichtig · Fallstricke
Veraltet: Die WebVR-API ist nie Standard geworden und wurde durch die WebXR Device API ersetzt. Chrome hat sie nie ohne Flag für alle freigegeben, und auch Firefox hat die Unterstützung entfernt. Für neue Projekte sollten Sie navigator.xr und XRSession verwenden. Dort werden Ebenen über XRWebGLLayer und updateRenderState() gesteuert.
- Die Eigenschaft ist schreibgeschützt. Zuweisungen werden stillschweigend ignoriert.
- In WebVR 1.1 ist der Wert nie größer als
1. Verlassen Sie sich nicht auf mehrere Ebenen. - Die API funktioniert nur in sicheren Kontexten (HTTPS). Außerdem muss
requestPresent()durch eine Nutzeraktion ausgelöst werden.