@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
69 lines • 3.17 kB
JavaScript
import { WebXRWebGPUCompositionLayerRenderTargetTextureProvider, WebXRWebGPUCompositionLayerWrapper } from "./WebXRWebGPUCompositionLayer.js";
/**
* Wraps xr projection layers for the WebGPU (XRGPUBinding) backend.
* Mirrors {@link WebXRProjectionLayerWrapper} for WebGPU.
* @internal
*/
export class WebXRWebGPUProjectionLayerWrapper extends WebXRWebGPUCompositionLayerWrapper {
constructor(layer, isMultiview, xrGPUBinding, depthStencilFormat) {
super(() => layer.textureWidth, () => layer.textureHeight, layer, "XRProjectionLayer", isMultiview, (sessionManager) => new WebXRWebGPUProjectionLayerRenderTargetTextureProvider(sessionManager, xrGPUBinding, this, depthStencilFormat));
this.layer = layer;
}
}
/**
* Provides render target textures and other important rendering information for a given XRProjectionLayer
* on the WebGPU backend.
* @internal
*/
class WebXRWebGPUProjectionLayerRenderTargetTextureProvider extends WebXRWebGPUCompositionLayerRenderTargetTextureProvider {
constructor(_xrSessionManager, _xrGPUBinding, layerWrapper, depthStencilFormat) {
super(_xrSessionManager, _xrGPUBinding, layerWrapper, depthStencilFormat);
this.layerWrapper = layerWrapper;
this._projectionLayer = layerWrapper.layer;
}
_getSubImageForView(view) {
return this._xrGPUBinding.getViewSubImage(this._projectionLayer, view);
}
getRenderTargetTextureForView(view) {
return this._getRenderTargetForSubImage(this._getSubImageForView(view), view.eye);
}
getRenderTargetTextureForEye(eye) {
const lastSubImage = this._lastSubImages.get(eye);
if (lastSubImage) {
return this._getRenderTargetForSubImage(lastSubImage, eye);
}
return null;
}
trySetViewportForView(viewport, view) {
const subImage = this._lastSubImages.get(view.eye) || this._getSubImageForView(view);
if (subImage) {
this._setViewportForSubImage(viewport, subImage);
return true;
}
return false;
}
}
/**
* The default depth/stencil format used for a WebGPU projection layer.
* Mirrors the WebGL default (DEPTH24_STENCIL8).
* @internal
*/
export const DefaultXRGPUProjectionLayerDepthStencilFormat = "depth24plus-stencil8";
/**
* Builds the default XRGPUProjectionLayerInit for a WebGPU projection layer.
* The color format must be the binding's preferred color format, so it is provided by the caller.
* @param colorFormat the preferred color format reported by the XRGPUBinding
* @param depthStencilFormat the depth/stencil format to request (defaults to depth24plus-stencil8)
* @returns the projection layer init to pass to XRGPUBinding.createProjectionLayer
* @internal
*/
export function CreateDefaultXRGPUProjectionLayerInit(colorFormat, depthStencilFormat = DefaultXRGPUProjectionLayerDepthStencilFormat) {
return {
colorFormat,
depthStencilFormat,
// GPUTextureUsage.RENDER_ATTACHMENT (0x10) — the spec default, stated explicitly here.
textureUsage: 0x10,
scaleFactor: 1.0,
};
}
//# sourceMappingURL=WebXRWebGPUProjectionLayer.js.map