@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.
60 lines (59 loc) • 3.74 kB
TypeScript
import { type RenderTargetTexture } from "../../../Materials/Textures/renderTargetTexture.js";
import { type Viewport } from "../../../Maths/math.viewport.js";
import { Observable } from "../../../Misc/observable.js";
import { type WebXRLayerRenderTargetTexture } from "../../webXRLayerRenderTargetTexture.js";
import { type WebXRLayerType, WebXRLayerWrapper } from "../../webXRLayerWrapper.js";
import { type WebXRLayerRenderTargetTextureProvider } from "../../webXRRenderTargetTextureProvider.js";
import { WebXRWebGPURenderTargetTextureProvider } from "../../webXRWebGPURenderTargetTextureProvider.js";
import { type WebXRSessionManager } from "../../webXRSessionManager.js";
import { type Nullable } from "../../../types.js";
/**
* Wraps xr composition layers for the WebGPU (XRGPUBinding) backend.
* Mirrors {@link WebXRCompositionLayerWrapper} for WebGPU.
* @internal
*/
export declare class WebXRWebGPUCompositionLayerWrapper extends WebXRLayerWrapper {
getWidth: () => number;
getHeight: () => number;
readonly layer: XRCompositionLayer;
readonly layerType: WebXRLayerType;
readonly isMultiview: boolean;
createRTTProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider;
constructor(getWidth: () => number, getHeight: () => number, layer: XRCompositionLayer, layerType: WebXRLayerType, isMultiview: boolean, createRTTProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider);
}
/**
* Provides render target textures and other important rendering information for a given XRCompositionLayer
* on the WebGPU backend. Mirrors {@link WebXRCompositionLayerRenderTargetTextureProvider}, but wraps
* {@link XRGPUSubImage} GPUTextures instead of WebGL textures.
* @internal
*/
export declare class WebXRWebGPUCompositionLayerRenderTargetTextureProvider extends WebXRWebGPURenderTargetTextureProvider {
protected readonly _xrSessionManager: WebXRSessionManager;
protected readonly _xrGPUBinding: XRGPUBinding;
readonly layerWrapper: WebXRWebGPUCompositionLayerWrapper;
protected readonly _depthStencilFormat?: GPUTextureFormat | undefined;
protected _lastSubImages: Map<XREye, XRGPUSubImage>;
/**
* Per-eye render targets, indexed by eye (0 = left/none, 1 = right). Kept separate from the base
* `_renderTargetTextures` registry: that array is an append-only owned list (each entry is disposed once
* on provider dispose), whereas this map is a mutable per-eye slot. Reusing `_renderTargetTextures` as
* both would let a rebuilt eye target both stay in the registry (leaking / double-disposing the old one)
* and grow the registry unboundedly on repeated size changes.
*/
protected _renderTargetTexturesByEye: WebXRLayerRenderTargetTexture[];
private _compositionLayer;
/**
* Fires every time a new render target texture is created (either for eye, for view, or for the entire frame)
*/
onRenderTargetTextureCreatedObservable: Observable<{
texture: RenderTargetTexture;
eye?: XREye;
}>;
constructor(_xrSessionManager: WebXRSessionManager, _xrGPUBinding: XRGPUBinding, layerWrapper: WebXRWebGPUCompositionLayerWrapper, _depthStencilFormat?: GPUTextureFormat | undefined);
protected _getRenderTargetForSubImage(subImage: XRGPUSubImage, eye?: XREye): WebXRLayerRenderTargetTexture;
private _getSubImageForEye;
getRenderTargetTextureForEye(eye?: XREye): Nullable<RenderTargetTexture>;
getRenderTargetTextureForView(view?: XRView): Nullable<RenderTargetTexture>;
protected _setViewportForSubImage(viewport: Viewport, subImage: XRGPUSubImage): void;
trySetViewportForView(viewport: Viewport, view: XRView): boolean;
}