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 auffalse
initialisiert 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 isttrue
beim 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
BCD tables only load in the browser