files/en-us/web/api/xrwebglbinding/createprojectionlayer/index.md
{{APIRef("WebXR Device API")}}{{SeeCompatTable}}
The createProjectionLayer() method of the {{domxref("XRWebGLBinding")}} interface returns an {{domxref("XRProjectionLayer")}} object which is a layer that fills the entire view of the observer and is refreshed close to the device's native frame rate.
createProjectionLayer(options)
options
textureType {{optional_inline}}
texture
gl.TEXTURE_2D.texture-array
gl.TEXTURE_2D_ARRAY (WebGL 2 contexts only).
The default value is texture.colorFormat {{optional_inline}}
gl.RGBgl.RGBA
Additionally, for contexts with the {{domxref("EXT_sRGB")}} extension enabled:ext.SRGB_EXText.SRGB_ALPHA_EXT
Additionally, for {{domxref("WebGL2RenderingContext")}} contexts:gl.RGBA8gl.RGB8gl.SRGB8gl.RGB8_ALPHA8
The default value is gl.RGBA.depthFormat {{optional_inline}}
0 indicating that the layer should not provide a depth texture. (In that case {{domxref("XRProjectionLayer.ignoreDepthValues")}} will be true.)
Possible values within {{domxref("WebGLRenderingContext")}} contexts with the {{domxref("WEBGL_depth_texture")}} extension enabled, or within {{domxref("WebGL2RenderingContext")}} contexts (no extension required):
gl.DEPTH_COMPONENTgl.DEPTH_STENCIL
Additionally, for {{domxref("WebGL2RenderingContext")}} contexts:gl.DEPTH_COMPONENT24gl.DEPTH24_STENCIL24
The default value is gl.DEPTH_COMPONENT.scaleFactor {{optional_inline}}
1.0 represents the default pixel size for the frame buffer. (See also {{domxref("XRWebGLLayer.getNativeFramebufferScaleFactor_static", "XRWebGLLayer.getNativeFramebufferScaleFactor()")}}.) Unlike other layers, the XRProjectionLayer can't be created with an explicit pixel width and height, because the size is inferred by the hardware. (Projection layers fill the observer's entire view.)An {{domxref("XRProjectionLayer")}} object.
XRProjectionLayer in a WebGL 2 contextThe textureType option allows allocating a texture array instead, in which every {{domxref("XRView")}} will be rendered into a separate level of the array. This allows for some rendering optimizations, such as the use of the {{domxref("OVR_multiview2")}} extension available in WebGL 2 contexts.
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],
});
}
{{Specifications}}
{{Compat}}