123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- import type { Scene } from "../../scene";
- import type { Engine } from "../../Engines/engine";
- import { Texture } from "../../Materials/Textures/texture";
- import { RenderTargetTexture } from "../../Materials/Textures/renderTargetTexture";
- import "../../Engines/Extensions/engine.multiRender";
- import type { InternalTexture } from "./internalTexture";
- /**
- * Creation options of the multi render target texture.
- */
- export interface IMultiRenderTargetOptions {
- /**
- * Define if the texture needs to create mip maps after render.
- */
- generateMipMaps?: boolean;
- /**
- * Define the types of all the draw buffers (render textures) we want to create
- */
- types?: number[];
- /**
- * Define the sampling modes of all the draw buffers (render textures) we want to create
- */
- samplingModes?: number[];
- /**
- * Define if sRGB format should be used for each of the draw buffers (render textures) we want to create
- */
- useSRGBBuffers?: boolean[];
- /**
- * Define if a depth buffer is required
- */
- generateDepthBuffer?: boolean;
- /**
- * Define if a stencil buffer is required
- */
- generateStencilBuffer?: boolean;
- /**
- * Define if a depth texture is required instead of a depth buffer
- */
- generateDepthTexture?: boolean;
- /**
- * Define the internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...) of all the draw buffers (render textures) we want to create
- */
- formats?: number[];
- /**
- * Define depth texture format to use
- */
- depthTextureFormat?: number;
- /**
- * Define the number of desired draw buffers (render textures)
- */
- textureCount?: number;
- /**
- * Define if aspect ratio should be adapted to the texture or stay the scene one
- */
- doNotChangeAspectRatio?: boolean;
- /**
- * Define the default type of the buffers we are creating
- */
- defaultType?: number;
- /**
- * Define the default type of the buffers we are creating
- */
- drawOnlyOnFirstAttachmentByDefault?: boolean;
- /**
- * Define the type of texture at each attahment index (of Constants.TEXTURE_2D, .TEXTURE_2D_ARRAY, .TEXTURE_CUBE_MAP, .TEXTURE_CUBE_MAP_ARRAY, .TEXTURE_3D).
- * You can also use the -1 value to indicate that no texture should be created but that you will assign a texture to that attachment index later.
- * Can be useful when you want to attach several layers of the same 2DArrayTexture / 3DTexture or several faces of the same CubeMapTexture: Use the setInternalTexture
- * method for that purpose, after the MultiRenderTarget has been created.
- */
- targetTypes?: number[];
- /**
- * Define the face index of each texture in the textures array (if applicable, given the corresponding targetType) at creation time (for Constants.TEXTURE_CUBE_MAP and .TEXTURE_CUBE_MAP_ARRAY).
- * Can be changed at any time by calling setLayerAndFaceIndices or setLayerAndFaceIndex
- */
- faceIndex?: number[];
- /**
- * Define the layer index of each texture in the textures array (if applicable, given the corresponding targetType) at creation time (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY).
- * Can be changed at any time by calling setLayerAndFaceIndices or setLayerAndFaceIndex
- */
- layerIndex?: number[];
- /**
- * Define the number of layer of each texture in the textures array (if applicable, given the corresponding targetType) (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY)
- */
- layerCounts?: number[];
- /**
- * Define the names of the textures (used for debugging purpose)
- */
- labels?: string[];
- /**
- * Label of the RenderTargetWrapper (used for debugging only)
- */
- label?: string;
- }
- /**
- * A multi render target, like a render target provides the ability to render to a texture.
- * Unlike the render target, it can render to several draw buffers (render textures) in one draw.
- * This is specially interesting in deferred rendering or for any effects requiring more than
- * just one color from a single pass.
- */
- export declare class MultiRenderTarget extends RenderTargetTexture {
- private _textures;
- private _multiRenderTargetOptions;
- private _count;
- private _drawOnlyOnFirstAttachmentByDefault;
- private _textureNames?;
- /**
- * Get if draw buffers (render textures) are currently supported by the used hardware and browser.
- */
- get isSupported(): boolean;
- /**
- * Get the list of textures generated by the multi render target.
- */
- get textures(): Texture[];
- /**
- * Gets the number of textures in this MRT. This number can be different from `_textures.length` in case a depth texture is generated.
- */
- get count(): number;
- /**
- * Get the depth texture generated by the multi render target if options.generateDepthTexture has been set
- */
- get depthTexture(): Texture;
- /**
- * Set the wrapping mode on U of all the textures we are rendering to.
- * Can be any of the Texture. (CLAMP_ADDRESSMODE, MIRROR_ADDRESSMODE or WRAP_ADDRESSMODE)
- */
- set wrapU(wrap: number);
- /**
- * Set the wrapping mode on V of all the textures we are rendering to.
- * Can be any of the Texture. (CLAMP_ADDRESSMODE, MIRROR_ADDRESSMODE or WRAP_ADDRESSMODE)
- */
- set wrapV(wrap: number);
- /**
- * Instantiate a new multi render target texture.
- * A multi render target, like a render target provides the ability to render to a texture.
- * Unlike the render target, it can render to several draw buffers (render textures) in one draw.
- * This is specially interesting in deferred rendering or for any effects requiring more than
- * just one color from a single pass.
- * @param name Define the name of the texture
- * @param size Define the size of the buffers to render to
- * @param count Define the number of target we are rendering into
- * @param scene Define the scene the texture belongs to
- * @param options Define the options used to create the multi render target
- * @param textureNames Define the names to set to the textures (if count \> 0 - optional)
- */
- constructor(name: string, size: any, count: number, scene?: Scene, options?: IMultiRenderTargetOptions, textureNames?: string[]);
- private _initTypes;
- private _createInternaTextureIndexMapping;
- /**
- * @internal
- */
- _rebuild(fromContextLost?: boolean, forceFullRebuild?: boolean, textureNames?: string[]): void;
- private _createInternalTextures;
- private _releaseTextures;
- private _createTextures;
- /**
- * Replaces an internal texture within the MRT. Useful to share textures between MultiRenderTarget.
- * @param texture The new texture to set in the MRT
- * @param index The index of the texture to replace
- * @param disposePrevious Set to true if the previous internal texture should be disposed
- */
- setInternalTexture(texture: InternalTexture, index: number, disposePrevious?: boolean): void;
- /**
- * Changes an attached texture's face index or layer.
- * @param index The index of the texture to modify the attachment of
- * @param layerIndex The layer index of the texture to be attached to the framebuffer
- * @param faceIndex The face index of the texture to be attached to the framebuffer
- */
- setLayerAndFaceIndex(index: number, layerIndex?: number, faceIndex?: number): void;
- /**
- * Changes every attached texture's face index or layer.
- * @param layerIndices The layer indices of the texture to be attached to the framebuffer
- * @param faceIndices The face indices of the texture to be attached to the framebuffer
- */
- setLayerAndFaceIndices(layerIndices: number[], faceIndices: number[]): void;
- /**
- * Define the number of samples used if MSAA is enabled.
- */
- get samples(): number;
- set samples(value: number);
- /**
- * Resize all the textures in the multi render target.
- * Be careful as it will recreate all the data in the new texture.
- * @param size Define the new size
- */
- resize(size: any): void;
- /**
- * Changes the number of render targets in this MRT
- * Be careful as it will recreate all the data in the new texture.
- * @param count new texture count
- * @param options Specifies texture types and sampling modes for new textures
- * @param textureNames Specifies the names of the textures (optional)
- */
- updateCount(count: number, options?: IMultiRenderTargetOptions, textureNames?: string[]): void;
- protected _unbindFrameBuffer(engine: Engine, faceIndex: number): void;
- /**
- * Dispose the render targets and their associated resources
- * @param doNotDisposeInternalTextures if set to true, internal textures won't be disposed (default: false).
- */
- dispose(doNotDisposeInternalTextures?: boolean): void;
- /**
- * Release all the underlying texture used as draw buffers (render textures).
- */
- releaseInternalTextures(): void;
- }
|