@onerjs/core 8.27.1 → 8.27.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/runtimeAnimation.js +6 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/camera.d.ts +2 -2
- package/Cameras/camera.js +2 -2
- package/Cameras/camera.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +19 -2
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +72 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +8 -3
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +34 -12
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +0 -12
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +0 -45
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.d.ts +7 -3
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +18 -32
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +2 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/Layers/layerSceneComponent.js +3 -3
- package/Layers/layerSceneComponent.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.d.ts +4 -1
- package/Lights/Clustered/clusteredLightContainer.js +17 -2
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
- package/Lights/index.d.ts +1 -0
- package/Lights/index.js +1 -0
- package/Lights/index.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +2 -0
- package/Materials/Textures/renderTargetTexture.js +3 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Navigation/INavigationEngine.d.ts +17 -5
- package/Navigation/INavigationEngine.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +3 -2
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +4 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +10 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.d.ts +3 -1
- package/PostProcesses/motionBlurPostProcess.js +13 -4
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +2 -0
- package/Rendering/objectRenderer.js +13 -0
- package/Rendering/objectRenderer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTargetTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/renderTargetTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { Nullable, Immutable } from \"../../types\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport type { RenderTargetCreationOptions, TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { PostProcessManager } from \"../../PostProcesses/postProcessManager\";\r\nimport type { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport type { IRenderTargetTexture, RenderTargetWrapper } from \"../../Engines/renderTargetWrapper\";\r\n\r\nimport type { Material } from \"../material\";\r\nimport { FloorPOT, NearestPOT } from \"../../Misc/tools.functions\";\r\nimport { Effect } from \"../effect\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { ObjectRenderer } from \"core/Rendering/objectRenderer\";\r\n\r\ndeclare module \"../effect\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Effect {\r\n /**\r\n * Sets a depth stencil texture from a render target on the engine to be used in the shader.\r\n * @param channel Name of the sampler variable.\r\n * @param texture Texture to set.\r\n */\r\n setDepthStencilTexture(channel: string, texture: Nullable<RenderTargetTexture>): void;\r\n }\r\n}\r\n\r\n/**\r\n * Sets a depth stencil texture from a render target on the engine to be used in the shader.\r\n * @param channel Name of the sampler variable.\r\n * @param texture Texture to set.\r\n */\r\nEffect.prototype.setDepthStencilTexture = function (channel: string, texture: Nullable<RenderTargetTexture>): void {\r\n this._engine.setDepthStencilTexture(this._samplers[channel], this._uniforms[channel], texture, channel);\r\n};\r\n\r\n/**\r\n * Options for the RenderTargetTexture constructor\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface RenderTargetTextureOptions {\r\n /** True (default: false) if mipmaps need to be generated after render */\r\n generateMipMaps?: boolean;\r\n\r\n /** True (default) to not change the aspect ratio of the scene in the RTT */\r\n doNotChangeAspectRatio?: boolean;\r\n\r\n /** The type of the buffer in the RTT (byte (default), half float, float...) */\r\n type?: number;\r\n\r\n /** True (default: false) if a cube texture needs to be created */\r\n isCube?: boolean;\r\n\r\n /** The sampling mode to be used with the render target (Trilinear (default), Linear, Nearest...) */\r\n samplingMode?: number;\r\n\r\n /** True (default) to generate a depth buffer */\r\n generateDepthBuffer?: boolean;\r\n\r\n /** True (default: false) to generate a stencil buffer */\r\n generateStencilBuffer?: boolean;\r\n\r\n /** True (default: false) if multiple textures need to be created (Draw Buffers) */\r\n isMulti?: boolean;\r\n\r\n /** The internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...) */\r\n format?: number;\r\n\r\n /** True (default: false) if the texture allocation should be delayed */\r\n delayAllocation?: boolean;\r\n\r\n /** Sample count to use when creating the RTT */\r\n samples?: number;\r\n\r\n /** specific flags to use when creating the texture (e.g., Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures) */\r\n creationFlags?: number;\r\n\r\n /** True (default: false) to indicate that no color target should be created. (e.g., if you only want to write to the depth buffer) */\r\n noColorAttachment?: boolean;\r\n\r\n /** Specifies the internal texture to use directly instead of creating one (ignores `noColorAttachment` flag when set) **/\r\n colorAttachment?: InternalTexture;\r\n\r\n /** True (default: false) to create a SRGB texture */\r\n useSRGBBuffer?: boolean;\r\n\r\n /** Defines the underlying texture texture space */\r\n gammaSpace?: boolean;\r\n\r\n /** If not provided (default), a new object renderer instance will be created */\r\n existingObjectRenderer?: ObjectRenderer;\r\n}\r\n\r\n/**\r\n * This Helps creating a texture that will be created from a camera in your scene.\r\n * It is basically a dynamic texture that could be used to create special effects for instance.\r\n * Actually, It is the base of lot of effects in the framework like post process, shadows, effect layers and rendering pipelines...\r\n */\r\nexport class RenderTargetTexture extends Texture implements IRenderTargetTexture {\r\n /**\r\n * The texture will only be rendered once which can be useful to improve performance if everything in your render is static for instance.\r\n */\r\n public static readonly REFRESHRATE_RENDER_ONCE: number = ObjectRenderer.REFRESHRATE_RENDER_ONCE;\r\n /**\r\n * The texture will be rendered every frame and is recommended for dynamic contents.\r\n */\r\n public static readonly REFRESHRATE_RENDER_ONEVERYFRAME: number = ObjectRenderer.REFRESHRATE_RENDER_ONEVERYFRAME;\r\n /**\r\n * The texture will be rendered every 2 frames which could be enough if your dynamic objects are not\r\n * the central point of your effect and can save a lot of performances.\r\n */\r\n public static readonly REFRESHRATE_RENDER_ONEVERYTWOFRAMES: number = ObjectRenderer.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;\r\n\r\n /**\r\n * Use this predicate to dynamically define the list of mesh you want to render.\r\n * If set, the renderList property will be overwritten.\r\n */\r\n public get renderListPredicate(): (AbstractMesh: AbstractMesh) => boolean {\r\n return this._objectRenderer.renderListPredicate;\r\n }\r\n\r\n public set renderListPredicate(value: (AbstractMesh: AbstractMesh) => boolean) {\r\n this._objectRenderer.renderListPredicate = value;\r\n }\r\n\r\n /**\r\n * Use this list to define the list of mesh you want to render.\r\n */\r\n public get renderList(): Nullable<Array<AbstractMesh>> {\r\n return this._objectRenderer.renderList;\r\n }\r\n\r\n public set renderList(value: Nullable<Array<AbstractMesh>>) {\r\n this._objectRenderer.renderList = value;\r\n }\r\n\r\n /**\r\n * Define the list of particle systems to render in the texture. If not provided, will render all the particle systems of the scene.\r\n * Note that the particle systems are rendered only if renderParticles is set to true.\r\n */\r\n public get particleSystemList(): Nullable<Array<IParticleSystem>> {\r\n return this._objectRenderer.particleSystemList;\r\n }\r\n\r\n public set particleSystemList(value: Nullable<Array<IParticleSystem>>) {\r\n this._objectRenderer.particleSystemList = value;\r\n }\r\n\r\n /**\r\n * Use this function to overload the renderList array at rendering time.\r\n * Return null to render with the current renderList, else return the list of meshes to use for rendering.\r\n * For 2DArray RTT, layerOrFace is the index of the layer that is going to be rendered, else it is the faceIndex of\r\n * the cube (if the RTT is a cube, else layerOrFace=0).\r\n * The renderList passed to the function is the current render list (the one that will be used if the function returns null).\r\n * The length of this list is passed through renderListLength: don't use renderList.length directly because the array can\r\n * hold dummy elements!\r\n */\r\n public get getCustomRenderList(): Nullable<\r\n (layerOrFace: number, renderList: Nullable<Immutable<Array<AbstractMesh>>>, renderListLength: number) => Nullable<Array<AbstractMesh>>\r\n > {\r\n return this._objectRenderer.getCustomRenderList;\r\n }\r\n\r\n public set getCustomRenderList(\r\n value: Nullable<(layerOrFace: number, renderList: Nullable<Immutable<Array<AbstractMesh>>>, renderListLength: number) => Nullable<Array<AbstractMesh>>>\r\n ) {\r\n this._objectRenderer.getCustomRenderList = value;\r\n }\r\n\r\n /**\r\n * Define if particles should be rendered in your texture (default: true).\r\n */\r\n public get renderParticles() {\r\n return this._objectRenderer.renderParticles;\r\n }\r\n\r\n public set renderParticles(value: boolean) {\r\n this._objectRenderer.renderParticles = value;\r\n }\r\n\r\n /**\r\n * Define if sprites should be rendered in your texture (default: false).\r\n */\r\n public get renderSprites() {\r\n return this._objectRenderer.renderSprites;\r\n }\r\n\r\n public set renderSprites(value: boolean) {\r\n this._objectRenderer.renderSprites = value;\r\n }\r\n\r\n /**\r\n * Define if bounding box rendering should be enabled (still subject to Mesh.showBoundingBox or scene.forceShowBoundingBoxes). (Default: false).\r\n */\r\n public get enableBoundingBoxRendering() {\r\n return this._objectRenderer.enableBoundingBoxRendering;\r\n }\r\n\r\n public set enableBoundingBoxRendering(value: boolean) {\r\n this._objectRenderer.enableBoundingBoxRendering = value;\r\n }\r\n\r\n /**\r\n * Define if outline/overlay rendering should be enabled (still subject to Mesh.renderOutline/Mesh.renderOverlay). (Default: true).\r\n */\r\n public get enableOutlineRendering() {\r\n return this._objectRenderer.enableOutlineRendering;\r\n }\r\n\r\n public set enableOutlineRendering(value: boolean) {\r\n this._objectRenderer.enableOutlineRendering = value;\r\n }\r\n\r\n /**\r\n * Force checking the layerMask property even if a custom list of meshes is provided (ie. if renderList is not undefined) (default: false).\r\n */\r\n public get forceLayerMaskCheck() {\r\n return this._objectRenderer.forceLayerMaskCheck;\r\n }\r\n\r\n public set forceLayerMaskCheck(value: boolean) {\r\n this._objectRenderer.forceLayerMaskCheck = value;\r\n }\r\n\r\n /**\r\n * Define the camera used to render the texture.\r\n */\r\n public get activeCamera(): Nullable<Camera> {\r\n return this._objectRenderer.activeCamera;\r\n }\r\n\r\n public set activeCamera(value: Nullable<Camera>) {\r\n this._objectRenderer.activeCamera = value;\r\n }\r\n\r\n /**\r\n * Define the camera used to calculate the LOD of the objects.\r\n * If not defined, activeCamera will be used. If not defined nor activeCamera, scene's active camera will be used.\r\n */\r\n public get cameraForLOD(): Nullable<Camera> {\r\n return this._objectRenderer.cameraForLOD;\r\n }\r\n\r\n public set cameraForLOD(value: Nullable<Camera>) {\r\n this._objectRenderer.cameraForLOD = value;\r\n }\r\n\r\n /**\r\n * If true, the renderer will render all objects without any image processing applied.\r\n * If false (default value), the renderer will use the current setting of the scene's image processing configuration.\r\n */\r\n public get disableImageProcessing() {\r\n return this._objectRenderer.disableImageProcessing;\r\n }\r\n\r\n public set disableImageProcessing(value: boolean) {\r\n this._objectRenderer.disableImageProcessing = value;\r\n }\r\n\r\n /**\r\n * Override the mesh isReady function with your own one.\r\n */\r\n public get customIsReadyFunction(): (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => boolean {\r\n return this._objectRenderer.customIsReadyFunction;\r\n }\r\n\r\n public set customIsReadyFunction(value: (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => boolean) {\r\n this._objectRenderer.customIsReadyFunction = value;\r\n }\r\n\r\n /**\r\n * Override the render function of the texture with your own one.\r\n */\r\n public get customRenderFunction(): (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>,\r\n beforeTransparents?: () => void\r\n ) => void {\r\n return this._objectRenderer.customRenderFunction;\r\n }\r\n\r\n public set customRenderFunction(\r\n value: (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>,\r\n beforeTransparents?: () => void\r\n ) => void\r\n ) {\r\n this._objectRenderer.customRenderFunction = value;\r\n }\r\n\r\n /**\r\n * Define if camera post processes should be use while rendering the texture.\r\n */\r\n public useCameraPostProcesses: boolean;\r\n /**\r\n * Define if the camera viewport should be respected while rendering the texture or if the render should be done to the entire texture.\r\n */\r\n public ignoreCameraViewport: boolean = false;\r\n\r\n private _postProcessManager: Nullable<PostProcessManager>;\r\n\r\n /**\r\n * Post-processes for this render target\r\n */\r\n public get postProcesses() {\r\n return this._postProcesses;\r\n }\r\n private _postProcesses: PostProcess[];\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n private get _prePassEnabled() {\r\n return !!this._prePassRenderTarget && this._prePassRenderTarget.enabled;\r\n }\r\n\r\n /**\r\n * An event triggered when the texture is unbind.\r\n */\r\n public onBeforeBindObservable = new Observable<RenderTargetTexture>();\r\n\r\n /**\r\n * An event triggered when the texture is unbind.\r\n */\r\n public onAfterUnbindObservable = new Observable<RenderTargetTexture>();\r\n\r\n private _onAfterUnbindObserver: Nullable<Observer<RenderTargetTexture>>;\r\n /**\r\n * Set a after unbind callback in the texture.\r\n * This has been kept for backward compatibility and use of onAfterUnbindObservable is recommended.\r\n */\r\n public set onAfterUnbind(callback: () => void) {\r\n if (this._onAfterUnbindObserver) {\r\n this.onAfterUnbindObservable.remove(this._onAfterUnbindObserver);\r\n }\r\n this._onAfterUnbindObserver = this.onAfterUnbindObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the texture\r\n */\r\n public get onBeforeRenderObservable() {\r\n return this._objectRenderer.onBeforeRenderObservable;\r\n }\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<number>>;\r\n /**\r\n * Set a before render callback in the texture.\r\n * This has been kept for backward compatibility and use of onBeforeRenderObservable is recommended.\r\n */\r\n public set onBeforeRender(callback: (faceIndex: number) => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the texture\r\n */\r\n public get onAfterRenderObservable() {\r\n return this._objectRenderer.onAfterRenderObservable;\r\n }\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<number>>;\r\n /**\r\n * Set a after render callback in the texture.\r\n * This has been kept for backward compatibility and use of onAfterRenderObservable is recommended.\r\n */\r\n public set onAfterRender(callback: (faceIndex: number) => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after the texture clear\r\n */\r\n public onClearObservable = new Observable<AbstractEngine>();\r\n\r\n private _onClearObserver: Nullable<Observer<AbstractEngine>>;\r\n /**\r\n * Set a clear callback in the texture.\r\n * This has been kept for backward compatibility and use of onClearObservable is recommended.\r\n */\r\n public set onClear(callback: (Engine: AbstractEngine) => void) {\r\n if (this._onClearObserver) {\r\n this.onClearObservable.remove(this._onClearObserver);\r\n }\r\n this._onClearObserver = this.onClearObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered when the texture is resized.\r\n */\r\n public onResizeObservable = new Observable<RenderTargetTexture>();\r\n\r\n /**\r\n * Define the clear color of the Render Target if it should be different from the scene.\r\n */\r\n public clearColor: Color4;\r\n /** @internal */\r\n public _size: TextureSize;\r\n protected _initialSizeParameter: TextureSize | { ratio: number };\r\n protected _sizeRatio: Nullable<number>;\r\n /** @internal */\r\n public _generateMipMaps: boolean;\r\n /** @internal */\r\n public _cleared = false;\r\n /**\r\n * Skip the initial clear of the rtt at the beginning of the frame render loop\r\n */\r\n public skipInitialClear = false;\r\n /** @internal */\r\n public get _waitingRenderList() {\r\n return this._objectRenderer._waitingRenderList;\r\n }\r\n\r\n /** @internal */\r\n public set _waitingRenderList(value: string[] | undefined) {\r\n this._objectRenderer._waitingRenderList = value;\r\n }\r\n\r\n protected _objectRenderer: ObjectRenderer;\r\n protected _doNotChangeAspectRatio: boolean;\r\n protected _textureMatrix: Matrix;\r\n protected _samples = 1;\r\n protected _renderTargetOptions: RenderTargetCreationOptions;\r\n private _canRescale = true;\r\n protected _renderTarget: Nullable<RenderTargetWrapper> = null;\r\n private _currentFaceIndex: number;\r\n private _currentLayer: number;\r\n private _currentUseCameraPostProcess: boolean;\r\n private _currentDumpForDebug: boolean;\r\n private _dontDisposeObjectRenderer = false;\r\n\r\n /**\r\n * Current render pass id of the render target texture. Note it can change over the rendering as there's a separate id for each face of a cube / each layer of an array layer!\r\n */\r\n public get renderPassId(): number {\r\n return this._objectRenderer.renderPassId;\r\n }\r\n\r\n /**\r\n * Gets the render pass ids used by the render target texture. For a single render target the array length will be 1, for a cube texture it will be 6 and for\r\n * a 2D texture array it will return an array of ids the size of the 2D texture array\r\n */\r\n public get renderPassIds(): readonly number[] {\r\n return this._objectRenderer.renderPassIds;\r\n }\r\n\r\n /**\r\n * Gets the current value of the refreshId counter\r\n */\r\n public get currentRefreshId() {\r\n return this._objectRenderer.currentRefreshId;\r\n }\r\n\r\n /**\r\n * Sets a specific material to be used to render a mesh/a list of meshes in this render target texture\r\n * @param mesh mesh or array of meshes\r\n * @param material material or array of materials to use for this render pass. If undefined is passed, no specific material will be used but the regular material instead (mesh.material). It's possible to provide an array of materials to use a different material for each rendering in the case of a cube texture (6 rendering) and a 2D texture array (as many rendering as the length of the array)\r\n */\r\n public setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material | Material[]): void {\r\n this._objectRenderer.setMaterialForRendering(mesh, material);\r\n }\r\n\r\n /**\r\n * Define if the texture has multiple draw buffers or if false a single draw buffer.\r\n */\r\n public get isMulti(): boolean {\r\n return this._renderTarget?.isMulti ?? false;\r\n }\r\n\r\n /**\r\n * Gets render target creation options that were used.\r\n */\r\n public get renderTargetOptions(): RenderTargetCreationOptions {\r\n return this._renderTargetOptions;\r\n }\r\n\r\n /**\r\n * Gets the render target wrapper associated with this render target\r\n */\r\n public get renderTarget(): Nullable<RenderTargetWrapper> {\r\n return this._renderTarget;\r\n }\r\n\r\n protected _onRatioRescale(): void {\r\n if (this._sizeRatio) {\r\n this.resize(this._initialSizeParameter);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the texture (when in cube mode)\r\n * It must define where the camera used to render the texture is set\r\n */\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the texture (when in cube mode)\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n /**\r\n * In case the RTT has been created with a depth texture, get the associated\r\n * depth texture.\r\n * Otherwise, return null.\r\n */\r\n public get depthStencilTexture(): Nullable<InternalTexture> {\r\n return this._renderTarget?._depthStencilTexture ?? null;\r\n }\r\n\r\n /** @internal */\r\n public _disableEngineStages = false; // TODO: remove this when the shadow generator task (frame graph) is reworked (see https://github.com/BabylonJS/Babylon.js/pull/15962#discussion_r1874417607)\r\n\r\n private readonly _onBeforeRenderingManagerRenderObserver: Nullable<Observer<number>>;\r\n private readonly _onAfterRenderingManagerRenderObserver: Nullable<Observer<number>>;\r\n private readonly _onFastPathRenderObserver: Nullable<Observer<number>>;\r\n\r\n /**\r\n * Instantiate a render target texture. This is mainly used to render the scene off screen, to apply (for instance) post processing effects\r\n * or use a shadow or depth texture...\r\n * @param name The friendly name of the texture\r\n * @param size The size of the RTT (number if square, or {width: number, height:number} or {ratio:} to define a ratio from the main scene)\r\n * @param scene The scene the RTT belongs to. Default is the last created scene.\r\n * @param options The options for creating the render target texture.\r\n */\r\n constructor(name: string, size: TextureSize | { ratio: number }, scene?: Nullable<Scene>, options?: RenderTargetTextureOptions);\r\n\r\n /**\r\n * Instantiate a render target texture. This is mainly used to render the scene off screen, to apply (for instance) post processing effects\r\n * or use a shadow or depth texture...\r\n * @param name The friendly name of the texture\r\n * @param size The size of the RTT (number if square, or {width: number, height:number} or {ratio:} to define a ratio from the main scene)\r\n * @param scene The scene the RTT belongs to. Default is the last created scene\r\n * @param generateMipMaps True (default: false) if mipmaps need to be generated after render\r\n * @param doNotChangeAspectRatio True (default) to not change the aspect ratio of the scene in the RTT\r\n * @param type The type of the buffer in the RTT (byte (default), half float, float...)\r\n * @param isCube True (default: false) if a cube texture needs to be created\r\n * @param samplingMode The sampling mode to be used with the render target (Trilinear (default), Linear, Nearest...)\r\n * @param generateDepthBuffer True (default) to generate a depth buffer\r\n * @param generateStencilBuffer True (default: false) to generate a stencil buffer\r\n * @param isMulti True (default: false) if multiple textures need to be created (Draw Buffers)\r\n * @param format The internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...)\r\n * @param delayAllocation True (default: false) if the texture allocation should be delayed\r\n * @param samples Sample count to use when creating the RTT\r\n * @param creationFlags specific flags to use when creating the texture (e.g., Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures)\r\n * @param noColorAttachment True (default: false) to indicate that no color target should be created. (e.g., if you only want to write to the depth buffer)\r\n * @param useSRGBBuffer True (default: false) to create a SRGB texture\r\n */\r\n constructor(\r\n name: string,\r\n size: TextureSize | { ratio: number },\r\n scene?: Nullable<Scene>,\r\n generateMipMaps?: boolean,\r\n doNotChangeAspectRatio?: boolean,\r\n type?: number,\r\n isCube?: boolean,\r\n samplingMode?: number,\r\n generateDepthBuffer?: boolean,\r\n generateStencilBuffer?: boolean,\r\n isMulti?: boolean,\r\n format?: number,\r\n delayAllocation?: boolean,\r\n samples?: number,\r\n creationFlags?: number,\r\n noColorAttachment?: boolean,\r\n useSRGBBuffer?: boolean\r\n );\r\n\r\n /** @internal */\r\n constructor(\r\n name: string,\r\n size: TextureSize | { ratio: number },\r\n scene?: Nullable<Scene>,\r\n generateMipMaps: boolean | RenderTargetTextureOptions = false,\r\n doNotChangeAspectRatio: boolean = true,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n isCube = false,\r\n samplingMode = Texture.TRILINEAR_SAMPLINGMODE,\r\n generateDepthBuffer = true,\r\n generateStencilBuffer = false,\r\n isMulti = false,\r\n format = Constants.TEXTUREFORMAT_RGBA,\r\n delayAllocation = false,\r\n samples?: number,\r\n creationFlags?: number,\r\n noColorAttachment = false,\r\n useSRGBBuffer = false\r\n ) {\r\n let colorAttachment: InternalTexture | undefined = undefined;\r\n let gammaSpace = true;\r\n let existingObjectRenderer: ObjectRenderer | undefined = undefined;\r\n if (typeof generateMipMaps === \"object\") {\r\n const options = generateMipMaps;\r\n generateMipMaps = !!options.generateMipMaps;\r\n doNotChangeAspectRatio = options.doNotChangeAspectRatio ?? true;\r\n type = options.type ?? Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n isCube = !!options.isCube;\r\n samplingMode = options.samplingMode ?? Texture.TRILINEAR_SAMPLINGMODE;\r\n generateDepthBuffer = options.generateDepthBuffer ?? true;\r\n generateStencilBuffer = !!options.generateStencilBuffer;\r\n isMulti = !!options.isMulti;\r\n format = options.format ?? Constants.TEXTUREFORMAT_RGBA;\r\n delayAllocation = !!options.delayAllocation;\r\n samples = options.samples;\r\n creationFlags = options.creationFlags;\r\n noColorAttachment = !!options.noColorAttachment;\r\n useSRGBBuffer = !!options.useSRGBBuffer;\r\n colorAttachment = options.colorAttachment;\r\n gammaSpace = options.gammaSpace ?? gammaSpace;\r\n existingObjectRenderer = options.existingObjectRenderer;\r\n }\r\n\r\n super(null, scene, !generateMipMaps, undefined, samplingMode, undefined, undefined, undefined, undefined, format);\r\n\r\n scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n const engine = this.getScene()!.getEngine();\r\n\r\n this._gammaSpace = gammaSpace;\r\n this._coordinatesMode = Texture.PROJECTION_MODE;\r\n this.name = name;\r\n this.isRenderTarget = true;\r\n this._initialSizeParameter = size;\r\n this._dontDisposeObjectRenderer = !!existingObjectRenderer;\r\n\r\n this._processSizeParameter(size);\r\n\r\n this._objectRenderer =\r\n existingObjectRenderer ??\r\n new ObjectRenderer(name, scene, {\r\n numPasses: isCube ? 6 : this.getRenderLayers() || 1,\r\n doNotChangeAspectRatio,\r\n });\r\n\r\n this._onBeforeRenderingManagerRenderObserver = this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n // Before clear\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._beforeRenderTargetClearStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n\r\n // Clear\r\n if (this.onClearObservable.hasObservers()) {\r\n this.onClearObservable.notifyObservers(engine);\r\n } else if (!this.skipInitialClear) {\r\n engine.clear(this.clearColor || this._scene!.clearColor, true, true, true);\r\n }\r\n\r\n if (!this._doNotChangeAspectRatio) {\r\n this._scene!.updateTransformMatrix(true);\r\n }\r\n\r\n // Before Camera Draw\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._beforeRenderTargetDrawStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n });\r\n\r\n this._onAfterRenderingManagerRenderObserver = this._objectRenderer.onAfterRenderingManagerRenderObservable.add(() => {\r\n // After Camera Draw\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._afterRenderTargetDrawStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n\r\n const saveGenerateMipMaps = this._texture?.generateMipMaps ?? false;\r\n\r\n if (this._texture) {\r\n this._texture.generateMipMaps = false; // if left true, the mipmaps will be generated (if this._texture.generateMipMaps = true) when the first post process binds its own RTT: by doing so it will unbind the current RTT,\r\n // which will trigger a mipmap generation. We don't want this because it's a wasted work, we will do an unbind of the current RTT at the end of the process (see unbindFrameBuffer) which will\r\n // trigger the generation of the final mipmaps\r\n }\r\n\r\n if (this._postProcessManager) {\r\n this._postProcessManager._finalizeFrame(false, this._renderTarget ?? undefined, this._currentFaceIndex, this._postProcesses, this.ignoreCameraViewport);\r\n } else if (this._currentUseCameraPostProcess) {\r\n this._scene!.postProcessManager._finalizeFrame(false, this._renderTarget ?? undefined, this._currentFaceIndex);\r\n }\r\n\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._afterRenderTargetPostProcessStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n\r\n if (this._texture) {\r\n this._texture.generateMipMaps = saveGenerateMipMaps;\r\n }\r\n\r\n if (!this._doNotChangeAspectRatio) {\r\n this._scene!.updateTransformMatrix(true);\r\n }\r\n\r\n // Dump ?\r\n if (this._currentDumpForDebug) {\r\n if (!this._dumpTools) {\r\n Logger.Error(\"dumpTools module is still being loaded. To speed up the process import dump tools directly in your project\");\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._dumpTools.DumpFramebuffer(this.getRenderWidth(), this.getRenderHeight(), engine);\r\n }\r\n }\r\n });\r\n\r\n this._onFastPathRenderObserver = this._objectRenderer.onFastPathRenderObservable.add(() => {\r\n if (this.onClearObservable.hasObservers()) {\r\n this.onClearObservable.notifyObservers(engine);\r\n } else {\r\n if (!this.skipInitialClear) {\r\n engine.clear(this.clearColor || this._scene!.clearColor, true, true, true);\r\n }\r\n }\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {});\r\n\r\n this._generateMipMaps = generateMipMaps ? true : false;\r\n this._doNotChangeAspectRatio = doNotChangeAspectRatio;\r\n\r\n if (isMulti) {\r\n return;\r\n }\r\n\r\n this._renderTargetOptions = {\r\n generateMipMaps: generateMipMaps,\r\n type: type,\r\n format: this._format ?? undefined,\r\n samplingMode: this.samplingMode,\r\n generateDepthBuffer: generateDepthBuffer,\r\n generateStencilBuffer: generateStencilBuffer,\r\n samples,\r\n creationFlags,\r\n noColorAttachment: noColorAttachment,\r\n useSRGBBuffer,\r\n colorAttachment: colorAttachment,\r\n label: this.name,\r\n };\r\n\r\n if (this.samplingMode === Texture.NEAREST_SAMPLINGMODE) {\r\n this.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n if (!delayAllocation) {\r\n if (isCube) {\r\n this._renderTarget = scene.getEngine().createRenderTargetCubeTexture(this.getRenderSize(), this._renderTargetOptions);\r\n this.coordinatesMode = Texture.INVCUBIC_MODE;\r\n this._textureMatrix = Matrix.Identity();\r\n } else {\r\n this._renderTarget = scene.getEngine().createRenderTargetTexture(this._size, this._renderTargetOptions);\r\n }\r\n this._texture = this._renderTarget.texture;\r\n if (samples !== undefined) {\r\n this.samples = samples;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Creates a depth stencil texture.\r\n * This is only available in WebGL 2 or with the depth texture extension available.\r\n * @param comparisonFunction Specifies the comparison function to set on the texture. If 0 or undefined, the texture is not in comparison mode (default: 0)\r\n * @param bilinearFiltering Specifies whether or not bilinear filtering is enable on the texture (default: true)\r\n * @param generateStencil Specifies whether or not a stencil should be allocated in the texture (default: false)\r\n * @param samples sample count of the depth/stencil texture (default: 1)\r\n * @param format format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH32_FLOAT)\r\n * @param label defines the label of the texture (for debugging purpose)\r\n */\r\n public createDepthStencilTexture(\r\n comparisonFunction: number = 0,\r\n bilinearFiltering: boolean = true,\r\n generateStencil: boolean = false,\r\n samples: number = 1,\r\n format: number = Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n label?: string\r\n ): void {\r\n this._renderTarget?.createDepthStencilTexture(comparisonFunction, bilinearFiltering, generateStencil, samples, format, label);\r\n }\r\n\r\n protected _processSizeParameter(size: TextureSize | { ratio: number }): void {\r\n if ((<{ ratio: number }>size).ratio) {\r\n this._sizeRatio = (<{ ratio: number }>size).ratio;\r\n const engine = this._getEngine()!;\r\n this._size = {\r\n width: this._bestReflectionRenderTargetDimension(engine.getRenderWidth(), this._sizeRatio),\r\n height: this._bestReflectionRenderTargetDimension(engine.getRenderHeight(), this._sizeRatio),\r\n };\r\n } else {\r\n this._size = <TextureSize>size;\r\n }\r\n }\r\n\r\n /**\r\n * Define the number of samples to use in case of MSAA.\r\n * It defaults to one meaning no MSAA has been enabled.\r\n */\r\n public get samples(): number {\r\n return this._renderTarget?.samples ?? this._samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n if (this._renderTarget) {\r\n this._samples = this._renderTarget.setSamples(value);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a post process to the render target rendering passes.\r\n * @param postProcess define the post process to add\r\n */\r\n public addPostProcess(postProcess: PostProcess): void {\r\n if (!this._postProcessManager) {\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n this._postProcessManager = new PostProcessManager(scene);\r\n this._postProcesses = new Array<PostProcess>();\r\n }\r\n\r\n this._postProcesses.push(postProcess);\r\n this._postProcesses[0].autoClear = false;\r\n }\r\n\r\n /**\r\n * Clear all the post processes attached to the render target\r\n * @param dispose define if the cleared post processes should also be disposed (false by default)\r\n */\r\n public clearPostProcesses(dispose: boolean = false): void {\r\n if (!this._postProcesses) {\r\n return;\r\n }\r\n\r\n if (dispose) {\r\n for (const postProcess of this._postProcesses) {\r\n postProcess.dispose();\r\n }\r\n }\r\n\r\n this._postProcesses = [];\r\n }\r\n\r\n /**\r\n * Remove one of the post process from the list of attached post processes to the texture\r\n * @param postProcess define the post process to remove from the list\r\n */\r\n public removePostProcess(postProcess: PostProcess): void {\r\n if (!this._postProcesses) {\r\n return;\r\n }\r\n\r\n const index = this._postProcesses.indexOf(postProcess);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._postProcesses.splice(index, 1);\r\n\r\n if (this._postProcesses.length > 0) {\r\n this._postProcesses[0].autoClear = false;\r\n }\r\n }\r\n\r\n /**\r\n * Resets the refresh counter of the texture and start bak from scratch.\r\n * Could be useful to regenerate the texture if it is setup to render only once.\r\n */\r\n public resetRefreshCounter(): void {\r\n this._objectRenderer.resetRefreshCounter();\r\n }\r\n\r\n /**\r\n * Define the refresh rate of the texture or the rendering frequency.\r\n * Use 0 to render just once, 1 to render on every frame, 2 to render every two frames and so on...\r\n */\r\n public get refreshRate(): number {\r\n return this._objectRenderer.refreshRate;\r\n }\r\n public set refreshRate(value: number) {\r\n this._objectRenderer.refreshRate = value;\r\n }\r\n\r\n /** @internal */\r\n public _shouldRender(): boolean {\r\n return this._objectRenderer.shouldRender();\r\n }\r\n\r\n /**\r\n * Gets the actual render size of the texture.\r\n * @returns the width of the render size\r\n */\r\n public getRenderSize(): number {\r\n return this.getRenderWidth();\r\n }\r\n\r\n /**\r\n * Gets the actual render width of the texture.\r\n * @returns the width of the render size\r\n */\r\n public getRenderWidth(): number {\r\n if ((<{ width: number; height: number }>this._size).width) {\r\n return (<{ width: number; height: number }>this._size).width;\r\n }\r\n\r\n return <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the actual render height of the texture.\r\n * @returns the height of the render size\r\n */\r\n public getRenderHeight(): number {\r\n if ((<{ width: number; height: number }>this._size).width) {\r\n return (<{ width: number; height: number }>this._size).height;\r\n }\r\n\r\n return <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the actual number of layers of the texture or, in the case of a 3D texture, return the depth.\r\n * @returns the number of layers\r\n */\r\n public getRenderLayers(): number {\r\n const layers = (<{ width: number; height: number; depth?: number; layers?: number }>this._size).layers;\r\n if (layers) {\r\n return layers;\r\n }\r\n const depth = (<{ width: number; height: number; depth?: number; layers?: number }>this._size).depth;\r\n if (depth) {\r\n return depth;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Don't allow this render target texture to rescale. Mainly used to prevent rescaling by the scene optimizer.\r\n */\r\n public disableRescaling() {\r\n this._canRescale = false;\r\n }\r\n\r\n /**\r\n * Get if the texture can be rescaled or not.\r\n */\r\n public override get canRescale(): boolean {\r\n return this._canRescale;\r\n }\r\n\r\n /**\r\n * Resize the texture using a ratio.\r\n * @param ratio the ratio to apply to the texture size in order to compute the new target size\r\n */\r\n public override scale(ratio: number): void {\r\n const newSize = Math.max(1, this.getRenderSize() * ratio);\r\n\r\n this.resize(newSize);\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n if (this.isCube) {\r\n return this._textureMatrix;\r\n }\r\n\r\n return super.getReflectionTextureMatrix();\r\n }\r\n\r\n /**\r\n * Resize the texture to a new desired size.\r\n * Be careful as it will recreate all the data in the new texture.\r\n * @param size Define the new size. It can be:\r\n * - a number for squared texture,\r\n * - an object containing { width: number, height: number }\r\n * - or an object containing a ratio { ratio: number }\r\n */\r\n public resize(size: TextureSize | { ratio: number }): void {\r\n const wasCube = this.isCube;\r\n\r\n this._renderTarget?.dispose();\r\n this._renderTarget = null;\r\n\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n this._processSizeParameter(size);\r\n\r\n if (wasCube) {\r\n this._renderTarget = scene.getEngine().createRenderTargetCubeTexture(this.getRenderSize(), this._renderTargetOptions);\r\n } else {\r\n this._renderTarget = scene.getEngine().createRenderTargetTexture(this._size, this._renderTargetOptions);\r\n }\r\n this._texture = this._renderTarget.texture;\r\n\r\n if (this._renderTargetOptions.samples !== undefined) {\r\n this.samples = this._renderTargetOptions.samples;\r\n }\r\n\r\n if (this.onResizeObservable.hasObservers()) {\r\n this.onResizeObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Renders all the objects from the render list into the texture.\r\n * @param useCameraPostProcess Define if camera post processes should be used during the rendering\r\n * @param dumpForDebug Define if the rendering result should be dumped (copied) for debugging purpose\r\n */\r\n public render(useCameraPostProcess: boolean = false, dumpForDebug: boolean = false): void {\r\n this._render(useCameraPostProcess, dumpForDebug);\r\n }\r\n\r\n private _dumpToolsLoading = false;\r\n private _dumpTools: typeof import(\"../../Misc/dumpTools\");\r\n\r\n /**\r\n * This function will check if the render target texture can be rendered (textures are loaded, shaders are compiled)\r\n * @returns true if all required resources are ready\r\n */\r\n public isReadyForRendering(): boolean {\r\n if (!this._dumpToolsLoading) {\r\n this._dumpToolsLoading = true;\r\n // avoid a static import to allow ignoring the import in some cases\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n import(\"../../Misc/dumpTools\").then((module) => (this._dumpTools = module));\r\n }\r\n\r\n this._objectRenderer.prepareRenderList();\r\n\r\n this.onBeforeBindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.initRender(this.getRenderWidth(), this.getRenderHeight());\r\n\r\n const isReady = this._objectRenderer._checkReadiness();\r\n\r\n this.onAfterUnbindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.finishRender();\r\n\r\n return isReady;\r\n }\r\n\r\n private _render(useCameraPostProcess: boolean = false, dumpForDebug: boolean = false): void {\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n if (this.useCameraPostProcesses !== undefined) {\r\n useCameraPostProcess = this.useCameraPostProcesses;\r\n }\r\n\r\n this._objectRenderer.prepareRenderList();\r\n\r\n this.onBeforeBindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.initRender(this.getRenderWidth(), this.getRenderHeight());\r\n\r\n if ((this.is2DArray || this.is3D) && !this.isMulti) {\r\n for (let layer = 0; layer < this.getRenderLayers(); layer++) {\r\n this._renderToTarget(0, useCameraPostProcess, dumpForDebug, layer);\r\n scene.incrementRenderId();\r\n scene.resetCachedMaterial();\r\n }\r\n } else if (this.isCube && !this.isMulti) {\r\n for (let face = 0; face < 6; face++) {\r\n this._renderToTarget(face, useCameraPostProcess, dumpForDebug);\r\n scene.incrementRenderId();\r\n scene.resetCachedMaterial();\r\n }\r\n } else {\r\n this._renderToTarget(0, useCameraPostProcess, dumpForDebug);\r\n }\r\n\r\n this.onAfterUnbindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.finishRender();\r\n }\r\n\r\n private _bestReflectionRenderTargetDimension(renderDimension: number, scale: number): number {\r\n const minimum = 128;\r\n const x = renderDimension * scale;\r\n const curved = NearestPOT(x + (minimum * minimum) / (minimum + x));\r\n\r\n // Ensure we don't exceed the render dimension (while staying POT)\r\n return Math.min(FloorPOT(renderDimension), curved);\r\n }\r\n\r\n /**\r\n * @internal\r\n * @param faceIndex face index to bind to if this is a cubetexture\r\n * @param layer defines the index of the texture to bind in the array\r\n */\r\n public _bindFrameBuffer(faceIndex: number = 0, layer = 0) {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n if (this._renderTarget) {\r\n engine.bindFramebuffer(this._renderTarget, this.isCube ? faceIndex : undefined, undefined, undefined, this.ignoreCameraViewport, 0, layer);\r\n }\r\n }\r\n\r\n protected _unbindFrameBuffer(engine: AbstractEngine, faceIndex: number): void {\r\n if (!this._renderTarget) {\r\n return;\r\n }\r\n engine.unBindFramebuffer(this._renderTarget, this.isCube, () => {\r\n this.onAfterRenderObservable.notifyObservers(faceIndex);\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _prepareFrame(scene: Scene, faceIndex?: number, layer?: number, useCameraPostProcess?: boolean) {\r\n if (this._postProcessManager) {\r\n if (!this._prePassEnabled) {\r\n if (!this._postProcessManager._prepareFrame(this._texture, this._postProcesses)) {\r\n this._bindFrameBuffer(faceIndex, layer);\r\n }\r\n }\r\n } else if (!useCameraPostProcess || !scene.postProcessManager._prepareFrame(this._texture)) {\r\n this._bindFrameBuffer(faceIndex, layer);\r\n }\r\n }\r\n\r\n private _renderToTarget(faceIndex: number, useCameraPostProcess: boolean, dumpForDebug: boolean, layer = 0): void {\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n this._currentFaceIndex = faceIndex;\r\n this._currentLayer = layer;\r\n this._currentUseCameraPostProcess = useCameraPostProcess;\r\n this._currentDumpForDebug = dumpForDebug;\r\n\r\n this._prepareFrame(scene, faceIndex, layer, useCameraPostProcess);\r\n\r\n engine._debugPushGroup?.(`render to face #${faceIndex} layer #${layer}`, 2);\r\n\r\n this._objectRenderer.render(faceIndex + layer, true); // only faceIndex or layer (if any) will be different from 0 (we don't support array of cubes), so it's safe to add them to get the pass index\r\n\r\n engine._debugPopGroup?.(2);\r\n\r\n this._unbindFrameBuffer(engine, faceIndex);\r\n\r\n if (this._texture && this.isCube && faceIndex === 5) {\r\n engine.generateMipMapsForCubemap(this._texture, true);\r\n }\r\n }\r\n\r\n /**\r\n * Overrides the default sort function applied in the rendering group to prepare the meshes.\r\n * This allowed control for front to back rendering or reversely depending of the special needs.\r\n *\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param opaqueSortCompareFn The opaque queue comparison function use to sort.\r\n * @param alphaTestSortCompareFn The alpha test queue comparison function use to sort.\r\n * @param transparentSortCompareFn The transparent queue comparison function use to sort.\r\n */\r\n public setRenderingOrder(\r\n renderingGroupId: number,\r\n opaqueSortCompareFn: Nullable<(a: SubMesh, b: SubMesh) => number> = null,\r\n alphaTestSortCompareFn: Nullable<(a: SubMesh, b: SubMesh) => number> = null,\r\n transparentSortCompareFn: Nullable<(a: SubMesh, b: SubMesh) => number> = null\r\n ): void {\r\n this._objectRenderer.setRenderingOrder(renderingGroupId, opaqueSortCompareFn, alphaTestSortCompareFn, transparentSortCompareFn);\r\n }\r\n\r\n /**\r\n * Specifies whether or not the stencil and depth buffer are cleared between two rendering groups.\r\n *\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param autoClearDepthStencil Automatically clears depth and stencil between groups if true.\r\n */\r\n public setRenderingAutoClearDepthStencil(renderingGroupId: number, autoClearDepthStencil: boolean): void {\r\n this._objectRenderer.setRenderingAutoClearDepthStencil(renderingGroupId, autoClearDepthStencil);\r\n }\r\n\r\n /**\r\n * Clones the texture.\r\n * @returns the cloned texture\r\n */\r\n public override clone(): RenderTargetTexture {\r\n const textureSize = this.getSize();\r\n const newTexture = new RenderTargetTexture(\r\n this.name,\r\n textureSize,\r\n this.getScene(),\r\n this._renderTargetOptions.generateMipMaps,\r\n this._doNotChangeAspectRatio,\r\n this._renderTargetOptions.type,\r\n this.isCube,\r\n this._renderTargetOptions.samplingMode,\r\n this._renderTargetOptions.generateDepthBuffer,\r\n this._renderTargetOptions.generateStencilBuffer,\r\n undefined,\r\n this._renderTargetOptions.format,\r\n undefined,\r\n this._renderTargetOptions.samples\r\n );\r\n\r\n // Base texture\r\n newTexture.hasAlpha = this.hasAlpha;\r\n newTexture.level = this.level;\r\n\r\n // RenderTarget Texture\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n if (this.renderList) {\r\n newTexture.renderList = this.renderList.slice(0);\r\n }\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Serialize the texture to a JSON representation we can easily use in the respective Parse function.\r\n * @returns The JSON representation of the texture\r\n */\r\n public override serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.renderTargetSize = this.getRenderSize();\r\n serializationObject.renderList = [];\r\n\r\n if (this.renderList) {\r\n for (let index = 0; index < this.renderList.length; index++) {\r\n serializationObject.renderList.push(this.renderList[index].id);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * This will remove the attached framebuffer objects. The texture will not be able to be used as render target anymore\r\n */\r\n public disposeFramebufferObjects(): void {\r\n this._renderTarget?.dispose(true);\r\n }\r\n\r\n /**\r\n * Release and destroy the underlying lower level texture aka internalTexture.\r\n */\r\n public override releaseInternalTexture(): void {\r\n this._renderTarget?.releaseTextures();\r\n this._texture = null;\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public override dispose(): void {\r\n this.onResizeObservable.clear();\r\n this.onClearObservable.clear();\r\n this.onAfterUnbindObservable.clear();\r\n this.onBeforeBindObservable.clear();\r\n\r\n if (this._postProcessManager) {\r\n this._postProcessManager.dispose();\r\n this._postProcessManager = null;\r\n }\r\n\r\n if (this._prePassRenderTarget) {\r\n this._prePassRenderTarget.dispose();\r\n }\r\n\r\n this._objectRenderer.onBeforeRenderingManagerRenderObservable.remove(this._onBeforeRenderingManagerRenderObserver);\r\n this._objectRenderer.onAfterRenderingManagerRenderObservable.remove(this._onAfterRenderingManagerRenderObserver);\r\n this._objectRenderer.onFastPathRenderObservable.remove(this._onFastPathRenderObserver);\r\n\r\n if (!this._dontDisposeObjectRenderer) {\r\n this._objectRenderer.dispose();\r\n }\r\n\r\n this.clearPostProcesses(true);\r\n\r\n if (this._resizeObserver) {\r\n this.getScene()!.getEngine().onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n\r\n // Remove from custom render targets\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n let index = scene.customRenderTargets.indexOf(this);\r\n\r\n if (index >= 0) {\r\n scene.customRenderTargets.splice(index, 1);\r\n }\r\n\r\n for (const camera of scene.cameras) {\r\n index = camera.customRenderTargets.indexOf(this);\r\n\r\n if (index >= 0) {\r\n camera.customRenderTargets.splice(index, 1);\r\n }\r\n }\r\n\r\n this._renderTarget?.dispose();\r\n this._renderTarget = null;\r\n this._texture = null;\r\n\r\n super.dispose();\r\n }\r\n\r\n /** @internal */\r\n public override _rebuild(): void {\r\n this._objectRenderer._rebuild();\r\n\r\n if (this._postProcessManager) {\r\n this._postProcessManager._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Clear the info related to rendering groups preventing retention point in material dispose.\r\n */\r\n public freeRenderingGroups(): void {\r\n this._objectRenderer.freeRenderingGroups();\r\n }\r\n\r\n /**\r\n * Gets the number of views the corresponding to the texture (eg. a MultiviewRenderTarget will have > 1)\r\n * @returns the view count\r\n */\r\n public getViewCount() {\r\n return 1;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nTexture._CreateRenderTargetTexture = (name: string, renderTargetSize: number, scene: Scene, generateMipMaps: boolean, creationFlags?: number) => {\r\n return new RenderTargetTexture(name, renderTargetSize, scene, generateMipMaps);\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"renderTargetTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/renderTargetTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { Nullable, Immutable } from \"../../types\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport type { RenderTargetCreationOptions, TextureSize } from \"../../Materials/Textures/textureCreationOptions\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { PostProcessManager } from \"../../PostProcesses/postProcessManager\";\r\nimport type { PostProcess } from \"../../PostProcesses/postProcess\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport type { IRenderTargetTexture, RenderTargetWrapper } from \"../../Engines/renderTargetWrapper\";\r\n\r\nimport type { Material } from \"../material\";\r\nimport { FloorPOT, NearestPOT } from \"../../Misc/tools.functions\";\r\nimport { Effect } from \"../effect\";\r\nimport type { AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { ObjectRenderer } from \"core/Rendering/objectRenderer\";\r\n\r\ndeclare module \"../effect\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Effect {\r\n /**\r\n * Sets a depth stencil texture from a render target on the engine to be used in the shader.\r\n * @param channel Name of the sampler variable.\r\n * @param texture Texture to set.\r\n */\r\n setDepthStencilTexture(channel: string, texture: Nullable<RenderTargetTexture>): void;\r\n }\r\n}\r\n\r\n/**\r\n * Sets a depth stencil texture from a render target on the engine to be used in the shader.\r\n * @param channel Name of the sampler variable.\r\n * @param texture Texture to set.\r\n */\r\nEffect.prototype.setDepthStencilTexture = function (channel: string, texture: Nullable<RenderTargetTexture>): void {\r\n this._engine.setDepthStencilTexture(this._samplers[channel], this._uniforms[channel], texture, channel);\r\n};\r\n\r\n/**\r\n * Options for the RenderTargetTexture constructor\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface RenderTargetTextureOptions {\r\n /** True (default: false) if mipmaps need to be generated after render */\r\n generateMipMaps?: boolean;\r\n\r\n /** True (default) to not change the aspect ratio of the scene in the RTT */\r\n doNotChangeAspectRatio?: boolean;\r\n\r\n /** The type of the buffer in the RTT (byte (default), half float, float...) */\r\n type?: number;\r\n\r\n /** True (default: false) if a cube texture needs to be created */\r\n isCube?: boolean;\r\n\r\n /** The sampling mode to be used with the render target (Trilinear (default), Linear, Nearest...) */\r\n samplingMode?: number;\r\n\r\n /** True (default) to generate a depth buffer */\r\n generateDepthBuffer?: boolean;\r\n\r\n /** True (default: false) to generate a stencil buffer */\r\n generateStencilBuffer?: boolean;\r\n\r\n /** True (default: false) if multiple textures need to be created (Draw Buffers) */\r\n isMulti?: boolean;\r\n\r\n /** The internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...) */\r\n format?: number;\r\n\r\n /** True (default: false) if the texture allocation should be delayed */\r\n delayAllocation?: boolean;\r\n\r\n /** Sample count to use when creating the RTT */\r\n samples?: number;\r\n\r\n /** specific flags to use when creating the texture (e.g., Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures) */\r\n creationFlags?: number;\r\n\r\n /** True (default: false) to indicate that no color target should be created. (e.g., if you only want to write to the depth buffer) */\r\n noColorAttachment?: boolean;\r\n\r\n /** Specifies the internal texture to use directly instead of creating one (ignores `noColorAttachment` flag when set) **/\r\n colorAttachment?: InternalTexture;\r\n\r\n /** True (default: false) to create a SRGB texture */\r\n useSRGBBuffer?: boolean;\r\n\r\n /** Defines the underlying texture texture space */\r\n gammaSpace?: boolean;\r\n\r\n /** If not provided (default), a new object renderer instance will be created */\r\n existingObjectRenderer?: ObjectRenderer;\r\n\r\n /** True to enable clustered lights (default: false) */\r\n enableClusteredLights?: boolean;\r\n}\r\n\r\n/**\r\n * This Helps creating a texture that will be created from a camera in your scene.\r\n * It is basically a dynamic texture that could be used to create special effects for instance.\r\n * Actually, It is the base of lot of effects in the framework like post process, shadows, effect layers and rendering pipelines...\r\n */\r\nexport class RenderTargetTexture extends Texture implements IRenderTargetTexture {\r\n /**\r\n * The texture will only be rendered once which can be useful to improve performance if everything in your render is static for instance.\r\n */\r\n public static readonly REFRESHRATE_RENDER_ONCE: number = ObjectRenderer.REFRESHRATE_RENDER_ONCE;\r\n /**\r\n * The texture will be rendered every frame and is recommended for dynamic contents.\r\n */\r\n public static readonly REFRESHRATE_RENDER_ONEVERYFRAME: number = ObjectRenderer.REFRESHRATE_RENDER_ONEVERYFRAME;\r\n /**\r\n * The texture will be rendered every 2 frames which could be enough if your dynamic objects are not\r\n * the central point of your effect and can save a lot of performances.\r\n */\r\n public static readonly REFRESHRATE_RENDER_ONEVERYTWOFRAMES: number = ObjectRenderer.REFRESHRATE_RENDER_ONEVERYTWOFRAMES;\r\n\r\n /**\r\n * Use this predicate to dynamically define the list of mesh you want to render.\r\n * If set, the renderList property will be overwritten.\r\n */\r\n public get renderListPredicate(): (AbstractMesh: AbstractMesh) => boolean {\r\n return this._objectRenderer.renderListPredicate;\r\n }\r\n\r\n public set renderListPredicate(value: (AbstractMesh: AbstractMesh) => boolean) {\r\n this._objectRenderer.renderListPredicate = value;\r\n }\r\n\r\n /**\r\n * Use this list to define the list of mesh you want to render.\r\n */\r\n public get renderList(): Nullable<Array<AbstractMesh>> {\r\n return this._objectRenderer.renderList;\r\n }\r\n\r\n public set renderList(value: Nullable<Array<AbstractMesh>>) {\r\n this._objectRenderer.renderList = value;\r\n }\r\n\r\n /**\r\n * Define the list of particle systems to render in the texture. If not provided, will render all the particle systems of the scene.\r\n * Note that the particle systems are rendered only if renderParticles is set to true.\r\n */\r\n public get particleSystemList(): Nullable<Array<IParticleSystem>> {\r\n return this._objectRenderer.particleSystemList;\r\n }\r\n\r\n public set particleSystemList(value: Nullable<Array<IParticleSystem>>) {\r\n this._objectRenderer.particleSystemList = value;\r\n }\r\n\r\n /**\r\n * Use this function to overload the renderList array at rendering time.\r\n * Return null to render with the current renderList, else return the list of meshes to use for rendering.\r\n * For 2DArray RTT, layerOrFace is the index of the layer that is going to be rendered, else it is the faceIndex of\r\n * the cube (if the RTT is a cube, else layerOrFace=0).\r\n * The renderList passed to the function is the current render list (the one that will be used if the function returns null).\r\n * The length of this list is passed through renderListLength: don't use renderList.length directly because the array can\r\n * hold dummy elements!\r\n */\r\n public get getCustomRenderList(): Nullable<\r\n (layerOrFace: number, renderList: Nullable<Immutable<Array<AbstractMesh>>>, renderListLength: number) => Nullable<Array<AbstractMesh>>\r\n > {\r\n return this._objectRenderer.getCustomRenderList;\r\n }\r\n\r\n public set getCustomRenderList(\r\n value: Nullable<(layerOrFace: number, renderList: Nullable<Immutable<Array<AbstractMesh>>>, renderListLength: number) => Nullable<Array<AbstractMesh>>>\r\n ) {\r\n this._objectRenderer.getCustomRenderList = value;\r\n }\r\n\r\n /**\r\n * Define if particles should be rendered in your texture (default: true).\r\n */\r\n public get renderParticles() {\r\n return this._objectRenderer.renderParticles;\r\n }\r\n\r\n public set renderParticles(value: boolean) {\r\n this._objectRenderer.renderParticles = value;\r\n }\r\n\r\n /**\r\n * Define if sprites should be rendered in your texture (default: false).\r\n */\r\n public get renderSprites() {\r\n return this._objectRenderer.renderSprites;\r\n }\r\n\r\n public set renderSprites(value: boolean) {\r\n this._objectRenderer.renderSprites = value;\r\n }\r\n\r\n /**\r\n * Define if bounding box rendering should be enabled (still subject to Mesh.showBoundingBox or scene.forceShowBoundingBoxes). (Default: false).\r\n */\r\n public get enableBoundingBoxRendering() {\r\n return this._objectRenderer.enableBoundingBoxRendering;\r\n }\r\n\r\n public set enableBoundingBoxRendering(value: boolean) {\r\n this._objectRenderer.enableBoundingBoxRendering = value;\r\n }\r\n\r\n /**\r\n * Define if outline/overlay rendering should be enabled (still subject to Mesh.renderOutline/Mesh.renderOverlay). (Default: true).\r\n */\r\n public get enableOutlineRendering() {\r\n return this._objectRenderer.enableOutlineRendering;\r\n }\r\n\r\n public set enableOutlineRendering(value: boolean) {\r\n this._objectRenderer.enableOutlineRendering = value;\r\n }\r\n\r\n /**\r\n * Force checking the layerMask property even if a custom list of meshes is provided (ie. if renderList is not undefined) (default: false).\r\n */\r\n public get forceLayerMaskCheck() {\r\n return this._objectRenderer.forceLayerMaskCheck;\r\n }\r\n\r\n public set forceLayerMaskCheck(value: boolean) {\r\n this._objectRenderer.forceLayerMaskCheck = value;\r\n }\r\n\r\n /**\r\n * Define the camera used to render the texture.\r\n */\r\n public get activeCamera(): Nullable<Camera> {\r\n return this._objectRenderer.activeCamera;\r\n }\r\n\r\n public set activeCamera(value: Nullable<Camera>) {\r\n this._objectRenderer.activeCamera = value;\r\n }\r\n\r\n /**\r\n * Define the camera used to calculate the LOD of the objects.\r\n * If not defined, activeCamera will be used. If not defined nor activeCamera, scene's active camera will be used.\r\n */\r\n public get cameraForLOD(): Nullable<Camera> {\r\n return this._objectRenderer.cameraForLOD;\r\n }\r\n\r\n public set cameraForLOD(value: Nullable<Camera>) {\r\n this._objectRenderer.cameraForLOD = value;\r\n }\r\n\r\n /**\r\n * If true, the renderer will render all objects without any image processing applied.\r\n * If false (default value), the renderer will use the current setting of the scene's image processing configuration.\r\n */\r\n public get disableImageProcessing() {\r\n return this._objectRenderer.disableImageProcessing;\r\n }\r\n\r\n public set disableImageProcessing(value: boolean) {\r\n this._objectRenderer.disableImageProcessing = value;\r\n }\r\n\r\n /**\r\n * Override the mesh isReady function with your own one.\r\n */\r\n public get customIsReadyFunction(): (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => boolean {\r\n return this._objectRenderer.customIsReadyFunction;\r\n }\r\n\r\n public set customIsReadyFunction(value: (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => boolean) {\r\n this._objectRenderer.customIsReadyFunction = value;\r\n }\r\n\r\n /**\r\n * Override the render function of the texture with your own one.\r\n */\r\n public get customRenderFunction(): (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>,\r\n beforeTransparents?: () => void\r\n ) => void {\r\n return this._objectRenderer.customRenderFunction;\r\n }\r\n\r\n public set customRenderFunction(\r\n value: (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>,\r\n beforeTransparents?: () => void\r\n ) => void\r\n ) {\r\n this._objectRenderer.customRenderFunction = value;\r\n }\r\n\r\n /**\r\n * Define if camera post processes should be use while rendering the texture.\r\n */\r\n public useCameraPostProcesses: boolean;\r\n /**\r\n * Define if the camera viewport should be respected while rendering the texture or if the render should be done to the entire texture.\r\n */\r\n public ignoreCameraViewport: boolean = false;\r\n\r\n private _postProcessManager: Nullable<PostProcessManager>;\r\n\r\n /**\r\n * Post-processes for this render target\r\n */\r\n public get postProcesses() {\r\n return this._postProcesses;\r\n }\r\n private _postProcesses: PostProcess[];\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n private get _prePassEnabled() {\r\n return !!this._prePassRenderTarget && this._prePassRenderTarget.enabled;\r\n }\r\n\r\n /**\r\n * An event triggered when the texture is unbind.\r\n */\r\n public onBeforeBindObservable = new Observable<RenderTargetTexture>();\r\n\r\n /**\r\n * An event triggered when the texture is unbind.\r\n */\r\n public onAfterUnbindObservable = new Observable<RenderTargetTexture>();\r\n\r\n private _onAfterUnbindObserver: Nullable<Observer<RenderTargetTexture>>;\r\n /**\r\n * Set a after unbind callback in the texture.\r\n * This has been kept for backward compatibility and use of onAfterUnbindObservable is recommended.\r\n */\r\n public set onAfterUnbind(callback: () => void) {\r\n if (this._onAfterUnbindObserver) {\r\n this.onAfterUnbindObservable.remove(this._onAfterUnbindObserver);\r\n }\r\n this._onAfterUnbindObserver = this.onAfterUnbindObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the texture\r\n */\r\n public get onBeforeRenderObservable() {\r\n return this._objectRenderer.onBeforeRenderObservable;\r\n }\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<number>>;\r\n /**\r\n * Set a before render callback in the texture.\r\n * This has been kept for backward compatibility and use of onBeforeRenderObservable is recommended.\r\n */\r\n public set onBeforeRender(callback: (faceIndex: number) => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the texture\r\n */\r\n public get onAfterRenderObservable() {\r\n return this._objectRenderer.onAfterRenderObservable;\r\n }\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<number>>;\r\n /**\r\n * Set a after render callback in the texture.\r\n * This has been kept for backward compatibility and use of onAfterRenderObservable is recommended.\r\n */\r\n public set onAfterRender(callback: (faceIndex: number) => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after the texture clear\r\n */\r\n public onClearObservable = new Observable<AbstractEngine>();\r\n\r\n private _onClearObserver: Nullable<Observer<AbstractEngine>>;\r\n /**\r\n * Set a clear callback in the texture.\r\n * This has been kept for backward compatibility and use of onClearObservable is recommended.\r\n */\r\n public set onClear(callback: (Engine: AbstractEngine) => void) {\r\n if (this._onClearObserver) {\r\n this.onClearObservable.remove(this._onClearObserver);\r\n }\r\n this._onClearObserver = this.onClearObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered when the texture is resized.\r\n */\r\n public onResizeObservable = new Observable<RenderTargetTexture>();\r\n\r\n /**\r\n * Define the clear color of the Render Target if it should be different from the scene.\r\n */\r\n public clearColor: Color4;\r\n /** @internal */\r\n public _size: TextureSize;\r\n protected _initialSizeParameter: TextureSize | { ratio: number };\r\n protected _sizeRatio: Nullable<number>;\r\n /** @internal */\r\n public _generateMipMaps: boolean;\r\n /** @internal */\r\n public _cleared = false;\r\n /**\r\n * Skip the initial clear of the rtt at the beginning of the frame render loop\r\n */\r\n public skipInitialClear = false;\r\n /** @internal */\r\n public get _waitingRenderList() {\r\n return this._objectRenderer._waitingRenderList;\r\n }\r\n\r\n /** @internal */\r\n public set _waitingRenderList(value: string[] | undefined) {\r\n this._objectRenderer._waitingRenderList = value;\r\n }\r\n\r\n protected _objectRenderer: ObjectRenderer;\r\n protected _doNotChangeAspectRatio: boolean;\r\n protected _textureMatrix: Matrix;\r\n protected _samples = 1;\r\n protected _renderTargetOptions: RenderTargetCreationOptions;\r\n private _canRescale = true;\r\n protected _renderTarget: Nullable<RenderTargetWrapper> = null;\r\n private _currentFaceIndex: number;\r\n private _currentLayer: number;\r\n private _currentUseCameraPostProcess: boolean;\r\n private _currentDumpForDebug: boolean;\r\n private _dontDisposeObjectRenderer = false;\r\n\r\n /**\r\n * Current render pass id of the render target texture. Note it can change over the rendering as there's a separate id for each face of a cube / each layer of an array layer!\r\n */\r\n public get renderPassId(): number {\r\n return this._objectRenderer.renderPassId;\r\n }\r\n\r\n /**\r\n * Gets the render pass ids used by the render target texture. For a single render target the array length will be 1, for a cube texture it will be 6 and for\r\n * a 2D texture array it will return an array of ids the size of the 2D texture array\r\n */\r\n public get renderPassIds(): readonly number[] {\r\n return this._objectRenderer.renderPassIds;\r\n }\r\n\r\n /**\r\n * Gets the current value of the refreshId counter\r\n */\r\n public get currentRefreshId() {\r\n return this._objectRenderer.currentRefreshId;\r\n }\r\n\r\n /**\r\n * Sets a specific material to be used to render a mesh/a list of meshes in this render target texture\r\n * @param mesh mesh or array of meshes\r\n * @param material material or array of materials to use for this render pass. If undefined is passed, no specific material will be used but the regular material instead (mesh.material). It's possible to provide an array of materials to use a different material for each rendering in the case of a cube texture (6 rendering) and a 2D texture array (as many rendering as the length of the array)\r\n */\r\n public setMaterialForRendering(mesh: AbstractMesh | AbstractMesh[], material?: Material | Material[]): void {\r\n this._objectRenderer.setMaterialForRendering(mesh, material);\r\n }\r\n\r\n /**\r\n * Define if the texture has multiple draw buffers or if false a single draw buffer.\r\n */\r\n public get isMulti(): boolean {\r\n return this._renderTarget?.isMulti ?? false;\r\n }\r\n\r\n /**\r\n * Gets render target creation options that were used.\r\n */\r\n public get renderTargetOptions(): RenderTargetCreationOptions {\r\n return this._renderTargetOptions;\r\n }\r\n\r\n /**\r\n * Gets the render target wrapper associated with this render target\r\n */\r\n public get renderTarget(): Nullable<RenderTargetWrapper> {\r\n return this._renderTarget;\r\n }\r\n\r\n protected _onRatioRescale(): void {\r\n if (this._sizeRatio) {\r\n this.resize(this._initialSizeParameter);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the texture (when in cube mode)\r\n * It must define where the camera used to render the texture is set\r\n */\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the texture (when in cube mode)\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n /**\r\n * In case the RTT has been created with a depth texture, get the associated\r\n * depth texture.\r\n * Otherwise, return null.\r\n */\r\n public get depthStencilTexture(): Nullable<InternalTexture> {\r\n return this._renderTarget?._depthStencilTexture ?? null;\r\n }\r\n\r\n /** @internal */\r\n public _disableEngineStages = false; // TODO: remove this when the shadow generator task (frame graph) is reworked (see https://github.com/BabylonJS/Babylon.js/pull/15962#discussion_r1874417607)\r\n\r\n private readonly _onBeforeRenderingManagerRenderObserver: Nullable<Observer<number>>;\r\n private readonly _onAfterRenderingManagerRenderObserver: Nullable<Observer<number>>;\r\n private readonly _onFastPathRenderObserver: Nullable<Observer<number>>;\r\n\r\n /**\r\n * Instantiate a render target texture. This is mainly used to render the scene off screen, to apply (for instance) post processing effects\r\n * or use a shadow or depth texture...\r\n * @param name The friendly name of the texture\r\n * @param size The size of the RTT (number if square, or {width: number, height:number} or {ratio:} to define a ratio from the main scene)\r\n * @param scene The scene the RTT belongs to. Default is the last created scene.\r\n * @param options The options for creating the render target texture.\r\n */\r\n constructor(name: string, size: TextureSize | { ratio: number }, scene?: Nullable<Scene>, options?: RenderTargetTextureOptions);\r\n\r\n /**\r\n * Instantiate a render target texture. This is mainly used to render the scene off screen, to apply (for instance) post processing effects\r\n * or use a shadow or depth texture...\r\n * @param name The friendly name of the texture\r\n * @param size The size of the RTT (number if square, or {width: number, height:number} or {ratio:} to define a ratio from the main scene)\r\n * @param scene The scene the RTT belongs to. Default is the last created scene\r\n * @param generateMipMaps True (default: false) if mipmaps need to be generated after render\r\n * @param doNotChangeAspectRatio True (default) to not change the aspect ratio of the scene in the RTT\r\n * @param type The type of the buffer in the RTT (byte (default), half float, float...)\r\n * @param isCube True (default: false) if a cube texture needs to be created\r\n * @param samplingMode The sampling mode to be used with the render target (Trilinear (default), Linear, Nearest...)\r\n * @param generateDepthBuffer True (default) to generate a depth buffer\r\n * @param generateStencilBuffer True (default: false) to generate a stencil buffer\r\n * @param isMulti True (default: false) if multiple textures need to be created (Draw Buffers)\r\n * @param format The internal format of the buffer in the RTT (RED, RG, RGB, RGBA (default), ALPHA...)\r\n * @param delayAllocation True (default: false) if the texture allocation should be delayed\r\n * @param samples Sample count to use when creating the RTT\r\n * @param creationFlags specific flags to use when creating the texture (e.g., Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures)\r\n * @param noColorAttachment True (default: false) to indicate that no color target should be created. (e.g., if you only want to write to the depth buffer)\r\n * @param useSRGBBuffer True (default: false) to create a SRGB texture\r\n */\r\n constructor(\r\n name: string,\r\n size: TextureSize | { ratio: number },\r\n scene?: Nullable<Scene>,\r\n generateMipMaps?: boolean,\r\n doNotChangeAspectRatio?: boolean,\r\n type?: number,\r\n isCube?: boolean,\r\n samplingMode?: number,\r\n generateDepthBuffer?: boolean,\r\n generateStencilBuffer?: boolean,\r\n isMulti?: boolean,\r\n format?: number,\r\n delayAllocation?: boolean,\r\n samples?: number,\r\n creationFlags?: number,\r\n noColorAttachment?: boolean,\r\n useSRGBBuffer?: boolean\r\n );\r\n\r\n /** @internal */\r\n constructor(\r\n name: string,\r\n size: TextureSize | { ratio: number },\r\n scene?: Nullable<Scene>,\r\n generateMipMaps: boolean | RenderTargetTextureOptions = false,\r\n doNotChangeAspectRatio: boolean = true,\r\n type: number = Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n isCube = false,\r\n samplingMode = Texture.TRILINEAR_SAMPLINGMODE,\r\n generateDepthBuffer = true,\r\n generateStencilBuffer = false,\r\n isMulti = false,\r\n format = Constants.TEXTUREFORMAT_RGBA,\r\n delayAllocation = false,\r\n samples?: number,\r\n creationFlags?: number,\r\n noColorAttachment = false,\r\n useSRGBBuffer = false\r\n ) {\r\n let colorAttachment: InternalTexture | undefined = undefined;\r\n let gammaSpace = true;\r\n let existingObjectRenderer: ObjectRenderer | undefined = undefined;\r\n let enableClusteredLights = false;\r\n if (typeof generateMipMaps === \"object\") {\r\n const options = generateMipMaps;\r\n generateMipMaps = !!options.generateMipMaps;\r\n doNotChangeAspectRatio = options.doNotChangeAspectRatio ?? true;\r\n type = options.type ?? Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n isCube = !!options.isCube;\r\n samplingMode = options.samplingMode ?? Texture.TRILINEAR_SAMPLINGMODE;\r\n generateDepthBuffer = options.generateDepthBuffer ?? true;\r\n generateStencilBuffer = !!options.generateStencilBuffer;\r\n isMulti = !!options.isMulti;\r\n format = options.format ?? Constants.TEXTUREFORMAT_RGBA;\r\n delayAllocation = !!options.delayAllocation;\r\n samples = options.samples;\r\n creationFlags = options.creationFlags;\r\n noColorAttachment = !!options.noColorAttachment;\r\n useSRGBBuffer = !!options.useSRGBBuffer;\r\n colorAttachment = options.colorAttachment;\r\n gammaSpace = options.gammaSpace ?? gammaSpace;\r\n existingObjectRenderer = options.existingObjectRenderer;\r\n enableClusteredLights = !!options.enableClusteredLights;\r\n }\r\n\r\n super(null, scene, !generateMipMaps, undefined, samplingMode, undefined, undefined, undefined, undefined, format);\r\n\r\n scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n const engine = this.getScene()!.getEngine();\r\n\r\n this._gammaSpace = gammaSpace;\r\n this._coordinatesMode = Texture.PROJECTION_MODE;\r\n this.name = name;\r\n this.isRenderTarget = true;\r\n this._initialSizeParameter = size;\r\n this._dontDisposeObjectRenderer = !!existingObjectRenderer;\r\n\r\n this._processSizeParameter(size);\r\n\r\n this._objectRenderer =\r\n existingObjectRenderer ??\r\n new ObjectRenderer(name, scene, {\r\n numPasses: isCube ? 6 : this.getRenderLayers() || 1,\r\n doNotChangeAspectRatio,\r\n enableClusteredLights,\r\n });\r\n\r\n this._onBeforeRenderingManagerRenderObserver = this._objectRenderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n // Before clear\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._beforeRenderTargetClearStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n\r\n // Clear\r\n if (this.onClearObservable.hasObservers()) {\r\n this.onClearObservable.notifyObservers(engine);\r\n } else if (!this.skipInitialClear) {\r\n engine.clear(this.clearColor || this._scene!.clearColor, true, true, true);\r\n }\r\n\r\n if (!this._doNotChangeAspectRatio) {\r\n this._scene!.updateTransformMatrix(true);\r\n }\r\n\r\n // Before Camera Draw\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._beforeRenderTargetDrawStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n });\r\n\r\n this._onAfterRenderingManagerRenderObserver = this._objectRenderer.onAfterRenderingManagerRenderObservable.add(() => {\r\n // After Camera Draw\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._afterRenderTargetDrawStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n\r\n const saveGenerateMipMaps = this._texture?.generateMipMaps ?? false;\r\n\r\n if (this._texture) {\r\n this._texture.generateMipMaps = false; // if left true, the mipmaps will be generated (if this._texture.generateMipMaps = true) when the first post process binds its own RTT: by doing so it will unbind the current RTT,\r\n // which will trigger a mipmap generation. We don't want this because it's a wasted work, we will do an unbind of the current RTT at the end of the process (see unbindFrameBuffer) which will\r\n // trigger the generation of the final mipmaps\r\n }\r\n\r\n if (this._postProcessManager) {\r\n this._postProcessManager._finalizeFrame(false, this._renderTarget ?? undefined, this._currentFaceIndex, this._postProcesses, this.ignoreCameraViewport);\r\n } else if (this._currentUseCameraPostProcess) {\r\n this._scene!.postProcessManager._finalizeFrame(false, this._renderTarget ?? undefined, this._currentFaceIndex);\r\n }\r\n\r\n if (!this._disableEngineStages) {\r\n for (const step of this._scene!._afterRenderTargetPostProcessStage) {\r\n step.action(this, this._currentFaceIndex, this._currentLayer);\r\n }\r\n }\r\n\r\n if (this._texture) {\r\n this._texture.generateMipMaps = saveGenerateMipMaps;\r\n }\r\n\r\n if (!this._doNotChangeAspectRatio) {\r\n this._scene!.updateTransformMatrix(true);\r\n }\r\n\r\n // Dump ?\r\n if (this._currentDumpForDebug) {\r\n if (!this._dumpTools) {\r\n Logger.Error(\"dumpTools module is still being loaded. To speed up the process import dump tools directly in your project\");\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._dumpTools.DumpFramebuffer(this.getRenderWidth(), this.getRenderHeight(), engine);\r\n }\r\n }\r\n });\r\n\r\n this._onFastPathRenderObserver = this._objectRenderer.onFastPathRenderObservable.add(() => {\r\n if (this.onClearObservable.hasObservers()) {\r\n this.onClearObservable.notifyObservers(engine);\r\n } else {\r\n if (!this.skipInitialClear) {\r\n engine.clear(this.clearColor || this._scene!.clearColor, true, true, true);\r\n }\r\n }\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {});\r\n\r\n this._generateMipMaps = generateMipMaps ? true : false;\r\n this._doNotChangeAspectRatio = doNotChangeAspectRatio;\r\n\r\n if (isMulti) {\r\n return;\r\n }\r\n\r\n this._renderTargetOptions = {\r\n generateMipMaps: generateMipMaps,\r\n type: type,\r\n format: this._format ?? undefined,\r\n samplingMode: this.samplingMode,\r\n generateDepthBuffer: generateDepthBuffer,\r\n generateStencilBuffer: generateStencilBuffer,\r\n samples,\r\n creationFlags,\r\n noColorAttachment: noColorAttachment,\r\n useSRGBBuffer,\r\n colorAttachment: colorAttachment,\r\n label: this.name,\r\n };\r\n\r\n if (this.samplingMode === Texture.NEAREST_SAMPLINGMODE) {\r\n this.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n\r\n if (!delayAllocation) {\r\n if (isCube) {\r\n this._renderTarget = scene.getEngine().createRenderTargetCubeTexture(this.getRenderSize(), this._renderTargetOptions);\r\n this.coordinatesMode = Texture.INVCUBIC_MODE;\r\n this._textureMatrix = Matrix.Identity();\r\n } else {\r\n this._renderTarget = scene.getEngine().createRenderTargetTexture(this._size, this._renderTargetOptions);\r\n }\r\n this._texture = this._renderTarget.texture;\r\n if (samples !== undefined) {\r\n this.samples = samples;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Creates a depth stencil texture.\r\n * This is only available in WebGL 2 or with the depth texture extension available.\r\n * @param comparisonFunction Specifies the comparison function to set on the texture. If 0 or undefined, the texture is not in comparison mode (default: 0)\r\n * @param bilinearFiltering Specifies whether or not bilinear filtering is enable on the texture (default: true)\r\n * @param generateStencil Specifies whether or not a stencil should be allocated in the texture (default: false)\r\n * @param samples sample count of the depth/stencil texture (default: 1)\r\n * @param format format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH32_FLOAT)\r\n * @param label defines the label of the texture (for debugging purpose)\r\n */\r\n public createDepthStencilTexture(\r\n comparisonFunction: number = 0,\r\n bilinearFiltering: boolean = true,\r\n generateStencil: boolean = false,\r\n samples: number = 1,\r\n format: number = Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n label?: string\r\n ): void {\r\n this._renderTarget?.createDepthStencilTexture(comparisonFunction, bilinearFiltering, generateStencil, samples, format, label);\r\n }\r\n\r\n protected _processSizeParameter(size: TextureSize | { ratio: number }): void {\r\n if ((<{ ratio: number }>size).ratio) {\r\n this._sizeRatio = (<{ ratio: number }>size).ratio;\r\n const engine = this._getEngine()!;\r\n this._size = {\r\n width: this._bestReflectionRenderTargetDimension(engine.getRenderWidth(), this._sizeRatio),\r\n height: this._bestReflectionRenderTargetDimension(engine.getRenderHeight(), this._sizeRatio),\r\n };\r\n } else {\r\n this._size = <TextureSize>size;\r\n }\r\n }\r\n\r\n /**\r\n * Define the number of samples to use in case of MSAA.\r\n * It defaults to one meaning no MSAA has been enabled.\r\n */\r\n public get samples(): number {\r\n return this._renderTarget?.samples ?? this._samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n if (this._renderTarget) {\r\n this._samples = this._renderTarget.setSamples(value);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a post process to the render target rendering passes.\r\n * @param postProcess define the post process to add\r\n */\r\n public addPostProcess(postProcess: PostProcess): void {\r\n if (!this._postProcessManager) {\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n this._postProcessManager = new PostProcessManager(scene);\r\n this._postProcesses = new Array<PostProcess>();\r\n }\r\n\r\n this._postProcesses.push(postProcess);\r\n this._postProcesses[0].autoClear = false;\r\n }\r\n\r\n /**\r\n * Clear all the post processes attached to the render target\r\n * @param dispose define if the cleared post processes should also be disposed (false by default)\r\n */\r\n public clearPostProcesses(dispose: boolean = false): void {\r\n if (!this._postProcesses) {\r\n return;\r\n }\r\n\r\n if (dispose) {\r\n for (const postProcess of this._postProcesses) {\r\n postProcess.dispose();\r\n }\r\n }\r\n\r\n this._postProcesses = [];\r\n }\r\n\r\n /**\r\n * Remove one of the post process from the list of attached post processes to the texture\r\n * @param postProcess define the post process to remove from the list\r\n */\r\n public removePostProcess(postProcess: PostProcess): void {\r\n if (!this._postProcesses) {\r\n return;\r\n }\r\n\r\n const index = this._postProcesses.indexOf(postProcess);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n this._postProcesses.splice(index, 1);\r\n\r\n if (this._postProcesses.length > 0) {\r\n this._postProcesses[0].autoClear = false;\r\n }\r\n }\r\n\r\n /**\r\n * Resets the refresh counter of the texture and start bak from scratch.\r\n * Could be useful to regenerate the texture if it is setup to render only once.\r\n */\r\n public resetRefreshCounter(): void {\r\n this._objectRenderer.resetRefreshCounter();\r\n }\r\n\r\n /**\r\n * Define the refresh rate of the texture or the rendering frequency.\r\n * Use 0 to render just once, 1 to render on every frame, 2 to render every two frames and so on...\r\n */\r\n public get refreshRate(): number {\r\n return this._objectRenderer.refreshRate;\r\n }\r\n public set refreshRate(value: number) {\r\n this._objectRenderer.refreshRate = value;\r\n }\r\n\r\n /** @internal */\r\n public _shouldRender(): boolean {\r\n return this._objectRenderer.shouldRender();\r\n }\r\n\r\n /**\r\n * Gets the actual render size of the texture.\r\n * @returns the width of the render size\r\n */\r\n public getRenderSize(): number {\r\n return this.getRenderWidth();\r\n }\r\n\r\n /**\r\n * Gets the actual render width of the texture.\r\n * @returns the width of the render size\r\n */\r\n public getRenderWidth(): number {\r\n if ((<{ width: number; height: number }>this._size).width) {\r\n return (<{ width: number; height: number }>this._size).width;\r\n }\r\n\r\n return <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the actual render height of the texture.\r\n * @returns the height of the render size\r\n */\r\n public getRenderHeight(): number {\r\n if ((<{ width: number; height: number }>this._size).width) {\r\n return (<{ width: number; height: number }>this._size).height;\r\n }\r\n\r\n return <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the actual number of layers of the texture or, in the case of a 3D texture, return the depth.\r\n * @returns the number of layers\r\n */\r\n public getRenderLayers(): number {\r\n const layers = (<{ width: number; height: number; depth?: number; layers?: number }>this._size).layers;\r\n if (layers) {\r\n return layers;\r\n }\r\n const depth = (<{ width: number; height: number; depth?: number; layers?: number }>this._size).depth;\r\n if (depth) {\r\n return depth;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Don't allow this render target texture to rescale. Mainly used to prevent rescaling by the scene optimizer.\r\n */\r\n public disableRescaling() {\r\n this._canRescale = false;\r\n }\r\n\r\n /**\r\n * Get if the texture can be rescaled or not.\r\n */\r\n public override get canRescale(): boolean {\r\n return this._canRescale;\r\n }\r\n\r\n /**\r\n * Resize the texture using a ratio.\r\n * @param ratio the ratio to apply to the texture size in order to compute the new target size\r\n */\r\n public override scale(ratio: number): void {\r\n const newSize = Math.max(1, this.getRenderSize() * ratio);\r\n\r\n this.resize(newSize);\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n if (this.isCube) {\r\n return this._textureMatrix;\r\n }\r\n\r\n return super.getReflectionTextureMatrix();\r\n }\r\n\r\n /**\r\n * Resize the texture to a new desired size.\r\n * Be careful as it will recreate all the data in the new texture.\r\n * @param size Define the new size. It can be:\r\n * - a number for squared texture,\r\n * - an object containing { width: number, height: number }\r\n * - or an object containing a ratio { ratio: number }\r\n */\r\n public resize(size: TextureSize | { ratio: number }): void {\r\n const wasCube = this.isCube;\r\n\r\n this._renderTarget?.dispose();\r\n this._renderTarget = null;\r\n\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n this._processSizeParameter(size);\r\n\r\n if (wasCube) {\r\n this._renderTarget = scene.getEngine().createRenderTargetCubeTexture(this.getRenderSize(), this._renderTargetOptions);\r\n } else {\r\n this._renderTarget = scene.getEngine().createRenderTargetTexture(this._size, this._renderTargetOptions);\r\n }\r\n this._texture = this._renderTarget.texture;\r\n\r\n if (this._renderTargetOptions.samples !== undefined) {\r\n this.samples = this._renderTargetOptions.samples;\r\n }\r\n\r\n if (this.onResizeObservable.hasObservers()) {\r\n this.onResizeObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Renders all the objects from the render list into the texture.\r\n * @param useCameraPostProcess Define if camera post processes should be used during the rendering\r\n * @param dumpForDebug Define if the rendering result should be dumped (copied) for debugging purpose\r\n */\r\n public render(useCameraPostProcess: boolean = false, dumpForDebug: boolean = false): void {\r\n this._render(useCameraPostProcess, dumpForDebug);\r\n }\r\n\r\n private _dumpToolsLoading = false;\r\n private _dumpTools: typeof import(\"../../Misc/dumpTools\");\r\n\r\n /**\r\n * This function will check if the render target texture can be rendered (textures are loaded, shaders are compiled)\r\n * @returns true if all required resources are ready\r\n */\r\n public isReadyForRendering(): boolean {\r\n if (!this._dumpToolsLoading) {\r\n this._dumpToolsLoading = true;\r\n // avoid a static import to allow ignoring the import in some cases\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n import(\"../../Misc/dumpTools\").then((module) => (this._dumpTools = module));\r\n }\r\n\r\n this._objectRenderer.prepareRenderList();\r\n\r\n this.onBeforeBindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.initRender(this.getRenderWidth(), this.getRenderHeight());\r\n\r\n const isReady = this._objectRenderer._checkReadiness();\r\n\r\n this.onAfterUnbindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.finishRender();\r\n\r\n return isReady;\r\n }\r\n\r\n private _render(useCameraPostProcess: boolean = false, dumpForDebug: boolean = false): void {\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n if (this.useCameraPostProcesses !== undefined) {\r\n useCameraPostProcess = this.useCameraPostProcesses;\r\n }\r\n\r\n this._objectRenderer.prepareRenderList();\r\n\r\n this.onBeforeBindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.initRender(this.getRenderWidth(), this.getRenderHeight());\r\n\r\n if ((this.is2DArray || this.is3D) && !this.isMulti) {\r\n for (let layer = 0; layer < this.getRenderLayers(); layer++) {\r\n this._renderToTarget(0, useCameraPostProcess, dumpForDebug, layer);\r\n scene.incrementRenderId();\r\n scene.resetCachedMaterial();\r\n }\r\n } else if (this.isCube && !this.isMulti) {\r\n for (let face = 0; face < 6; face++) {\r\n this._renderToTarget(face, useCameraPostProcess, dumpForDebug);\r\n scene.incrementRenderId();\r\n scene.resetCachedMaterial();\r\n }\r\n } else {\r\n this._renderToTarget(0, useCameraPostProcess, dumpForDebug);\r\n }\r\n\r\n this.onAfterUnbindObservable.notifyObservers(this);\r\n\r\n this._objectRenderer.finishRender();\r\n }\r\n\r\n private _bestReflectionRenderTargetDimension(renderDimension: number, scale: number): number {\r\n const minimum = 128;\r\n const x = renderDimension * scale;\r\n const curved = NearestPOT(x + (minimum * minimum) / (minimum + x));\r\n\r\n // Ensure we don't exceed the render dimension (while staying POT)\r\n return Math.min(FloorPOT(renderDimension), curved);\r\n }\r\n\r\n /**\r\n * @internal\r\n * @param faceIndex face index to bind to if this is a cubetexture\r\n * @param layer defines the index of the texture to bind in the array\r\n */\r\n public _bindFrameBuffer(faceIndex: number = 0, layer = 0) {\r\n const scene = this.getScene();\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n if (this._renderTarget) {\r\n engine.bindFramebuffer(this._renderTarget, this.isCube ? faceIndex : undefined, undefined, undefined, this.ignoreCameraViewport, 0, layer);\r\n }\r\n }\r\n\r\n protected _unbindFrameBuffer(engine: AbstractEngine, faceIndex: number): void {\r\n if (!this._renderTarget) {\r\n return;\r\n }\r\n engine.unBindFramebuffer(this._renderTarget, this.isCube, () => {\r\n this.onAfterRenderObservable.notifyObservers(faceIndex);\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _prepareFrame(scene: Scene, faceIndex?: number, layer?: number, useCameraPostProcess?: boolean) {\r\n if (this._postProcessManager) {\r\n if (!this._prePassEnabled) {\r\n if (!this._postProcessManager._prepareFrame(this._texture, this._postProcesses)) {\r\n this._bindFrameBuffer(faceIndex, layer);\r\n }\r\n }\r\n } else if (!useCameraPostProcess || !scene.postProcessManager._prepareFrame(this._texture)) {\r\n this._bindFrameBuffer(faceIndex, layer);\r\n }\r\n }\r\n\r\n private _renderToTarget(faceIndex: number, useCameraPostProcess: boolean, dumpForDebug: boolean, layer = 0): void {\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n this._currentFaceIndex = faceIndex;\r\n this._currentLayer = layer;\r\n this._currentUseCameraPostProcess = useCameraPostProcess;\r\n this._currentDumpForDebug = dumpForDebug;\r\n\r\n this._prepareFrame(scene, faceIndex, layer, useCameraPostProcess);\r\n\r\n engine._debugPushGroup?.(`render to face #${faceIndex} layer #${layer}`, 2);\r\n\r\n this._objectRenderer.render(faceIndex + layer, true); // only faceIndex or layer (if any) will be different from 0 (we don't support array of cubes), so it's safe to add them to get the pass index\r\n\r\n engine._debugPopGroup?.(2);\r\n\r\n this._unbindFrameBuffer(engine, faceIndex);\r\n\r\n if (this._texture && this.isCube && faceIndex === 5) {\r\n engine.generateMipMapsForCubemap(this._texture, true);\r\n }\r\n }\r\n\r\n /**\r\n * Overrides the default sort function applied in the rendering group to prepare the meshes.\r\n * This allowed control for front to back rendering or reversely depending of the special needs.\r\n *\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param opaqueSortCompareFn The opaque queue comparison function use to sort.\r\n * @param alphaTestSortCompareFn The alpha test queue comparison function use to sort.\r\n * @param transparentSortCompareFn The transparent queue comparison function use to sort.\r\n */\r\n public setRenderingOrder(\r\n renderingGroupId: number,\r\n opaqueSortCompareFn: Nullable<(a: SubMesh, b: SubMesh) => number> = null,\r\n alphaTestSortCompareFn: Nullable<(a: SubMesh, b: SubMesh) => number> = null,\r\n transparentSortCompareFn: Nullable<(a: SubMesh, b: SubMesh) => number> = null\r\n ): void {\r\n this._objectRenderer.setRenderingOrder(renderingGroupId, opaqueSortCompareFn, alphaTestSortCompareFn, transparentSortCompareFn);\r\n }\r\n\r\n /**\r\n * Specifies whether or not the stencil and depth buffer are cleared between two rendering groups.\r\n *\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param autoClearDepthStencil Automatically clears depth and stencil between groups if true.\r\n */\r\n public setRenderingAutoClearDepthStencil(renderingGroupId: number, autoClearDepthStencil: boolean): void {\r\n this._objectRenderer.setRenderingAutoClearDepthStencil(renderingGroupId, autoClearDepthStencil);\r\n }\r\n\r\n /**\r\n * Clones the texture.\r\n * @returns the cloned texture\r\n */\r\n public override clone(): RenderTargetTexture {\r\n const textureSize = this.getSize();\r\n const newTexture = new RenderTargetTexture(\r\n this.name,\r\n textureSize,\r\n this.getScene(),\r\n this._renderTargetOptions.generateMipMaps,\r\n this._doNotChangeAspectRatio,\r\n this._renderTargetOptions.type,\r\n this.isCube,\r\n this._renderTargetOptions.samplingMode,\r\n this._renderTargetOptions.generateDepthBuffer,\r\n this._renderTargetOptions.generateStencilBuffer,\r\n undefined,\r\n this._renderTargetOptions.format,\r\n undefined,\r\n this._renderTargetOptions.samples\r\n );\r\n\r\n // Base texture\r\n newTexture.hasAlpha = this.hasAlpha;\r\n newTexture.level = this.level;\r\n\r\n // RenderTarget Texture\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n if (this.renderList) {\r\n newTexture.renderList = this.renderList.slice(0);\r\n }\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Serialize the texture to a JSON representation we can easily use in the respective Parse function.\r\n * @returns The JSON representation of the texture\r\n */\r\n public override serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.renderTargetSize = this.getRenderSize();\r\n serializationObject.renderList = [];\r\n\r\n if (this.renderList) {\r\n for (let index = 0; index < this.renderList.length; index++) {\r\n serializationObject.renderList.push(this.renderList[index].id);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * This will remove the attached framebuffer objects. The texture will not be able to be used as render target anymore\r\n */\r\n public disposeFramebufferObjects(): void {\r\n this._renderTarget?.dispose(true);\r\n }\r\n\r\n /**\r\n * Release and destroy the underlying lower level texture aka internalTexture.\r\n */\r\n public override releaseInternalTexture(): void {\r\n this._renderTarget?.releaseTextures();\r\n this._texture = null;\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public override dispose(): void {\r\n this.onResizeObservable.clear();\r\n this.onClearObservable.clear();\r\n this.onAfterUnbindObservable.clear();\r\n this.onBeforeBindObservable.clear();\r\n\r\n if (this._postProcessManager) {\r\n this._postProcessManager.dispose();\r\n this._postProcessManager = null;\r\n }\r\n\r\n if (this._prePassRenderTarget) {\r\n this._prePassRenderTarget.dispose();\r\n }\r\n\r\n this._objectRenderer.onBeforeRenderingManagerRenderObservable.remove(this._onBeforeRenderingManagerRenderObserver);\r\n this._objectRenderer.onAfterRenderingManagerRenderObservable.remove(this._onAfterRenderingManagerRenderObserver);\r\n this._objectRenderer.onFastPathRenderObservable.remove(this._onFastPathRenderObserver);\r\n\r\n if (!this._dontDisposeObjectRenderer) {\r\n this._objectRenderer.dispose();\r\n }\r\n\r\n this.clearPostProcesses(true);\r\n\r\n if (this._resizeObserver) {\r\n this.getScene()!.getEngine().onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n\r\n // Remove from custom render targets\r\n const scene = this.getScene();\r\n\r\n if (!scene) {\r\n return;\r\n }\r\n\r\n let index = scene.customRenderTargets.indexOf(this);\r\n\r\n if (index >= 0) {\r\n scene.customRenderTargets.splice(index, 1);\r\n }\r\n\r\n for (const camera of scene.cameras) {\r\n index = camera.customRenderTargets.indexOf(this);\r\n\r\n if (index >= 0) {\r\n camera.customRenderTargets.splice(index, 1);\r\n }\r\n }\r\n\r\n this._renderTarget?.dispose();\r\n this._renderTarget = null;\r\n this._texture = null;\r\n\r\n super.dispose();\r\n }\r\n\r\n /** @internal */\r\n public override _rebuild(): void {\r\n this._objectRenderer._rebuild();\r\n\r\n if (this._postProcessManager) {\r\n this._postProcessManager._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Clear the info related to rendering groups preventing retention point in material dispose.\r\n */\r\n public freeRenderingGroups(): void {\r\n this._objectRenderer.freeRenderingGroups();\r\n }\r\n\r\n /**\r\n * Gets the number of views the corresponding to the texture (eg. a MultiviewRenderTarget will have > 1)\r\n * @returns the view count\r\n */\r\n public getViewCount() {\r\n return 1;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nTexture._CreateRenderTargetTexture = (name: string, renderTargetSize: number, scene: Scene, generateMipMaps: boolean, creationFlags?: number) => {\r\n return new RenderTargetTexture(name, renderTargetSize, scene, generateMipMaps);\r\n};\r\n"]}
|
package/Misc/index.d.ts
CHANGED
|
@@ -82,3 +82,4 @@ export * from "../ShadersWGSL/rgbdDecode.fragment.js";
|
|
|
82
82
|
export * from "../ShadersWGSL/rgbdEncode.fragment.js";
|
|
83
83
|
export * from "../Shaders/copyTextureToTexture.fragment.js";
|
|
84
84
|
export * from "../ShadersWGSL/copyTextureToTexture.fragment.js";
|
|
85
|
+
export * from "./tools.internals.js";
|
package/Misc/index.js
CHANGED
|
@@ -87,4 +87,5 @@ export * from "../ShadersWGSL/rgbdEncode.fragment.js";
|
|
|
87
87
|
// CopyTextureToTexture
|
|
88
88
|
export * from "../Shaders/copyTextureToTexture.fragment.js";
|
|
89
89
|
export * from "../ShadersWGSL/copyTextureToTexture.fragment.js";
|
|
90
|
+
export * from "./tools.internals.js";
|
|
90
91
|
//# sourceMappingURL=index.js.map
|
package/Misc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,4BAA4B;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,yCAAyC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AAEvB,mBAAmB;AACnB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AAEnD,uBAAuB;AACvB,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./andOrNotEvaluator\";\r\nexport * from \"./assetsManager\";\r\nexport * from \"./basis\";\r\nexport * from \"./dds\";\r\nexport * from \"./decorators\";\r\nexport * from \"./deferred\";\r\nexport * from \"./environmentTextureTools\";\r\nexport * from \"./meshExploder\";\r\nexport * from \"./filesInput\";\r\nexport * from \"./HighDynamicRange/index\";\r\nexport * from \"./khronosTextureContainer\";\r\nexport * from \"./observable\";\r\nexport * from \"./observable.extensions\";\r\nexport * from \"./performanceMonitor\";\r\nexport * from \"./sceneOptimizer\";\r\nexport * from \"./sceneSerializer\";\r\nexport * from \"./smartArray\";\r\nexport * from \"./stringDictionary\";\r\nexport * from \"./tags\";\r\nexport * from \"./textureTools\";\r\n// loaded from texture tools\r\nexport * from \"../Shaders/lodCube.fragment\";\r\nexport * from \"../Shaders/lod.fragment\";\r\nexport * from \"../ShadersWGSL/lodCube.fragment\";\r\nexport * from \"../ShadersWGSL/lod.fragment\";\r\nexport * from \"./tga\";\r\nexport * from \"./tools\";\r\nexport * from \"./videoRecorder\";\r\nexport * from \"./virtualJoystick\";\r\nexport * from \"./workerPool\";\r\nexport * from \"./logger\";\r\nexport * from \"./typeStore\";\r\nexport * from \"./filesInputStore\";\r\nexport * from \"./deepCopier\";\r\nexport * from \"./deepMerger\";\r\nexport * from \"./pivotTools\";\r\nexport * from \"./precisionDate\";\r\nexport * from \"./screenshotTools\";\r\nexport * from \"./webRequest\";\r\nexport * from \"./iInspectable\";\r\nexport * from \"./brdfTextureTools\";\r\nexport * from \"./rgbdTextureTools\";\r\nexport * from \"./gradients\";\r\nexport * from \"./perfCounter\";\r\nexport * from \"./fileRequest\";\r\nexport * from \"./customAnimationFrameRequester\";\r\nexport * from \"./retryStrategy\";\r\nexport * from \"./interfaces/screenshotSize\";\r\nexport * from \"./interfaces/iPerfViewer\";\r\nexport * from \"./fileTools\";\r\nexport * from \"./stringTools\";\r\nexport * from \"./dataReader\";\r\nexport * from \"./minMaxReducer\";\r\nexport * from \"./depthReducer\";\r\nexport * from \"./dataStorage\";\r\nexport * from \"./sceneRecorder\";\r\nexport * from \"./khronosTextureContainer2\";\r\nexport * from \"./trajectoryClassifier\";\r\nexport * from \"./timer\";\r\nexport * from \"./copyTools\";\r\nexport * from \"./reflector\";\r\nexport * from \"./domManagement\";\r\nexport * from \"./pressureObserverWrapper\";\r\nexport * from \"./PerformanceViewer/index\";\r\nexport * from \"./coroutine\";\r\nexport * from \"./guid\";\r\nexport * from \"./error\";\r\nexport * from \"./snapshotRenderingHelper\";\r\n// eslint-disable-next-line import/export\r\nexport * from \"./observableCoroutine\";\r\nexport * from \"./copyTextureToTexture\";\r\n/** @deprecated Use individual exports */\r\nexport { DumpTools } from \"./dumpTools\";\r\nexport * from \"./greasedLineTools\";\r\nexport * from \"./equirectangularCapture\";\r\nexport * from \"./decorators.serialization\";\r\nexport * from \"./asyncLock\";\r\nexport * from \"./bitArray\";\r\nexport * from \"./urlTools\";\r\nexport * from \"./lazy\";\r\n\r\n// RGBDTextureTools\r\nexport * from \"../Shaders/rgbdDecode.fragment\";\r\nexport * from \"../Shaders/rgbdEncode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdDecode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdEncode.fragment\";\r\n\r\n// CopyTextureToTexture\r\nexport * from \"../Shaders/copyTextureToTexture.fragment\";\r\nexport * from \"../ShadersWGSL/copyTextureToTexture.fragment\";\r\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,4BAA4B;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,yCAAyC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AAEvB,mBAAmB;AACnB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AAEnD,uBAAuB;AACvB,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAE7D,cAAc,mBAAmB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./andOrNotEvaluator\";\r\nexport * from \"./assetsManager\";\r\nexport * from \"./basis\";\r\nexport * from \"./dds\";\r\nexport * from \"./decorators\";\r\nexport * from \"./deferred\";\r\nexport * from \"./environmentTextureTools\";\r\nexport * from \"./meshExploder\";\r\nexport * from \"./filesInput\";\r\nexport * from \"./HighDynamicRange/index\";\r\nexport * from \"./khronosTextureContainer\";\r\nexport * from \"./observable\";\r\nexport * from \"./observable.extensions\";\r\nexport * from \"./performanceMonitor\";\r\nexport * from \"./sceneOptimizer\";\r\nexport * from \"./sceneSerializer\";\r\nexport * from \"./smartArray\";\r\nexport * from \"./stringDictionary\";\r\nexport * from \"./tags\";\r\nexport * from \"./textureTools\";\r\n// loaded from texture tools\r\nexport * from \"../Shaders/lodCube.fragment\";\r\nexport * from \"../Shaders/lod.fragment\";\r\nexport * from \"../ShadersWGSL/lodCube.fragment\";\r\nexport * from \"../ShadersWGSL/lod.fragment\";\r\nexport * from \"./tga\";\r\nexport * from \"./tools\";\r\nexport * from \"./videoRecorder\";\r\nexport * from \"./virtualJoystick\";\r\nexport * from \"./workerPool\";\r\nexport * from \"./logger\";\r\nexport * from \"./typeStore\";\r\nexport * from \"./filesInputStore\";\r\nexport * from \"./deepCopier\";\r\nexport * from \"./deepMerger\";\r\nexport * from \"./pivotTools\";\r\nexport * from \"./precisionDate\";\r\nexport * from \"./screenshotTools\";\r\nexport * from \"./webRequest\";\r\nexport * from \"./iInspectable\";\r\nexport * from \"./brdfTextureTools\";\r\nexport * from \"./rgbdTextureTools\";\r\nexport * from \"./gradients\";\r\nexport * from \"./perfCounter\";\r\nexport * from \"./fileRequest\";\r\nexport * from \"./customAnimationFrameRequester\";\r\nexport * from \"./retryStrategy\";\r\nexport * from \"./interfaces/screenshotSize\";\r\nexport * from \"./interfaces/iPerfViewer\";\r\nexport * from \"./fileTools\";\r\nexport * from \"./stringTools\";\r\nexport * from \"./dataReader\";\r\nexport * from \"./minMaxReducer\";\r\nexport * from \"./depthReducer\";\r\nexport * from \"./dataStorage\";\r\nexport * from \"./sceneRecorder\";\r\nexport * from \"./khronosTextureContainer2\";\r\nexport * from \"./trajectoryClassifier\";\r\nexport * from \"./timer\";\r\nexport * from \"./copyTools\";\r\nexport * from \"./reflector\";\r\nexport * from \"./domManagement\";\r\nexport * from \"./pressureObserverWrapper\";\r\nexport * from \"./PerformanceViewer/index\";\r\nexport * from \"./coroutine\";\r\nexport * from \"./guid\";\r\nexport * from \"./error\";\r\nexport * from \"./snapshotRenderingHelper\";\r\n// eslint-disable-next-line import/export\r\nexport * from \"./observableCoroutine\";\r\nexport * from \"./copyTextureToTexture\";\r\n/** @deprecated Use individual exports */\r\nexport { DumpTools } from \"./dumpTools\";\r\nexport * from \"./greasedLineTools\";\r\nexport * from \"./equirectangularCapture\";\r\nexport * from \"./decorators.serialization\";\r\nexport * from \"./asyncLock\";\r\nexport * from \"./bitArray\";\r\nexport * from \"./urlTools\";\r\nexport * from \"./lazy\";\r\n\r\n// RGBDTextureTools\r\nexport * from \"../Shaders/rgbdDecode.fragment\";\r\nexport * from \"../Shaders/rgbdEncode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdDecode.fragment\";\r\nexport * from \"../ShadersWGSL/rgbdEncode.fragment\";\r\n\r\n// CopyTextureToTexture\r\nexport * from \"../Shaders/copyTextureToTexture.fragment\";\r\nexport * from \"../ShadersWGSL/copyTextureToTexture.fragment\";\r\n\r\nexport * from \"./tools.internals\";\r\n"]}
|
|
@@ -2,6 +2,7 @@ import type { TransformNode } from "../Meshes/transformNode.js";
|
|
|
2
2
|
import type { Vector3 } from "../Maths/math.js";
|
|
3
3
|
import type { Mesh } from "../Meshes/mesh.js";
|
|
4
4
|
import type { Scene } from "../scene.js";
|
|
5
|
+
import type { Nullable } from "../types.js";
|
|
5
6
|
/**
|
|
6
7
|
* Navigation plugin interface to add navigation constrained by a navigation mesh
|
|
7
8
|
*/
|
|
@@ -150,7 +151,7 @@ export interface INavigationEnginePlugin {
|
|
|
150
151
|
* @param height cylinder height
|
|
151
152
|
* @returns the obstacle freshly created
|
|
152
153
|
*/
|
|
153
|
-
addCylinderObstacle(position: Vector3, radius: number, height: number): IObstacle
|
|
154
|
+
addCylinderObstacle(position: Vector3, radius: number, height: number): Nullable<IObstacle>;
|
|
154
155
|
/**
|
|
155
156
|
* Creates an oriented box obstacle and add it to the navigation
|
|
156
157
|
* @param position world position
|
|
@@ -158,7 +159,7 @@ export interface INavigationEnginePlugin {
|
|
|
158
159
|
* @param angle angle in radians of the box orientation on Y axis
|
|
159
160
|
* @returns the obstacle freshly created
|
|
160
161
|
*/
|
|
161
|
-
addBoxObstacle(position: Vector3, extent: Vector3, angle: number): IObstacle
|
|
162
|
+
addBoxObstacle(position: Vector3, extent: Vector3, angle: number): Nullable<IObstacle>;
|
|
162
163
|
/**
|
|
163
164
|
* Removes an obstacle created by addCylinderObstacle or addBoxObstacle
|
|
164
165
|
* @param obstacle obstacle to remove from the navigation
|
|
@@ -170,10 +171,21 @@ export interface INavigationEnginePlugin {
|
|
|
170
171
|
dispose(): void;
|
|
171
172
|
}
|
|
172
173
|
/**
|
|
173
|
-
* Obstacle
|
|
174
|
+
* Obstacle type
|
|
174
175
|
*/
|
|
175
|
-
export
|
|
176
|
-
|
|
176
|
+
export type IObstacle = {
|
|
177
|
+
type: "box";
|
|
178
|
+
ref: unknown;
|
|
179
|
+
position: Vector3;
|
|
180
|
+
halfExtents: Vector3;
|
|
181
|
+
angle: number;
|
|
182
|
+
} | {
|
|
183
|
+
type: "cylinder";
|
|
184
|
+
ref: unknown;
|
|
185
|
+
position: Vector3;
|
|
186
|
+
radius: number;
|
|
187
|
+
height: number;
|
|
188
|
+
};
|
|
177
189
|
/**
|
|
178
190
|
* Crowd Interface. A Crowd is a collection of moving agents constrained by a navigation mesh
|
|
179
191
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"INavigationEngine.js","sourceRoot":"","sources":["../../../../dev/core/src/Navigation/INavigationEngine.ts"],"names":[],"mappings":"","sourcesContent":["import type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Vector3 } from \"../Maths/math\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Scene } from \"../scene\";\r\n\r\n/**\r\n * Navigation plugin interface to add navigation constrained by a navigation mesh\r\n */\r\nexport interface INavigationEnginePlugin {\r\n /**\r\n * plugin name\r\n */\r\n name: string;\r\n\r\n /**\r\n * Creates a navigation mesh\r\n * @param meshes array of all the geometry used to compute the navigation mesh\r\n * @param parameters bunch of parameters used to filter geometry\r\n */\r\n createNavMesh(meshes: Array<Mesh>, parameters: INavMeshParameters): void;\r\n\r\n /**\r\n * Create a navigation mesh debug mesh\r\n * @param scene is where the mesh will be added\r\n * @returns debug display mesh\r\n */\r\n createDebugNavMesh(scene: Scene): Mesh;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, closest to the parameter position\r\n * @param position world position\r\n * @returns the closest point to position constrained by the navigation mesh\r\n */\r\n getClosestPoint(position: Vector3): Vector3;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, closest to the parameter position\r\n * @param position world position\r\n * @param result output the closest point to position constrained by the navigation mesh\r\n */\r\n getClosestPointToRef(position: Vector3, result: Vector3): void;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, within a particular radius\r\n * @param position world position\r\n * @param maxRadius the maximum distance to the constrained world position\r\n * @returns the closest point to position constrained by the navigation mesh\r\n */\r\n getRandomPointAround(position: Vector3, maxRadius: number): Vector3;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, within a particular radius\r\n * @param position world position\r\n * @param maxRadius the maximum distance to the constrained world position\r\n * @param result output the closest point to position constrained by the navigation mesh\r\n */\r\n getRandomPointAroundToRef(position: Vector3, maxRadius: number, result: Vector3): void;\r\n\r\n /**\r\n * Compute the final position from a segment made of destination-position\r\n * @param position world position\r\n * @param destination world position\r\n * @returns the resulting point along the navmesh\r\n */\r\n moveAlong(position: Vector3, destination: Vector3): Vector3;\r\n\r\n /**\r\n * Compute the final position from a segment made of destination-position\r\n * @param position world position\r\n * @param destination world position\r\n * @param result output the resulting point along the navmesh\r\n */\r\n moveAlongToRef(position: Vector3, destination: Vector3, result: Vector3): void;\r\n\r\n /**\r\n * Compute a navigation path from start to end. Returns an empty array if no path can be computed.\r\n * Path is straight.\r\n * @param start world position\r\n * @param end world position\r\n * @returns array containing world position composing the path\r\n */\r\n computePath(start: Vector3, end: Vector3): Vector3[];\r\n\r\n /**\r\n * Compute a navigation path from start to end. Returns an empty array if no path can be computed.\r\n * Path follows navigation mesh geometry.\r\n * @param start world position\r\n * @param end world position\r\n * @returns array containing world position composing the path\r\n */\r\n computePathSmooth(start: Vector3, end: Vector3): Vector3[];\r\n\r\n /**\r\n * If this plugin is supported\r\n * @returns true if plugin is supported\r\n */\r\n isSupported(): boolean;\r\n\r\n /**\r\n * Create a new Crowd so you can add agents\r\n * @param maxAgents the maximum agent count in the crowd\r\n * @param maxAgentRadius the maximum radius an agent can have\r\n * @param scene to attach the crowd to\r\n * @returns the crowd you can add agents to\r\n */\r\n createCrowd(maxAgents: number, maxAgentRadius: number, scene: Scene): ICrowd;\r\n\r\n /**\r\n * Set the Bounding box extent for doing spatial queries (getClosestPoint, getRandomPointAround, ...)\r\n * The queries will try to find a solution within those bounds\r\n * default is (1,1,1)\r\n * @param extent x,y,z value that define the extent around the queries point of reference\r\n */\r\n setDefaultQueryExtent(extent: Vector3): void;\r\n\r\n /**\r\n * Get the Bounding box extent specified by setDefaultQueryExtent\r\n * @returns the box extent values\r\n */\r\n getDefaultQueryExtent(): Vector3;\r\n\r\n /**\r\n * build the navmesh from a previously saved state using getNavmeshData\r\n * @param data the Uint8Array returned by getNavmeshData\r\n */\r\n buildFromNavmeshData(data: Uint8Array): void;\r\n\r\n /**\r\n * returns the navmesh data that can be used later. The navmesh must be built before retrieving the data\r\n * @returns data the Uint8Array that can be saved and reused\r\n */\r\n getNavmeshData(): Uint8Array;\r\n\r\n /**\r\n * Get the Bounding box extent result specified by setDefaultQueryExtent\r\n * @param result output the box extent values\r\n */\r\n getDefaultQueryExtentToRef(result: Vector3): void;\r\n\r\n /**\r\n * Set the time step of the navigation tick update.\r\n * Default is 1/60.\r\n * A value of 0 will disable fixed time update\r\n * @param newTimeStep the new timestep to apply to this world.\r\n */\r\n setTimeStep(newTimeStep: number): void;\r\n\r\n /**\r\n * Get the time step of the navigation tick update.\r\n * @returns the current time step\r\n */\r\n getTimeStep(): number;\r\n\r\n /**\r\n * If delta time in navigation tick update is greater than the time step\r\n * a number of sub iterations are done. If more iterations are need to reach deltatime\r\n * they will be discarded.\r\n * A value of 0 will set to no maximum and update will use as many substeps as needed\r\n * @param newStepCount the maximum number of iterations\r\n */\r\n setMaximumSubStepCount(newStepCount: number): void;\r\n\r\n /**\r\n * Get the maximum number of iterations per navigation tick update\r\n * @returns the maximum number of iterations\r\n */\r\n getMaximumSubStepCount(): number;\r\n\r\n /**\r\n * Creates a cylinder obstacle and add it to the navigation\r\n * @param position world position\r\n * @param radius cylinder radius\r\n * @param height cylinder height\r\n * @returns the obstacle freshly created\r\n */\r\n addCylinderObstacle(position: Vector3, radius: number, height: number): IObstacle;\r\n\r\n /**\r\n * Creates an oriented box obstacle and add it to the navigation\r\n * @param position world position\r\n * @param extent box size\r\n * @param angle angle in radians of the box orientation on Y axis\r\n * @returns the obstacle freshly created\r\n */\r\n addBoxObstacle(position: Vector3, extent: Vector3, angle: number): IObstacle;\r\n\r\n /**\r\n * Removes an obstacle created by addCylinderObstacle or addBoxObstacle\r\n * @param obstacle obstacle to remove from the navigation\r\n */\r\n removeObstacle(obstacle: IObstacle): void;\r\n\r\n /**\r\n * Release all resources\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * Obstacle interface\r\n */\r\nexport interface IObstacle {}\r\n\r\n/**\r\n * Crowd Interface. A Crowd is a collection of moving agents constrained by a navigation mesh\r\n */\r\nexport interface ICrowd {\r\n /**\r\n * Add a new agent to the crowd with the specified parameter a corresponding transformNode.\r\n * You can attach anything to that node. The node position is updated in the scene update tick.\r\n * @param pos world position that will be constrained by the navigation mesh\r\n * @param parameters agent parameters\r\n * @param transform hooked to the agent that will be update by the scene\r\n * @returns agent index\r\n */\r\n addAgent(pos: Vector3, parameters: IAgentParameters, transform: TransformNode): number;\r\n\r\n /**\r\n * Returns the agent position in world space\r\n * @param index agent index returned by addAgent\r\n * @returns world space position\r\n */\r\n getAgentPosition(index: number): Vector3;\r\n\r\n /**\r\n * Gets the agent position result in world space\r\n * @param index agent index returned by addAgent\r\n * @param result output world space position\r\n */\r\n getAgentPositionToRef(index: number, result: Vector3): void;\r\n\r\n /**\r\n * Gets the agent velocity in world space\r\n * @param index agent index returned by addAgent\r\n * @returns world space velocity\r\n */\r\n getAgentVelocity(index: number): Vector3;\r\n\r\n /**\r\n * Gets the agent velocity result in world space\r\n * @param index agent index returned by addAgent\r\n * @param result output world space velocity\r\n */\r\n getAgentVelocityToRef(index: number, result: Vector3): void;\r\n\r\n /**\r\n * Gets the agent next target point on the path\r\n * @param index agent index returned by addAgent\r\n * @returns world space position\r\n */\r\n getAgentNextTargetPath(index: number): Vector3;\r\n\r\n /**\r\n * Gets the agent state\r\n * @param index agent index returned by addAgent\r\n * @returns agent state\r\n */\r\n getAgentState(index: number): number;\r\n\r\n /**\r\n * returns true if the agent in over an off mesh link connection\r\n * @param index agent index returned by addAgent\r\n * @returns true if over an off mesh link connection\r\n */\r\n overOffmeshConnection(index: number): boolean;\r\n\r\n /**\r\n * Gets the agent next target point on the path\r\n * @param index agent index returned by addAgent\r\n * @param result output world space position\r\n */\r\n getAgentNextTargetPathToRef(index: number, result: Vector3): void;\r\n\r\n /**\r\n * remove a particular agent previously created\r\n * @param index agent index returned by addAgent\r\n */\r\n removeAgent(index: number): void;\r\n\r\n /**\r\n * get the list of all agents attached to this crowd\r\n * @returns list of agent indices\r\n */\r\n getAgents(): number[];\r\n\r\n /**\r\n * Tick update done by the Scene. Agent position/velocity/acceleration is updated by this function\r\n * @param deltaTime in seconds\r\n */\r\n update(deltaTime: number): void;\r\n\r\n /**\r\n * Asks a particular agent to go to a destination. That destination is constrained by the navigation mesh\r\n * @param index agent index returned by addAgent\r\n * @param destination targeted world position\r\n */\r\n agentGoto(index: number, destination: Vector3): void;\r\n\r\n /**\r\n * Teleport the agent to a new position\r\n * @param index agent index returned by addAgent\r\n * @param destination targeted world position\r\n */\r\n agentTeleport(index: number, destination: Vector3): void;\r\n\r\n /**\r\n * Update agent parameters\r\n * @param index agent index returned by addAgent\r\n * @param parameters agent parameters\r\n */\r\n updateAgentParameters(index: number, parameters: IAgentParameters): void;\r\n\r\n /**\r\n * Set the Bounding box extent for doing spatial queries (getClosestPoint, getRandomPointAround, ...)\r\n * The queries will try to find a solution within those bounds\r\n * default is (1,1,1)\r\n * @param extent x,y,z value that define the extent around the queries point of reference\r\n */\r\n setDefaultQueryExtent(extent: Vector3): void;\r\n\r\n /**\r\n * Get the Bounding box extent specified by setDefaultQueryExtent\r\n * @returns the box extent values\r\n */\r\n getDefaultQueryExtent(): Vector3;\r\n\r\n /**\r\n * Get the Bounding box extent result specified by setDefaultQueryExtent\r\n * @param result output the box extent values\r\n */\r\n getDefaultQueryExtentToRef(result: Vector3): void;\r\n\r\n /**\r\n * Get the next corner points composing the path (max 4 points)\r\n * @param index agent index returned by addAgent\r\n * @returns array containing world position composing the path\r\n */\r\n getCorners(index: number): Vector3[];\r\n\r\n /**\r\n * Release all resources\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * Configures an agent\r\n */\r\nexport interface IAgentParameters {\r\n /**\r\n * Agent radius. [Limit: >= 0]\r\n */\r\n radius: number;\r\n\r\n /**\r\n * Agent height. [Limit: > 0]\r\n */\r\n height: number;\r\n\r\n /**\r\n * Maximum allowed acceleration. [Limit: >= 0]\r\n */\r\n maxAcceleration: number;\r\n\r\n /**\r\n * Maximum allowed speed. [Limit: >= 0]\r\n */\r\n maxSpeed: number;\r\n\r\n /**\r\n * Defines how close a collision element must be before it is considered for steering behaviors. [Limits: > 0]\r\n */\r\n collisionQueryRange: number;\r\n\r\n /**\r\n * The path visibility optimization range. [Limit: > 0]\r\n */\r\n pathOptimizationRange: number;\r\n\r\n /**\r\n * How aggressive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0]\r\n */\r\n separationWeight: number;\r\n\r\n /**\r\n * Observers will be notified when agent gets inside the virtual circle with this Radius around destination point.\r\n * Default is agent radius\r\n */\r\n reachRadius?: number;\r\n}\r\n\r\n/**\r\n * Configures the navigation mesh creation\r\n */\r\nexport interface INavMeshParameters {\r\n /**\r\n * The xz-plane cell size to use for fields. [Limit: > 0] [Units: wu]\r\n */\r\n cs: number;\r\n\r\n /**\r\n * The y-axis cell size to use for fields. [Limit: > 0] [Units: wu]\r\n */\r\n ch: number;\r\n\r\n /**\r\n * The maximum slope that is considered walkable. [Limits: 0 <= value < 90] [Units: Degrees]\r\n */\r\n walkableSlopeAngle: number;\r\n\r\n /**\r\n * Minimum floor to 'ceiling' height that will still allow the floor area to\r\n * be considered walkable. [Limit: >= 3] [Units: vx]\r\n */\r\n walkableHeight: number;\r\n\r\n /**\r\n * Maximum ledge height that is considered to still be traversable. [Limit: >=0] [Units: vx]\r\n */\r\n walkableClimb: number;\r\n\r\n /**\r\n * The distance to erode/shrink the walkable area of the heightfield away from\r\n * obstructions. [Limit: >=0] [Units: vx]\r\n */\r\n walkableRadius: number;\r\n\r\n /**\r\n * The maximum allowed length for contour edges along the border of the mesh. [Limit: >=0] [Units: vx]\r\n */\r\n maxEdgeLen: number;\r\n\r\n /**\r\n * The maximum distance a simplified contour's border edges should deviate\r\n * the original raw contour. [Limit: >=0] [Units: vx]\r\n */\r\n maxSimplificationError: number;\r\n\r\n /**\r\n * The minimum number of cells allowed to form isolated island areas. [Limit: >=0] [Units: vx]\r\n */\r\n minRegionArea: number;\r\n\r\n /**\r\n * Any regions with a span count smaller than this value will, if possible,\r\n * be merged with larger regions. [Limit: >=0] [Units: vx]\r\n */\r\n mergeRegionArea: number;\r\n\r\n /**\r\n * The maximum number of vertices allowed for polygons generated during the\r\n * contour to polygon conversion process. [Limit: >= 3]\r\n */\r\n maxVertsPerPoly: number;\r\n\r\n /**\r\n * Sets the sampling distance to use when generating the detail mesh.\r\n * (For height detail only.) [Limits: 0 or >= 0.9] [Units: wu]\r\n */\r\n detailSampleDist: number;\r\n\r\n /**\r\n * The maximum distance the detail mesh surface should deviate from heightfield\r\n * data. (For height detail only.) [Limit: >=0] [Units: wu]\r\n */\r\n detailSampleMaxError: number;\r\n\r\n /**\r\n * If using obstacles, the navmesh must be subdivided internaly by tiles.\r\n * This member defines the tile cube side length in world units.\r\n * If no obstacles are needed, leave it undefined or 0.\r\n */\r\n tileSize?: number;\r\n\r\n /**\r\n * The size of the non-navigable border around the heightfield.\r\n */\r\n borderSize?: number;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"INavigationEngine.js","sourceRoot":"","sources":["../../../../dev/core/src/Navigation/INavigationEngine.ts"],"names":[],"mappings":"","sourcesContent":["import type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Vector3 } from \"../Maths/math\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * Navigation plugin interface to add navigation constrained by a navigation mesh\r\n */\r\nexport interface INavigationEnginePlugin {\r\n /**\r\n * plugin name\r\n */\r\n name: string;\r\n\r\n /**\r\n * Creates a navigation mesh\r\n * @param meshes array of all the geometry used to compute the navigation mesh\r\n * @param parameters bunch of parameters used to filter geometry\r\n */\r\n createNavMesh(meshes: Array<Mesh>, parameters: INavMeshParameters): void;\r\n\r\n /**\r\n * Create a navigation mesh debug mesh\r\n * @param scene is where the mesh will be added\r\n * @returns debug display mesh\r\n */\r\n createDebugNavMesh(scene: Scene): Mesh;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, closest to the parameter position\r\n * @param position world position\r\n * @returns the closest point to position constrained by the navigation mesh\r\n */\r\n getClosestPoint(position: Vector3): Vector3;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, closest to the parameter position\r\n * @param position world position\r\n * @param result output the closest point to position constrained by the navigation mesh\r\n */\r\n getClosestPointToRef(position: Vector3, result: Vector3): void;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, within a particular radius\r\n * @param position world position\r\n * @param maxRadius the maximum distance to the constrained world position\r\n * @returns the closest point to position constrained by the navigation mesh\r\n */\r\n getRandomPointAround(position: Vector3, maxRadius: number): Vector3;\r\n\r\n /**\r\n * Get a navigation mesh constrained position, within a particular radius\r\n * @param position world position\r\n * @param maxRadius the maximum distance to the constrained world position\r\n * @param result output the closest point to position constrained by the navigation mesh\r\n */\r\n getRandomPointAroundToRef(position: Vector3, maxRadius: number, result: Vector3): void;\r\n\r\n /**\r\n * Compute the final position from a segment made of destination-position\r\n * @param position world position\r\n * @param destination world position\r\n * @returns the resulting point along the navmesh\r\n */\r\n moveAlong(position: Vector3, destination: Vector3): Vector3;\r\n\r\n /**\r\n * Compute the final position from a segment made of destination-position\r\n * @param position world position\r\n * @param destination world position\r\n * @param result output the resulting point along the navmesh\r\n */\r\n moveAlongToRef(position: Vector3, destination: Vector3, result: Vector3): void;\r\n\r\n /**\r\n * Compute a navigation path from start to end. Returns an empty array if no path can be computed.\r\n * Path is straight.\r\n * @param start world position\r\n * @param end world position\r\n * @returns array containing world position composing the path\r\n */\r\n computePath(start: Vector3, end: Vector3): Vector3[];\r\n\r\n /**\r\n * Compute a navigation path from start to end. Returns an empty array if no path can be computed.\r\n * Path follows navigation mesh geometry.\r\n * @param start world position\r\n * @param end world position\r\n * @returns array containing world position composing the path\r\n */\r\n computePathSmooth(start: Vector3, end: Vector3): Vector3[];\r\n\r\n /**\r\n * If this plugin is supported\r\n * @returns true if plugin is supported\r\n */\r\n isSupported(): boolean;\r\n\r\n /**\r\n * Create a new Crowd so you can add agents\r\n * @param maxAgents the maximum agent count in the crowd\r\n * @param maxAgentRadius the maximum radius an agent can have\r\n * @param scene to attach the crowd to\r\n * @returns the crowd you can add agents to\r\n */\r\n createCrowd(maxAgents: number, maxAgentRadius: number, scene: Scene): ICrowd;\r\n\r\n /**\r\n * Set the Bounding box extent for doing spatial queries (getClosestPoint, getRandomPointAround, ...)\r\n * The queries will try to find a solution within those bounds\r\n * default is (1,1,1)\r\n * @param extent x,y,z value that define the extent around the queries point of reference\r\n */\r\n setDefaultQueryExtent(extent: Vector3): void;\r\n\r\n /**\r\n * Get the Bounding box extent specified by setDefaultQueryExtent\r\n * @returns the box extent values\r\n */\r\n getDefaultQueryExtent(): Vector3;\r\n\r\n /**\r\n * build the navmesh from a previously saved state using getNavmeshData\r\n * @param data the Uint8Array returned by getNavmeshData\r\n */\r\n buildFromNavmeshData(data: Uint8Array): void;\r\n\r\n /**\r\n * returns the navmesh data that can be used later. The navmesh must be built before retrieving the data\r\n * @returns data the Uint8Array that can be saved and reused\r\n */\r\n getNavmeshData(): Uint8Array;\r\n\r\n /**\r\n * Get the Bounding box extent result specified by setDefaultQueryExtent\r\n * @param result output the box extent values\r\n */\r\n getDefaultQueryExtentToRef(result: Vector3): void;\r\n\r\n /**\r\n * Set the time step of the navigation tick update.\r\n * Default is 1/60.\r\n * A value of 0 will disable fixed time update\r\n * @param newTimeStep the new timestep to apply to this world.\r\n */\r\n setTimeStep(newTimeStep: number): void;\r\n\r\n /**\r\n * Get the time step of the navigation tick update.\r\n * @returns the current time step\r\n */\r\n getTimeStep(): number;\r\n\r\n /**\r\n * If delta time in navigation tick update is greater than the time step\r\n * a number of sub iterations are done. If more iterations are need to reach deltatime\r\n * they will be discarded.\r\n * A value of 0 will set to no maximum and update will use as many substeps as needed\r\n * @param newStepCount the maximum number of iterations\r\n */\r\n setMaximumSubStepCount(newStepCount: number): void;\r\n\r\n /**\r\n * Get the maximum number of iterations per navigation tick update\r\n * @returns the maximum number of iterations\r\n */\r\n getMaximumSubStepCount(): number;\r\n\r\n /**\r\n * Creates a cylinder obstacle and add it to the navigation\r\n * @param position world position\r\n * @param radius cylinder radius\r\n * @param height cylinder height\r\n * @returns the obstacle freshly created\r\n */\r\n addCylinderObstacle(position: Vector3, radius: number, height: number): Nullable<IObstacle>;\r\n\r\n /**\r\n * Creates an oriented box obstacle and add it to the navigation\r\n * @param position world position\r\n * @param extent box size\r\n * @param angle angle in radians of the box orientation on Y axis\r\n * @returns the obstacle freshly created\r\n */\r\n addBoxObstacle(position: Vector3, extent: Vector3, angle: number): Nullable<IObstacle>;\r\n\r\n /**\r\n * Removes an obstacle created by addCylinderObstacle or addBoxObstacle\r\n * @param obstacle obstacle to remove from the navigation\r\n */\r\n removeObstacle(obstacle: IObstacle): void;\r\n\r\n /**\r\n * Release all resources\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * Obstacle type\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport type IObstacle =\r\n | {\r\n type: \"box\";\r\n ref: unknown;\r\n position: Vector3;\r\n halfExtents: Vector3;\r\n angle: number;\r\n }\r\n | {\r\n type: \"cylinder\";\r\n ref: unknown;\r\n position: Vector3;\r\n radius: number;\r\n height: number;\r\n };\r\n\r\n/**\r\n * Crowd Interface. A Crowd is a collection of moving agents constrained by a navigation mesh\r\n */\r\nexport interface ICrowd {\r\n /**\r\n * Add a new agent to the crowd with the specified parameter a corresponding transformNode.\r\n * You can attach anything to that node. The node position is updated in the scene update tick.\r\n * @param pos world position that will be constrained by the navigation mesh\r\n * @param parameters agent parameters\r\n * @param transform hooked to the agent that will be update by the scene\r\n * @returns agent index\r\n */\r\n addAgent(pos: Vector3, parameters: IAgentParameters, transform: TransformNode): number;\r\n\r\n /**\r\n * Returns the agent position in world space\r\n * @param index agent index returned by addAgent\r\n * @returns world space position\r\n */\r\n getAgentPosition(index: number): Vector3;\r\n\r\n /**\r\n * Gets the agent position result in world space\r\n * @param index agent index returned by addAgent\r\n * @param result output world space position\r\n */\r\n getAgentPositionToRef(index: number, result: Vector3): void;\r\n\r\n /**\r\n * Gets the agent velocity in world space\r\n * @param index agent index returned by addAgent\r\n * @returns world space velocity\r\n */\r\n getAgentVelocity(index: number): Vector3;\r\n\r\n /**\r\n * Gets the agent velocity result in world space\r\n * @param index agent index returned by addAgent\r\n * @param result output world space velocity\r\n */\r\n getAgentVelocityToRef(index: number, result: Vector3): void;\r\n\r\n /**\r\n * Gets the agent next target point on the path\r\n * @param index agent index returned by addAgent\r\n * @returns world space position\r\n */\r\n getAgentNextTargetPath(index: number): Vector3;\r\n\r\n /**\r\n * Gets the agent state\r\n * @param index agent index returned by addAgent\r\n * @returns agent state\r\n */\r\n getAgentState(index: number): number;\r\n\r\n /**\r\n * returns true if the agent in over an off mesh link connection\r\n * @param index agent index returned by addAgent\r\n * @returns true if over an off mesh link connection\r\n */\r\n overOffmeshConnection(index: number): boolean;\r\n\r\n /**\r\n * Gets the agent next target point on the path\r\n * @param index agent index returned by addAgent\r\n * @param result output world space position\r\n */\r\n getAgentNextTargetPathToRef(index: number, result: Vector3): void;\r\n\r\n /**\r\n * remove a particular agent previously created\r\n * @param index agent index returned by addAgent\r\n */\r\n removeAgent(index: number): void;\r\n\r\n /**\r\n * get the list of all agents attached to this crowd\r\n * @returns list of agent indices\r\n */\r\n getAgents(): number[];\r\n\r\n /**\r\n * Tick update done by the Scene. Agent position/velocity/acceleration is updated by this function\r\n * @param deltaTime in seconds\r\n */\r\n update(deltaTime: number): void;\r\n\r\n /**\r\n * Asks a particular agent to go to a destination. That destination is constrained by the navigation mesh\r\n * @param index agent index returned by addAgent\r\n * @param destination targeted world position\r\n */\r\n agentGoto(index: number, destination: Vector3): void;\r\n\r\n /**\r\n * Teleport the agent to a new position\r\n * @param index agent index returned by addAgent\r\n * @param destination targeted world position\r\n */\r\n agentTeleport(index: number, destination: Vector3): void;\r\n\r\n /**\r\n * Update agent parameters\r\n * @param index agent index returned by addAgent\r\n * @param parameters agent parameters\r\n */\r\n updateAgentParameters(index: number, parameters: IAgentParameters): void;\r\n\r\n /**\r\n * Set the Bounding box extent for doing spatial queries (getClosestPoint, getRandomPointAround, ...)\r\n * The queries will try to find a solution within those bounds\r\n * default is (1,1,1)\r\n * @param extent x,y,z value that define the extent around the queries point of reference\r\n */\r\n setDefaultQueryExtent(extent: Vector3): void;\r\n\r\n /**\r\n * Get the Bounding box extent specified by setDefaultQueryExtent\r\n * @returns the box extent values\r\n */\r\n getDefaultQueryExtent(): Vector3;\r\n\r\n /**\r\n * Get the Bounding box extent result specified by setDefaultQueryExtent\r\n * @param result output the box extent values\r\n */\r\n getDefaultQueryExtentToRef(result: Vector3): void;\r\n\r\n /**\r\n * Get the next corner points composing the path (max 4 points)\r\n * @param index agent index returned by addAgent\r\n * @returns array containing world position composing the path\r\n */\r\n getCorners(index: number): Vector3[];\r\n\r\n /**\r\n * Release all resources\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * Configures an agent\r\n */\r\nexport interface IAgentParameters {\r\n /**\r\n * Agent radius. [Limit: >= 0]\r\n */\r\n radius: number;\r\n\r\n /**\r\n * Agent height. [Limit: > 0]\r\n */\r\n height: number;\r\n\r\n /**\r\n * Maximum allowed acceleration. [Limit: >= 0]\r\n */\r\n maxAcceleration: number;\r\n\r\n /**\r\n * Maximum allowed speed. [Limit: >= 0]\r\n */\r\n maxSpeed: number;\r\n\r\n /**\r\n * Defines how close a collision element must be before it is considered for steering behaviors. [Limits: > 0]\r\n */\r\n collisionQueryRange: number;\r\n\r\n /**\r\n * The path visibility optimization range. [Limit: > 0]\r\n */\r\n pathOptimizationRange: number;\r\n\r\n /**\r\n * How aggressive the agent manager should be at avoiding collisions with this agent. [Limit: >= 0]\r\n */\r\n separationWeight: number;\r\n\r\n /**\r\n * Observers will be notified when agent gets inside the virtual circle with this Radius around destination point.\r\n * Default is agent radius\r\n */\r\n reachRadius?: number;\r\n}\r\n\r\n/**\r\n * Configures the navigation mesh creation\r\n */\r\nexport interface INavMeshParameters {\r\n /**\r\n * The xz-plane cell size to use for fields. [Limit: > 0] [Units: wu]\r\n */\r\n cs: number;\r\n\r\n /**\r\n * The y-axis cell size to use for fields. [Limit: > 0] [Units: wu]\r\n */\r\n ch: number;\r\n\r\n /**\r\n * The maximum slope that is considered walkable. [Limits: 0 <= value < 90] [Units: Degrees]\r\n */\r\n walkableSlopeAngle: number;\r\n\r\n /**\r\n * Minimum floor to 'ceiling' height that will still allow the floor area to\r\n * be considered walkable. [Limit: >= 3] [Units: vx]\r\n */\r\n walkableHeight: number;\r\n\r\n /**\r\n * Maximum ledge height that is considered to still be traversable. [Limit: >=0] [Units: vx]\r\n */\r\n walkableClimb: number;\r\n\r\n /**\r\n * The distance to erode/shrink the walkable area of the heightfield away from\r\n * obstructions. [Limit: >=0] [Units: vx]\r\n */\r\n walkableRadius: number;\r\n\r\n /**\r\n * The maximum allowed length for contour edges along the border of the mesh. [Limit: >=0] [Units: vx]\r\n */\r\n maxEdgeLen: number;\r\n\r\n /**\r\n * The maximum distance a simplified contour's border edges should deviate\r\n * the original raw contour. [Limit: >=0] [Units: vx]\r\n */\r\n maxSimplificationError: number;\r\n\r\n /**\r\n * The minimum number of cells allowed to form isolated island areas. [Limit: >=0] [Units: vx]\r\n */\r\n minRegionArea: number;\r\n\r\n /**\r\n * Any regions with a span count smaller than this value will, if possible,\r\n * be merged with larger regions. [Limit: >=0] [Units: vx]\r\n */\r\n mergeRegionArea: number;\r\n\r\n /**\r\n * The maximum number of vertices allowed for polygons generated during the\r\n * contour to polygon conversion process. [Limit: >= 3]\r\n */\r\n maxVertsPerPoly: number;\r\n\r\n /**\r\n * Sets the sampling distance to use when generating the detail mesh.\r\n * (For height detail only.) [Limits: 0 or >= 0.9] [Units: wu]\r\n */\r\n detailSampleDist: number;\r\n\r\n /**\r\n * The maximum distance the detail mesh surface should deviate from heightfield\r\n * data. (For height detail only.) [Limit: >=0] [Units: wu]\r\n */\r\n detailSampleMaxError: number;\r\n\r\n /**\r\n * If using obstacles, the navmesh must be subdivided internaly by tiles.\r\n * This member defines the tile cube side length in world units.\r\n * If no obstacles are needed, leave it undefined or 0.\r\n */\r\n tileSize?: number;\r\n\r\n /**\r\n * The size of the non-navigable border around the heightfield.\r\n */\r\n borderSize?: number;\r\n}\r\n"]}
|