XRWebGLBinding:createProjectionLayer() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

XRWebGLBinding 接口的 createProjectionLayer() 方法返回一个 XRProjectionLayer 对象,该对象是一个填充观察者整个视口的图层,并以接近设备的本机帧率进行刷新。

语法

js
createProjectionLayer(options)

参数

options

一个用于配置 XRProjectionLayer 的对象。

textureType 可选

一个定义图层纹理类型的字符串。可能的值

texture

XRWebGLSubImage 的纹理类型为 gl.TEXTURE_2D

texture-array

XRWebGLSubImage 的纹理类型将是 gl.TEXTURE_2D_ARRAY(仅限 WebGL 2 上下文)。默认值为 texture

colorFormat 可选

一个 GLenum,用于定义颜色纹理数据的类型。可能的值:

  • gl.RGB
  • gl.RGBA 此外,对于启用了 EXT_sRGB 扩展的上下文:
  • ext.SRGB_EXT
  • ext.SRGB_ALPHA_EXT 此外,对于 WebGL2RenderingContext 上下文:
  • gl.RGBA8
  • gl.RGB8
  • gl.SRGB8
  • gl.RGB8_ALPHA8 默认值为 gl.RGBA
depthFormat 可选

一个 GLenum,定义深度纹理数据的类型,或者 0 表示图层不应提供深度纹理。(在这种情况下,XRProjectionLayer.ignoreDepthValues 将为 true。)可能的值在启用 WEBGL_depth_texture 扩展的 WebGLRenderingContext 上下文中,或者在 WebGL2RenderingContext 上下文中(无需扩展)

  • gl.DEPTH_COMPONENT
  • gl.DEPTH_STENCIL 此外,对于 WebGL2RenderingContext 上下文:
  • gl.DEPTH_COMPONENT24
  • gl.DEPTH24_STENCIL24 默认值为 gl.DEPTH_COMPONENT
scaleFactor 可选

一个浮点值,用于在复合期间缩放图层。值为 1.0 表示帧缓冲区的默认像素大小。(另请参阅 XRWebGLLayer.getNativeFramebufferScaleFactor()。)与其他图层不同,XRProjectionLayer 无法使用显式的像素宽度和高度创建,因为其大小由硬件推断。(投影图层会填充观察者的整个视口。)

返回值

一个 XRProjectionLayer 对象。

示例

在 WebGL 2 上下文中创建一个 XRProjectionLayer

textureType 选项允许分配一个纹理数组,其中每个 XRView 都将渲染到数组的一个独立级别中。这允许进行一些渲染优化,例如使用 WebGL 2 上下文中可用的 OVR_multiview2 扩展。

js
function onXRSessionStarted(xrSession) {
  const glCanvas = document.createElement("canvas");
  const gl = glCanvas.getContext("webgl2", { xrCompatible: true });
  const xrGlBinding = new XRWebGLBinding(xrSession, gl);
  const projectionLayer = xrGlBinding.createProjectionLayer({
    textureType: "texture-array",
  });
  xrSession.updateRenderState({
    layers: [projectionLayer],
  });
}

规范

规范
WebXR Layers API Level 1
# dom-xrwebglbinding-createprojectionlayer

浏览器兼容性

另见