XRWebGLLayer: framebuffer property

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Thuộc tính chỉ đọc framebuffer của XRWebGLLayer là một WebGLFramebuffer mờ được sử dụng để đệm hình ảnh hiển thị nếu XR compositor đang được sử dụng. Ngược lại, giá trị thuộc tính này là null. Framebuffer mờ về mặt chức năng gần giống như framebuffer WebGL tiêu chuẩn, ngoại trừ các điểm khác biệt được đề cập trong phần Cách framebuffer mờ đặc biệt bên dưới.

Giá trị

Một đối tượng WebGLFramebuffer đại diện cho framebuffer mà cảnh 3D đang được hiển thị vào, hoặc null nếu XR compositor bị tắt cho phiên.

Ghi chú sử dụng

Cách framebuffer mờ đặc biệt

Framebuffer được đại diện bởi thuộc tính framebuffer là mờ. Do đó, hành vi của nó khác nhau theo một số cách so với ngữ cảnh WebGL tiêu chuẩn. Những khác biệt này khiến framebuffer mờ hoạt động giống hơn với framebuffer WebGL mặc định:

  • Framebuffer mờ có thể hỗ trợ khử răng cưa, ngay cả trong WebGL 1.0, loại thường không làm như vậy.
  • Các attachment (bộ đệm và tương tự) của framebuffer mờ không thể được kiểm tra hoặc thay đổi. Gọi các hàm như framebufferTexture2D(), framebufferRenderbuffer(), deleteFramebuffer(), hoặc getFramebufferAttachmentParameter() trên framebuffer mờ dẫn đến lỗi WebGL INVALID_OPERATION (0x0502).
  • Framebuffer mờ được coi là chưa hoàn chỉnh và không có sẵn để hiển thị trừ khi đang thực thi callback của requestAnimationFrame(). Việc cố gắng xóa, vẽ vào, hoặc đọc từ framebuffer dẫn đến lỗi WebGL INVALID_FRAMEBUFFER_OPERATION (0x0506). Gọi checkFramebufferStatus() trên ngữ cảnh WebGL từ bên ngoài callback animation frame khiến lỗi WebGL FRAMEBUFFER_UNSUPPORTED (0x8CDD) được báo cáo.
  • Framebuffer mờ được khởi tạo với thuộc tính depth đặt thành false sẽ không có bộ đệm độ sâu và sẽ dựa vào các tọa độ để xác định khoảng cách.
  • Framebuffer mờ được khởi tạo mà không chỉ định thuộc tính stencil sẽ không có bộ đệm stencil.
  • Framebuffer mờ sẽ không có kênh alpha trừ khi thuộc tính alphatrue khi tạo lớp.
  • XR compositor giả định rằng framebuffer mờ sử dụng màu với alpha được nhân trước, bất kể thuộc tính ngữ cảnh premultipliedAlpha của ngữ cảnh WebGL có được đặt hay không.

Note: Các thuộc tính depthstencil không cần được hỗ trợ để trình duyệt được coi là có hỗ trợ WebGL đầy đủ.

Cấu hình mặc định của framebuffer mới

Khi tạo một XRWebGLLayer mới, framebuffer mới của nó được khởi tạo giống như framebuffer mặc định cho bất kỳ giao diện WebGL nào:

  • Bộ đệm màu được cấu hình với giá trị clear được đặt thành màu (0, 0, 0, 0) (có nghĩa là màu đen trong suốt).
  • Giá trị clear của bộ đệm độ sâu là số 1.0.
  • Bộ đệm stencil được lấp đầy bằng 0.

Ví dụ

Ví dụ này lấy XRWebGLLayer cho một phiên và sau đó truyền framebuffer của nó vào hàm bindFramebuffer() của ngữ cảnh WebGL.

js
let glLayer = xrSession.renderState.baseLayer;
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);

Thông số kỹ thuật

Specification
WebXR Device API
# dom-xrwebgllayer-framebuffer

Tương thích trình duyệt

Xem thêm