XRWebGLLayer:framebuffer 屬性
只讀的 XRWebGLLayer 屬性 **framebuffer** 是一個不透明的 WebGLFramebuffer,如果正在使用 XR 合成器,它將用於緩衝渲染的影像。否則,此屬性的值為 null。不透明的 framebuffer 在功能上與標準的 WebGL framebuffer 幾乎相同,除了下面 不透明 framebuffer 的特殊之處 部分介紹的差異。
值
一個 WebGLFramebuffer 物件,表示正在渲染 3D 場景的 framebuffer,或者如果會話停用了 XR 合成器,則為 null。
用法說明
不透明 framebuffer 的特殊之處
framebuffer 屬性表示的 framebuffer 是不透明的。因此,它的行為在幾個方面與標準的 WebGL 上下文不同。這些差異使得不透明的 framebuffer 更像預設的 WebGL framebuffer。
- 不透明的 framebuffer *可能*支援 抗鋸齒,即使是在 WebGL 1.0 下,而 WebGL 1.0 通常不支援。
- 不透明 framebuffer 的附件(緩衝區等)無法檢查或更改。在不透明的 framebuffer 上呼叫諸如
framebufferTexture2D()、framebufferRenderbuffer()、deleteFramebuffer()或getFramebufferAttachmentParameter()等函式會導致 WebGL 錯誤INVALID_OPERATION(0x0502)。 - 不透明的 framebuffer 被視為不完整,並且除了在執行
requestAnimationFrame()回撥期間外,不可用於渲染。嘗試清除、繪製到或讀取 framebuffer 會導致 WebGL 錯誤INVALID_FRAMEBUFFER_OPERATION(0x0506)。在動畫幀回撥之外的 WebGL 上下文上呼叫checkFramebufferStatus()會報告 WebGL 錯誤FRAMEBUFFER_UNSUPPORTED(0x8CDD)。 - 以
depth屬性設定為false初始化不透明 framebuffer 將沒有深度緩衝區,並且將僅依靠座標來確定距離。 - 未指定
stencil屬性初始化的不透明 framebuffer 將沒有模板緩衝區。 - 除非在建立圖層時
alpha屬性為true,否則不透明的 framebuffer 將無法使用 alpha 通道。 - XR 合成器假定不透明 framebuffer 使用預乘 alpha 顏色,而不管 WebGL 上下文的
premultipliedAlpha上下文屬性是否已設定。
注意: 瀏覽器不必支援 depth 和 stencil 屬性,才能被視為擁有完整的 WebGL 支援。
新 framebuffer 的預設配置
建立新的 XRWebGLLayer 後,其新 framebuffer 的初始化方式與任何 WebGL 介面的預設 framebuffer 相同。
- 顏色緩衝區配置為清除值為顏色 (0, 0, 0, 0)(表示透明黑色)。
- 深度緩衝區的清除值為 1.0。
- 模板緩衝區填充為 0。
示例
此示例獲取會話的 XRWebGLLayer,然後將其 framebuffer 傳遞給 WebGL 上下文的 bindFramebuffer() 函式。
js
let glLayer = xrSession.renderState.baseLayer;
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
規範
| 規範 |
|---|
| WebXR Device API # dom-xrwebgllayer-framebuffer |
瀏覽器相容性
載入中…