XRWebGLLayer:framebuffer 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

只讀的 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 上下文屬性是否已設定。

注意: 瀏覽器不必支援 depthstencil 屬性,才能被視為擁有完整的 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

瀏覽器相容性

另見