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 |
浏览器兼容性
加载中…