XRWebGLLayer: framebuffer-Eigenschaft
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die schreibgeschützte XRWebGLLayer-Eigenschaft framebuffer ist ein undurchsichtiges WebGLFramebuffer, das zum Puffern des gerenderten Bildes verwendet wird, wenn der XR-Kompositor genutzt wird. Andernfalls ist der Wert dieser Eigenschaft null. Das undurchsichtige framebuffer ist funktional nahezu identisch mit einem Standard-WebGL-Framebuffer, mit Ausnahme der Unterschiede, die im Abschnitt Wie undurchsichtige Framebuffers besonders sind unten beschrieben werden.
Wert
Ein WebGLFramebuffer-Objekt, das den Framebuffer darstellt, in den die 3D-Szene gerendert wird, oder null, wenn der XR-Kompositor für die Sitzung deaktiviert ist.
Verwendungshinweise
>Wie undurchsichtige Framebuffers besonders sind
Das durch die framebuffer-Eigenschaft dargestellte Framebuffer ist undurchsichtig. Daher unterscheidet sich sein Verhalten in mehreren Punkten von einem Standard-WebGL-Kontext. Diese Unterschiede führen dazu, dass das undurchsichtige Framebuffer sich eher wie das Standard-WebGL-Framebuffer verhält:
- Undurchsichtige Framebuffers können Anti-Aliasing unterstützen, selbst unter WebGL 1.0, das normalerweise dies nicht tut.
- Die Anhänge (Puffer und dergleichen) von undurchsichtigen Framebuffers können nicht inspiziert oder geändert werden. Das Aufrufen von Funktionen wie
framebufferTexture2D(),framebufferRenderbuffer(),deleteFramebuffer()odergetFramebufferAttachmentParameter()auf einem undurchsichtigen Framebuffer führt zu dem WebGL-FehlerINVALID_OPERATION(0x0502). - Undurchsichtige Framebuffers werden als unvollständig betrachtet und stehen außer während der Ausführung des
requestAnimationFrame()-Callbacks nicht zum Rendern zur Verfügung. Der Versuch, das Framebuffer zu löschen, darin zu zeichnen oder es auszulesen, führt zu einem WebGL-FehlerINVALID_FRAMEBUFFER_OPERATION(0x0506). Das Aufrufen voncheckFramebufferStatus()auf dem WebGL-Kontext außerhalb des Animations-Frame-Callbacks verursacht den WebGL-FehlerFRAMEBUFFER_UNSUPPORTED(0x8CDD). - Undurchsichtige Framebuffers, die mit der
depth-Eigenschaft auffalseinitialisiert wurden, haben keinen Tiefenpuffer und stützen sich allein auf die Koordinaten zur Entfernungsbestimmung. - Undurchsichtige Framebuffers, die ohne Angabe einer
stencil-Eigenschaft initialisiert werden, haben keinen Stencil-Puffer. - Undurchsichtige Framebuffers haben keinen Alphakanal verfügbar, es sei denn, die
alpha-Eigenschaft isttruebeim Erstellen der Schicht. - Der XR-Kompositor geht davon aus, dass undurchsichtige Framebuffers Farben mit vorvermultipliziertem Alpha verwenden, unabhängig davon, ob das
premultipliedAlpha-Attribut des WebGL-Kontextes gesetzt ist oder nicht.
Hinweis:
Die depth- und stencil-Eigenschaften müssen nicht unterstützt werden, damit ein Browser als vollständig WebGL-kompatibel angesehen wird.
Die Standardkonfiguration eines neuen Framebuffers
Beim Erstellen einer neuen XRWebGLLayer wird ihr neues Framebuffer genauso initialisiert wie das Standard-Framebuffer für jede WebGL-Schnittstelle:
- Der Farb-Puffer ist mit seinem Löschwert auf die Farbe (0, 0, 0, 0) (bedeutet transparentes Schwarz) konfiguriert.
- Der Löschwert des Tiefen-Puffers ist die Zahl 1.0.
- Der Stencil-Puffer ist mit 0 gefüllt.
Beispiele
Dieses Beispiel holt die XRWebGLLayer für eine Sitzung und übergibt dann deren framebuffer an die bindFramebuffer()-Funktion des WebGL-Kontextes.
let glLayer = xrSession.renderState.baseLayer;
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
Spezifikationen
| Specification |
|---|
| WebXR Device API> # dom-xrwebgllayer-framebuffer> |
Browser-Kompatibilität
Loading…