XRWebGLLayer
WebXR 裝置 API 的 XRWebGLLayer 介面在 WebXR 裝置(或內聯會話情況下的模擬 XR 裝置)和用於在裝置上顯示場景的 WebGL 上下文之間提供了連結。具體來說,它提供了對 WebGL 幀緩衝區和視口(viewport)的訪問,以方便訪問上下文。
儘管 XRWebGLLayer 目前是 WebGL 支援的唯一幀緩衝區層型別,但 WebXR 規範的未來更新完全有可能允許其他層型別和相應的影像源。
建構函式
XRWebGLLayer()實驗性-
建立並返回一個新的
XRWebGLLayer物件,供指定的XRSession使用,並使用特定的WebGLRenderingContext或WebGL2RenderingContext作為目標上下文。
例項屬性
antialias只讀 實驗性-
一個布林值,指示 WebGL 上下文的幀緩衝區是否支援抗鋸齒。具體的抗鋸齒型別由 使用者代理 決定。
fixedFoveation實驗性-
一個數字,表示 XR 合成器使用的注視點渲染(foveation)的量。固定注視點渲染(FFR)以比中心更低的精度渲染眼部紋理的邊緣,從而降低 GPU 負載。
framebuffer只讀 實驗性-
返回一個
WebGLFramebuffer物件,適用於傳遞給bindFrameBuffer()方法。 framebufferWidth只讀 實驗性-
返回
XRWebGLLayer幀緩衝區的寬度。 framebufferHeight只讀 實驗性-
返回此層幀緩衝區的高度。
ignoreDepthValues只讀 實驗性-
一個布林值,指示 WebXR 合成器在合成場景時是否應使用該層的深度緩衝區內容。
靜態方法
getNativeFramebufferScaleFactor()實驗性-
返回一個縮放因子,該因子可用於將推薦的 WebGL 幀緩衝區解析度縮放到渲染裝置的本機解析度。
例項方法
getViewport()實驗性-
返回一個新的
XRViewport例項,該例項表示 WebGL 上下文的視口必須設定的位置、寬度和高度,以便將繪圖包含在為指定檢視內容預留的幀緩衝區區域內。透過這種方式,例如,左眼視角和右眼視角的渲染會被分別放置到幀緩衝區的正確區域。
示例
將層繫結到 WebGL 上下文
此程式碼片段摘自我們 WebXR 示例“運動與動作”中的繪製幀,展示瞭如何從 XRSession 物件的渲染狀態中獲取 XRWebGLLayer,然後透過呼叫 WebGL 的 bindFrameBuffer() 函式將其繫結為當前渲染的 WebGL 幀緩衝區。
let glLayer = xrSession.renderState.baseLayer;
gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
渲染幀中的每個檢視
每次 GPU 準備好將場景渲染到 XR 裝置時,XR 執行時都會呼叫您在呼叫 XRSession 方法 requestAnimationFrame() 時指定的函式,請求渲染該幀。
該函式將一個 XRFrame 作為輸入,該幀封裝了渲染該幀所需的資料。這些資訊包括姿勢(一個 XRViewerPose 物件),該姿勢描述了檢視器在場景中的位置和朝向,以及一個 XRView 物件列表,每個物件代表場景的一個視角。在當前的 WebXR 實現中,此列表永遠不會超過兩個條目:一個描述左眼的視角和觀察角度,另一個描述右眼。
let pose = xrFrame.getViewerPose(xrReferenceSpace);
if (pose) {
const glLayer = xrSession.renderState.baseLayer;
gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
for (const view of pose.views) {
const viewport = glLayer.getViewport(view);
gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
/* Render the view */
}
}
規範
| 規範 |
|---|
| WebXR Device API # xrwebgllayer-interface |
瀏覽器相容性
載入中…
另見
- WebXR Device API
- WebGL 入門
WebGLRenderingContext和WebGL2RenderingContext- 我們 WebXR 示例“運動與動作”中的繪製幀