@babylonjs/core 5.35.0 → 5.36.0
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/Audio/sound.d.ts +5 -0
- package/Audio/sound.js +7 -0
- package/Audio/sound.js.map +1 -1
- package/Debug/physicsViewer.d.ts +4 -3
- package/Debug/physicsViewer.js +2 -2
- package/Debug/physicsViewer.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +15 -15
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +4 -0
- package/Engines/Extensions/engine.views.js +61 -42
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Native/nativeHardwareTexture.d.ts +14 -0
- package/Engines/Native/nativeHardwareTexture.js +24 -0
- package/Engines/Native/nativeHardwareTexture.js.map +1 -0
- package/Engines/Native/nativeInterfaces.d.ts +22 -15
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativePipelineContext.d.ts +252 -0
- package/Engines/Native/nativePipelineContext.js +502 -0
- package/Engines/Native/nativePipelineContext.js.map +1 -0
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +16 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +33 -0
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -0
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -3
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/engine.d.ts +1 -0
- package/Engines/engine.js +24 -18
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +18 -17
- package/Engines/nativeEngine.js +100 -598
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +1 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +1 -1
- package/Engines/thinEngine.js +41 -38
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +3 -1
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Inputs/scene.inputManager.js +4 -4
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +3 -3
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +19 -1
- package/Materials/Node/nodeMaterial.js +30 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +2 -8
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +2 -1
- package/Materials/Textures/baseTexture.js +3 -2
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +2 -0
- package/Materials/Textures/internalTexture.js +4 -0
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +0 -2
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +53 -3
- package/Materials/Textures/renderTargetTexture.js +25 -25
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +2 -0
- package/Materials/Textures/texture.js +35 -7
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +4 -1
- package/Materials/Textures/textureCreationOptions.js.map +1 -1
- package/Materials/material.js +1 -1
- package/Materials/material.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +4 -4
- package/Meshes/abstractMesh.js +4 -4
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -2
- package/Meshes/mesh.js +1 -1
- package/Meshes/mesh.js.map +1 -1
- package/Misc/copyTextureToTexture.d.ts +9 -2
- package/Misc/copyTextureToTexture.js +23 -1
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +15 -1
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +24 -2
- package/Particles/gpuParticleSystem.js +98 -43
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +6 -1
- package/Particles/particleSystem.js +7 -2
- package/Particles/particleSystem.js.map +1 -1
- package/Physics/IPhysicsEngine.d.ts +8 -108
- package/Physics/IPhysicsEngine.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -389
- package/Physics/Plugins/ammoJSPlugin.js +2 -1414
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -75
- package/Physics/Plugins/cannonJSPlugin.js +2 -664
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/Plugins/oimoJSPlugin.d.ts +1 -59
- package/Physics/Plugins/oimoJSPlugin.js +2 -432
- package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/index.d.ts +3 -6
- package/Physics/index.js +3 -6
- package/Physics/index.js.map +1 -1
- package/Physics/physicsEngine.d.ts +1 -135
- package/Physics/physicsEngine.js +2 -221
- package/Physics/physicsEngine.js.map +1 -1
- package/Physics/physicsEngineComponent.d.ts +7 -42
- package/Physics/physicsEngineComponent.js +11 -71
- package/Physics/physicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.d.ts +1 -411
- package/Physics/physicsHelper.js +2 -708
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +1 -640
- package/Physics/physicsImpostor.js +2 -1004
- package/Physics/physicsImpostor.js.map +1 -1
- package/Physics/physicsJoint.d.ts +1 -275
- package/Physics/physicsJoint.js +2 -222
- package/Physics/physicsJoint.js.map +1 -1
- package/Physics/v1/IPhysicsEnginePlugin.d.ts +73 -0
- package/Physics/v1/IPhysicsEnginePlugin.js +2 -0
- package/Physics/v1/IPhysicsEnginePlugin.js.map +1 -0
- package/Physics/v1/Plugins/ammoJSPlugin.d.ts +401 -0
- package/Physics/v1/Plugins/ammoJSPlugin.js +1431 -0
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -0
- package/Physics/v1/Plugins/cannonJSPlugin.d.ts +87 -0
- package/Physics/v1/Plugins/cannonJSPlugin.js +683 -0
- package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -0
- package/Physics/{Plugins → v1/Plugins}/index.d.ts +0 -0
- package/Physics/{Plugins → v1/Plugins}/index.js +0 -0
- package/Physics/v1/Plugins/index.js.map +1 -0
- package/Physics/v1/Plugins/oimoJSPlugin.d.ts +71 -0
- package/Physics/v1/Plugins/oimoJSPlugin.js +450 -0
- package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -0
- package/Physics/v1/index.d.ts +7 -0
- package/Physics/v1/index.js +9 -0
- package/Physics/v1/index.js.map +1 -0
- package/Physics/v1/physicsEngine.d.ts +147 -0
- package/Physics/v1/physicsEngine.js +237 -0
- package/Physics/v1/physicsEngine.js.map +1 -0
- package/Physics/v1/physicsEngineComponent.d.ts +45 -0
- package/Physics/v1/physicsEngineComponent.js +70 -0
- package/Physics/v1/physicsEngineComponent.js.map +1 -0
- package/Physics/v1/physicsHelper.d.ts +411 -0
- package/Physics/v1/physicsHelper.js +709 -0
- package/Physics/v1/physicsHelper.js.map +1 -0
- package/Physics/v1/physicsImpostor.d.ts +636 -0
- package/Physics/v1/physicsImpostor.js +1001 -0
- package/Physics/v1/physicsImpostor.js.map +1 -0
- package/Physics/v1/physicsJoint.d.ts +275 -0
- package/Physics/v1/physicsJoint.js +223 -0
- package/Physics/v1/physicsJoint.js.map +1 -0
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +170 -0
- package/Physics/v2/IPhysicsEnginePlugin.js +47 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -0
- package/Physics/v2/Plugins/index.d.ts +0 -0
- package/Physics/v2/Plugins/index.js +2 -0
- package/Physics/v2/Plugins/index.js.map +1 -0
- package/Physics/v2/index.d.ts +6 -0
- package/Physics/v2/index.js +8 -0
- package/Physics/v2/index.js.map +1 -0
- package/Physics/v2/physicsAggregate.d.ts +114 -0
- package/Physics/v2/physicsAggregate.js +46 -0
- package/Physics/v2/physicsAggregate.js.map +1 -0
- package/Physics/v2/physicsBody.d.ts +109 -0
- package/Physics/v2/physicsBody.js +158 -0
- package/Physics/v2/physicsBody.js.map +1 -0
- package/Physics/v2/physicsConstraint.d.ts +184 -0
- package/Physics/v2/physicsConstraint.js +257 -0
- package/Physics/v2/physicsConstraint.js.map +1 -0
- package/Physics/v2/physicsEngine.d.ts +103 -0
- package/Physics/v2/physicsEngine.js +146 -0
- package/Physics/v2/physicsEngine.js.map +1 -0
- package/Physics/v2/physicsEngineComponent.d.ts +31 -0
- package/Physics/v2/physicsEngineComponent.js +50 -0
- package/Physics/v2/physicsEngineComponent.js.map +1 -0
- package/Physics/v2/physicsMaterial.d.ts +45 -0
- package/Physics/v2/physicsMaterial.js +67 -0
- package/Physics/v2/physicsMaterial.js.map +1 -0
- package/Physics/v2/physicsShape.d.ts +182 -0
- package/Physics/v2/physicsShape.js +229 -0
- package/Physics/v2/physicsShape.js.map +1 -0
- package/PostProcesses/postProcess.d.ts +3 -1
- package/PostProcesses/postProcess.js +4 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.d.ts +153 -0
- package/Rendering/fluidRenderer/fluidRenderer.js +410 -0
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -0
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +13 -0
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +31 -0
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +81 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +180 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +63 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +130 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +64 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +104 -0
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +234 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +690 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -0
- package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +56 -0
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +261 -0
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -0
- package/Rendering/fluidRenderer/index.d.ts +5 -0
- package/Rendering/fluidRenderer/index.js +6 -0
- package/Rendering/fluidRenderer/index.js.map +1 -0
- package/Rendering/index.d.ts +1 -0
- package/Rendering/index.js +2 -0
- package/Rendering/index.js.map +1 -1
- package/Shaders/copyTextureToTexture.fragment.js +4 -1
- package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
- package/Shaders/fluidRenderingBilateralBlur.fragment.d.ts +5 -0
- package/Shaders/fluidRenderingBilateralBlur.fragment.js +9 -0
- package/Shaders/fluidRenderingBilateralBlur.fragment.js.map +1 -0
- package/Shaders/fluidRenderingParticleDepth.fragment.d.ts +5 -0
- package/Shaders/fluidRenderingParticleDepth.fragment.js +17 -0
- package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -0
- package/Shaders/fluidRenderingParticleDepth.vertex.d.ts +5 -0
- package/Shaders/fluidRenderingParticleDepth.vertex.js +13 -0
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -0
- package/Shaders/fluidRenderingParticleDiffuse.fragment.d.ts +5 -0
- package/Shaders/fluidRenderingParticleDiffuse.fragment.js +9 -0
- package/Shaders/fluidRenderingParticleDiffuse.fragment.js.map +1 -0
- package/Shaders/fluidRenderingParticleDiffuse.vertex.d.ts +5 -0
- package/Shaders/fluidRenderingParticleDiffuse.vertex.js +4 -0
- package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -0
- package/Shaders/fluidRenderingParticleThickness.fragment.d.ts +5 -0
- package/Shaders/fluidRenderingParticleThickness.fragment.js +9 -0
- package/Shaders/fluidRenderingParticleThickness.fragment.js.map +1 -0
- package/Shaders/fluidRenderingParticleThickness.vertex.d.ts +5 -0
- package/Shaders/fluidRenderingParticleThickness.vertex.js +9 -0
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -0
- package/Shaders/fluidRenderingRender.fragment.d.ts +5 -0
- package/Shaders/fluidRenderingRender.fragment.js +46 -0
- package/Shaders/fluidRenderingRender.fragment.js.map +1 -0
- package/Shaders/fluidRenderingStandardBlur.fragment.d.ts +5 -0
- package/Shaders/fluidRenderingStandardBlur.fragment.js +9 -0
- package/Shaders/fluidRenderingStandardBlur.fragment.js.map +1 -0
- package/XR/features/WebXRControllerPhysics.d.ts +1 -1
- package/XR/features/WebXRControllerPhysics.js +1 -1
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +1 -1
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +6 -1
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +3 -0
- package/sceneComponent.js +3 -0
- package/sceneComponent.js.map +1 -1
- package/Physics/Plugins/index.js.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { Scene } from "../../scene.js";
|
|
2
|
+
import type { FloatArray, Nullable } from "../../types.js";
|
|
3
|
+
import type { Camera } from "../../Cameras/camera.js";
|
|
4
|
+
import type { IParticleSystem } from "../../Particles/IParticleSystem.js";
|
|
5
|
+
import type { ISceneComponent } from "../../sceneComponent.js";
|
|
6
|
+
import type { FluidRenderingObject } from "./fluidRenderingObject";
|
|
7
|
+
import { FluidRenderingTargetRenderer } from "./fluidRenderingTargetRenderer";
|
|
8
|
+
import "../../Shaders/fluidRenderingParticleDepth.vertex";
|
|
9
|
+
import "../../Shaders/fluidRenderingParticleDepth.fragment";
|
|
10
|
+
import "../../Shaders/fluidRenderingParticleThickness.vertex";
|
|
11
|
+
import "../../Shaders/fluidRenderingParticleThickness.fragment";
|
|
12
|
+
import "../../Shaders/fluidRenderingParticleDiffuse.vertex";
|
|
13
|
+
import "../../Shaders/fluidRenderingParticleDiffuse.fragment";
|
|
14
|
+
import "../../Shaders/fluidRenderingBilateralBlur.fragment";
|
|
15
|
+
import "../../Shaders/fluidRenderingStandardBlur.fragment";
|
|
16
|
+
import "../../Shaders/fluidRenderingRender.fragment";
|
|
17
|
+
declare module "core/abstractScene" {
|
|
18
|
+
interface AbstractScene {
|
|
19
|
+
/** @internal (Backing field) */
|
|
20
|
+
_fluidRenderer: Nullable<FluidRenderer>;
|
|
21
|
+
/**
|
|
22
|
+
* Gets or Sets the fluid renderer associated to the scene.
|
|
23
|
+
*/
|
|
24
|
+
fluidRenderer: Nullable<FluidRenderer>;
|
|
25
|
+
/**
|
|
26
|
+
* Enables the fluid renderer and associates it with the scene
|
|
27
|
+
* @returns the FluidRenderer
|
|
28
|
+
*/
|
|
29
|
+
enableFluidRenderer(): Nullable<FluidRenderer>;
|
|
30
|
+
/**
|
|
31
|
+
* Disables the fluid renderer associated with the scene
|
|
32
|
+
*/
|
|
33
|
+
disableFluidRenderer(): void;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Defines the fluid renderer scene component responsible to render objects as fluids
|
|
38
|
+
*/
|
|
39
|
+
export declare class FluidRendererSceneComponent implements ISceneComponent {
|
|
40
|
+
/**
|
|
41
|
+
* The component name helpful to identify the component in the list of scene components.
|
|
42
|
+
*/
|
|
43
|
+
readonly name = "FluidRenderer";
|
|
44
|
+
/**
|
|
45
|
+
* The scene the component belongs to.
|
|
46
|
+
*/
|
|
47
|
+
scene: Scene;
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new instance of the component for the given scene
|
|
50
|
+
* @param scene Defines the scene to register the component in
|
|
51
|
+
*/
|
|
52
|
+
constructor(scene: Scene);
|
|
53
|
+
/**
|
|
54
|
+
* Registers the component in a given scene
|
|
55
|
+
*/
|
|
56
|
+
register(): void;
|
|
57
|
+
private _gatherActiveCameraRenderTargets;
|
|
58
|
+
private _afterCameraDraw;
|
|
59
|
+
/**
|
|
60
|
+
* Rebuilds the elements related to this component in case of
|
|
61
|
+
* context lost for instance.
|
|
62
|
+
*/
|
|
63
|
+
rebuild(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Disposes the component and the associated resources
|
|
66
|
+
*/
|
|
67
|
+
dispose(): void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* An object rendered as a fluid.
|
|
71
|
+
* It consists of the object itself as well as the render target renderer (which is used to generate the textures (render target) needed for fluid rendering)
|
|
72
|
+
*/
|
|
73
|
+
export interface IFluidRenderingRenderObject {
|
|
74
|
+
/** object rendered as a fluid */
|
|
75
|
+
object: FluidRenderingObject;
|
|
76
|
+
/** target renderer used to render the fluid object */
|
|
77
|
+
targetRenderer: FluidRenderingTargetRenderer;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Class responsible for fluid rendering.
|
|
81
|
+
* It is implementing the method described in https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf
|
|
82
|
+
*/
|
|
83
|
+
export declare class FluidRenderer {
|
|
84
|
+
/** @internal */
|
|
85
|
+
static _SceneComponentInitialization(scene: Scene): void;
|
|
86
|
+
private _scene;
|
|
87
|
+
private _engine;
|
|
88
|
+
private _onEngineResizeObserver;
|
|
89
|
+
private _cameras;
|
|
90
|
+
/** Retrieves all the render objects managed by the class */
|
|
91
|
+
readonly renderObjects: Array<IFluidRenderingRenderObject>;
|
|
92
|
+
/** Retrieves all the render target renderers managed by the class */
|
|
93
|
+
readonly targetRenderers: FluidRenderingTargetRenderer[];
|
|
94
|
+
/**
|
|
95
|
+
* Initializes the class
|
|
96
|
+
* @param scene Scene in which the objects are part of
|
|
97
|
+
*/
|
|
98
|
+
constructor(scene: Scene);
|
|
99
|
+
/**
|
|
100
|
+
* Reinitializes the class
|
|
101
|
+
* Can be used if you change the object priority (FluidRenderingObject.priority), to make sure the objects are rendered in the right order
|
|
102
|
+
*/
|
|
103
|
+
recreate(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Gets the render object corresponding to a particle system (null if the particle system is not rendered as a fluid)
|
|
106
|
+
* @param ps The particle system
|
|
107
|
+
* @returns the render object corresponding to this particle system if any, otherwise null
|
|
108
|
+
*/
|
|
109
|
+
getRenderObjectFromParticleSystem(ps: IParticleSystem): Nullable<IFluidRenderingRenderObject>;
|
|
110
|
+
/**
|
|
111
|
+
* Adds a particle system to the fluid renderer.
|
|
112
|
+
* Note that you should not normally call this method directly, as you can simply use the renderAsFluid property of the ParticleSystem/GPUParticleSystem class
|
|
113
|
+
* @param ps particle system
|
|
114
|
+
* @param generateDiffuseTexture True if you want to generate a diffuse texture from the particle system and use it as part of the fluid rendering (default: false)
|
|
115
|
+
* @param targetRenderer The target renderer used to display the particle system as a fluid. If not provided, the method will create a new one
|
|
116
|
+
* @param camera The camera used by the target renderer (if the target renderer is created by the method)
|
|
117
|
+
* @returns the render object corresponding to the particle system
|
|
118
|
+
*/
|
|
119
|
+
addParticleSystem(ps: IParticleSystem, generateDiffuseTexture?: boolean, targetRenderer?: FluidRenderingTargetRenderer, camera?: Camera): IFluidRenderingRenderObject;
|
|
120
|
+
/**
|
|
121
|
+
* Adds a custom particle set to the fluid renderer.
|
|
122
|
+
* @param buffers The list of buffers (should contain at least a "position" buffer!)
|
|
123
|
+
* @param numParticles Number of particles in each buffer
|
|
124
|
+
* @param generateDiffuseTexture True if you want to generate a diffuse texture from buffers and use it as part of the fluid rendering (default: false). For the texture to be generated correctly, you need a "color" buffer in the set!
|
|
125
|
+
* @param targetRenderer The target renderer used to display the particle system as a fluid. If not provided, the method will create a new one
|
|
126
|
+
* @param camera The camera used by the target renderer (if the target renderer is created by the method)
|
|
127
|
+
* @returns the render object corresponding to the custom particle set
|
|
128
|
+
*/
|
|
129
|
+
addCustomParticles(buffers: {
|
|
130
|
+
[key: string]: FloatArray;
|
|
131
|
+
}, numParticles: number, generateDiffuseTexture?: boolean, targetRenderer?: FluidRenderingTargetRenderer, camera?: Camera): IFluidRenderingRenderObject;
|
|
132
|
+
/**
|
|
133
|
+
* Removes a render object from the fluid renderer
|
|
134
|
+
* @param renderObject the render object to remove
|
|
135
|
+
* @param removeUnusedTargetRenderer True to remove/dispose of the target renderer if it's not used anymore (default: true)
|
|
136
|
+
* @returns True if the render object has been found and released, else false
|
|
137
|
+
*/
|
|
138
|
+
removeRenderObject(renderObject: IFluidRenderingRenderObject, removeUnusedTargetRenderer?: boolean): boolean;
|
|
139
|
+
private _sortRenderingObjects;
|
|
140
|
+
private _removeUnusedTargetRenderers;
|
|
141
|
+
private _getParticleSystemIndex;
|
|
142
|
+
private _initialize;
|
|
143
|
+
private _setParticleSizeForRenderTargets;
|
|
144
|
+
private _setUseVelocityForRenderObject;
|
|
145
|
+
/** @internal */
|
|
146
|
+
_prepareRendering(): void;
|
|
147
|
+
/** @internal */
|
|
148
|
+
_render(forCamera?: Camera): void;
|
|
149
|
+
/**
|
|
150
|
+
* Disposes of all the ressources used by the class
|
|
151
|
+
*/
|
|
152
|
+
dispose(): void;
|
|
153
|
+
}
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
import { Scene } from "../../scene.js";
|
|
2
|
+
import { SceneComponentConstants } from "../../sceneComponent.js";
|
|
3
|
+
import { FluidRenderingObjectParticleSystem } from "./fluidRenderingObjectParticleSystem.js";
|
|
4
|
+
import { FluidRenderingTargetRenderer } from "./fluidRenderingTargetRenderer.js";
|
|
5
|
+
import { FluidRenderingObjectCustomParticles } from "./fluidRenderingObjectCustomParticles.js";
|
|
6
|
+
import { FluidRenderingDepthTextureCopy } from "./fluidRenderingDepthTextureCopy.js";
|
|
7
|
+
import "../../Shaders/fluidRenderingParticleDepth.vertex.js";
|
|
8
|
+
import "../../Shaders/fluidRenderingParticleDepth.fragment.js";
|
|
9
|
+
import "../../Shaders/fluidRenderingParticleThickness.vertex.js";
|
|
10
|
+
import "../../Shaders/fluidRenderingParticleThickness.fragment.js";
|
|
11
|
+
import "../../Shaders/fluidRenderingParticleDiffuse.vertex.js";
|
|
12
|
+
import "../../Shaders/fluidRenderingParticleDiffuse.fragment.js";
|
|
13
|
+
import "../../Shaders/fluidRenderingBilateralBlur.fragment.js";
|
|
14
|
+
import "../../Shaders/fluidRenderingStandardBlur.fragment.js";
|
|
15
|
+
import "../../Shaders/fluidRenderingRender.fragment.js";
|
|
16
|
+
Object.defineProperty(Scene.prototype, "fluidRenderer", {
|
|
17
|
+
get: function () {
|
|
18
|
+
return this._fluidRenderer;
|
|
19
|
+
},
|
|
20
|
+
set: function (value) {
|
|
21
|
+
this._fluidRenderer = value;
|
|
22
|
+
},
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
});
|
|
26
|
+
Scene.prototype.enableFluidRenderer = function () {
|
|
27
|
+
if (this._fluidRenderer) {
|
|
28
|
+
return this._fluidRenderer;
|
|
29
|
+
}
|
|
30
|
+
this._fluidRenderer = new FluidRenderer(this);
|
|
31
|
+
return this._fluidRenderer;
|
|
32
|
+
};
|
|
33
|
+
Scene.prototype.disableFluidRenderer = function () {
|
|
34
|
+
var _a;
|
|
35
|
+
(_a = this._fluidRenderer) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
36
|
+
this._fluidRenderer = null;
|
|
37
|
+
};
|
|
38
|
+
function IsParticleSystemObject(obj) {
|
|
39
|
+
return !!obj.particleSystem;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Defines the fluid renderer scene component responsible to render objects as fluids
|
|
43
|
+
*/
|
|
44
|
+
export class FluidRendererSceneComponent {
|
|
45
|
+
/**
|
|
46
|
+
* Creates a new instance of the component for the given scene
|
|
47
|
+
* @param scene Defines the scene to register the component in
|
|
48
|
+
*/
|
|
49
|
+
constructor(scene) {
|
|
50
|
+
/**
|
|
51
|
+
* The component name helpful to identify the component in the list of scene components.
|
|
52
|
+
*/
|
|
53
|
+
this.name = SceneComponentConstants.NAME_FLUIDRENDERER;
|
|
54
|
+
this.scene = scene;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Registers the component in a given scene
|
|
58
|
+
*/
|
|
59
|
+
register() {
|
|
60
|
+
this.scene._gatherActiveCameraRenderTargetsStage.registerStep(SceneComponentConstants.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER, this, this._gatherActiveCameraRenderTargets);
|
|
61
|
+
this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_FLUIDRENDERER, this, this._afterCameraDraw);
|
|
62
|
+
}
|
|
63
|
+
_gatherActiveCameraRenderTargets(_renderTargets) {
|
|
64
|
+
var _a;
|
|
65
|
+
(_a = this.scene.fluidRenderer) === null || _a === void 0 ? void 0 : _a._prepareRendering();
|
|
66
|
+
}
|
|
67
|
+
_afterCameraDraw(camera) {
|
|
68
|
+
var _a;
|
|
69
|
+
(_a = this.scene.fluidRenderer) === null || _a === void 0 ? void 0 : _a._render(camera);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Rebuilds the elements related to this component in case of
|
|
73
|
+
* context lost for instance.
|
|
74
|
+
*/
|
|
75
|
+
rebuild() {
|
|
76
|
+
if (this.scene._fluidRenderer) {
|
|
77
|
+
// Release resources first
|
|
78
|
+
this.scene.disableFluidRenderer();
|
|
79
|
+
// Re-enable
|
|
80
|
+
this.scene.enableFluidRenderer();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Disposes the component and the associated resources
|
|
85
|
+
*/
|
|
86
|
+
dispose() {
|
|
87
|
+
this.scene.disableFluidRenderer();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Class responsible for fluid rendering.
|
|
92
|
+
* It is implementing the method described in https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf
|
|
93
|
+
*/
|
|
94
|
+
export class FluidRenderer {
|
|
95
|
+
/**
|
|
96
|
+
* Initializes the class
|
|
97
|
+
* @param scene Scene in which the objects are part of
|
|
98
|
+
*/
|
|
99
|
+
constructor(scene) {
|
|
100
|
+
this._scene = scene;
|
|
101
|
+
this._engine = scene.getEngine();
|
|
102
|
+
this._onEngineResizeObserver = null;
|
|
103
|
+
this.renderObjects = [];
|
|
104
|
+
this.targetRenderers = [];
|
|
105
|
+
this._cameras = new Map();
|
|
106
|
+
FluidRenderer._SceneComponentInitialization(this._scene);
|
|
107
|
+
this._onEngineResizeObserver = this._engine.onResizeObservable.add(() => {
|
|
108
|
+
this._initialize();
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** @internal */
|
|
112
|
+
static _SceneComponentInitialization(scene) {
|
|
113
|
+
let component = scene._getComponent(SceneComponentConstants.NAME_FLUIDRENDERER);
|
|
114
|
+
if (!component) {
|
|
115
|
+
component = new FluidRendererSceneComponent(scene);
|
|
116
|
+
scene._addComponent(component);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Reinitializes the class
|
|
121
|
+
* Can be used if you change the object priority (FluidRenderingObject.priority), to make sure the objects are rendered in the right order
|
|
122
|
+
*/
|
|
123
|
+
recreate() {
|
|
124
|
+
this._sortRenderingObjects();
|
|
125
|
+
this._initialize();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Gets the render object corresponding to a particle system (null if the particle system is not rendered as a fluid)
|
|
129
|
+
* @param ps The particle system
|
|
130
|
+
* @returns the render object corresponding to this particle system if any, otherwise null
|
|
131
|
+
*/
|
|
132
|
+
getRenderObjectFromParticleSystem(ps) {
|
|
133
|
+
const index = this._getParticleSystemIndex(ps);
|
|
134
|
+
return index !== -1 ? this.renderObjects[index] : null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Adds a particle system to the fluid renderer.
|
|
138
|
+
* Note that you should not normally call this method directly, as you can simply use the renderAsFluid property of the ParticleSystem/GPUParticleSystem class
|
|
139
|
+
* @param ps particle system
|
|
140
|
+
* @param generateDiffuseTexture True if you want to generate a diffuse texture from the particle system and use it as part of the fluid rendering (default: false)
|
|
141
|
+
* @param targetRenderer The target renderer used to display the particle system as a fluid. If not provided, the method will create a new one
|
|
142
|
+
* @param camera The camera used by the target renderer (if the target renderer is created by the method)
|
|
143
|
+
* @returns the render object corresponding to the particle system
|
|
144
|
+
*/
|
|
145
|
+
addParticleSystem(ps, generateDiffuseTexture, targetRenderer, camera) {
|
|
146
|
+
const object = new FluidRenderingObjectParticleSystem(this._scene, ps);
|
|
147
|
+
object.onParticleSizeChanged.add(this._setParticleSizeForRenderTargets.bind(this));
|
|
148
|
+
if (!targetRenderer) {
|
|
149
|
+
targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera);
|
|
150
|
+
this.targetRenderers.push(targetRenderer);
|
|
151
|
+
}
|
|
152
|
+
if (!targetRenderer._onUseVelocityChanged.hasObservers()) {
|
|
153
|
+
targetRenderer._onUseVelocityChanged.add(this._setUseVelocityForRenderObject.bind(this));
|
|
154
|
+
}
|
|
155
|
+
if (generateDiffuseTexture !== undefined) {
|
|
156
|
+
targetRenderer.generateDiffuseTexture = generateDiffuseTexture;
|
|
157
|
+
}
|
|
158
|
+
const renderObject = { object, targetRenderer };
|
|
159
|
+
this.renderObjects.push(renderObject);
|
|
160
|
+
this._sortRenderingObjects();
|
|
161
|
+
this._setParticleSizeForRenderTargets();
|
|
162
|
+
return renderObject;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Adds a custom particle set to the fluid renderer.
|
|
166
|
+
* @param buffers The list of buffers (should contain at least a "position" buffer!)
|
|
167
|
+
* @param numParticles Number of particles in each buffer
|
|
168
|
+
* @param generateDiffuseTexture True if you want to generate a diffuse texture from buffers and use it as part of the fluid rendering (default: false). For the texture to be generated correctly, you need a "color" buffer in the set!
|
|
169
|
+
* @param targetRenderer The target renderer used to display the particle system as a fluid. If not provided, the method will create a new one
|
|
170
|
+
* @param camera The camera used by the target renderer (if the target renderer is created by the method)
|
|
171
|
+
* @returns the render object corresponding to the custom particle set
|
|
172
|
+
*/
|
|
173
|
+
addCustomParticles(buffers, numParticles, generateDiffuseTexture, targetRenderer, camera) {
|
|
174
|
+
const object = new FluidRenderingObjectCustomParticles(this._scene, buffers, numParticles);
|
|
175
|
+
object.onParticleSizeChanged.add(this._setParticleSizeForRenderTargets.bind(this));
|
|
176
|
+
if (!targetRenderer) {
|
|
177
|
+
targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera);
|
|
178
|
+
this.targetRenderers.push(targetRenderer);
|
|
179
|
+
}
|
|
180
|
+
if (!targetRenderer._onUseVelocityChanged.hasObservers()) {
|
|
181
|
+
targetRenderer._onUseVelocityChanged.add(this._setUseVelocityForRenderObject.bind(this));
|
|
182
|
+
}
|
|
183
|
+
if (generateDiffuseTexture !== undefined) {
|
|
184
|
+
targetRenderer.generateDiffuseTexture = generateDiffuseTexture;
|
|
185
|
+
}
|
|
186
|
+
const renderObject = { object, targetRenderer };
|
|
187
|
+
this.renderObjects.push(renderObject);
|
|
188
|
+
this._sortRenderingObjects();
|
|
189
|
+
this._setParticleSizeForRenderTargets();
|
|
190
|
+
return renderObject;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Removes a render object from the fluid renderer
|
|
194
|
+
* @param renderObject the render object to remove
|
|
195
|
+
* @param removeUnusedTargetRenderer True to remove/dispose of the target renderer if it's not used anymore (default: true)
|
|
196
|
+
* @returns True if the render object has been found and released, else false
|
|
197
|
+
*/
|
|
198
|
+
removeRenderObject(renderObject, removeUnusedTargetRenderer = true) {
|
|
199
|
+
const index = this.renderObjects.indexOf(renderObject);
|
|
200
|
+
if (index === -1) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
renderObject.object.dispose();
|
|
204
|
+
this.renderObjects.splice(index, 1);
|
|
205
|
+
if (removeUnusedTargetRenderer && this._removeUnusedTargetRenderers()) {
|
|
206
|
+
this._initialize();
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this._setParticleSizeForRenderTargets();
|
|
210
|
+
}
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
_sortRenderingObjects() {
|
|
214
|
+
this.renderObjects.sort((a, b) => {
|
|
215
|
+
return a.object.priority < b.object.priority ? -1 : a.object.priority > b.object.priority ? 1 : 0;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
_removeUnusedTargetRenderers() {
|
|
219
|
+
const indexes = {};
|
|
220
|
+
for (let i = 0; i < this.renderObjects.length; ++i) {
|
|
221
|
+
const targetRenderer = this.renderObjects[i].targetRenderer;
|
|
222
|
+
indexes[this.targetRenderers.indexOf(targetRenderer)] = true;
|
|
223
|
+
}
|
|
224
|
+
let removed = false;
|
|
225
|
+
const newList = [];
|
|
226
|
+
for (let i = 0; i < this.targetRenderers.length; ++i) {
|
|
227
|
+
if (!indexes[i]) {
|
|
228
|
+
this.targetRenderers[i].dispose();
|
|
229
|
+
removed = true;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
newList.push(this.targetRenderers[i]);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (removed) {
|
|
236
|
+
this.targetRenderers.length = 0;
|
|
237
|
+
this.targetRenderers.push(...newList);
|
|
238
|
+
}
|
|
239
|
+
return removed;
|
|
240
|
+
}
|
|
241
|
+
_getParticleSystemIndex(ps) {
|
|
242
|
+
for (let i = 0; i < this.renderObjects.length; ++i) {
|
|
243
|
+
const obj = this.renderObjects[i].object;
|
|
244
|
+
if (IsParticleSystemObject(obj) && obj.particleSystem === ps) {
|
|
245
|
+
return i;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return -1;
|
|
249
|
+
}
|
|
250
|
+
_initialize() {
|
|
251
|
+
for (let i = 0; i < this.targetRenderers.length; ++i) {
|
|
252
|
+
this.targetRenderers[i].dispose();
|
|
253
|
+
}
|
|
254
|
+
const cameras = new Map();
|
|
255
|
+
for (let i = 0; i < this.targetRenderers.length; ++i) {
|
|
256
|
+
const targetRenderer = this.targetRenderers[i];
|
|
257
|
+
targetRenderer._initialize();
|
|
258
|
+
if (targetRenderer.camera && targetRenderer._renderPostProcess) {
|
|
259
|
+
let list = cameras.get(targetRenderer.camera);
|
|
260
|
+
if (!list) {
|
|
261
|
+
list = [[], {}];
|
|
262
|
+
cameras.set(targetRenderer.camera, list);
|
|
263
|
+
}
|
|
264
|
+
list[0].push(targetRenderer);
|
|
265
|
+
targetRenderer.camera.attachPostProcess(targetRenderer._renderPostProcess, i);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
let iterator = cameras.keys();
|
|
269
|
+
for (let key = iterator.next(); key.done !== true; key = iterator.next()) {
|
|
270
|
+
const camera = key.value;
|
|
271
|
+
const list = cameras.get(camera);
|
|
272
|
+
const firstPostProcess = camera._getFirstPostProcess();
|
|
273
|
+
if (!firstPostProcess) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const [targetRenderers, copyDepthTextures] = list;
|
|
277
|
+
firstPostProcess.onSizeChangedObservable.add(() => {
|
|
278
|
+
var _a;
|
|
279
|
+
if (!firstPostProcess.inputTexture.depthStencilTexture) {
|
|
280
|
+
firstPostProcess.inputTexture.createDepthStencilTexture(0, true, this._engine.isStencilEnable, targetRenderers[0].samples);
|
|
281
|
+
}
|
|
282
|
+
for (const targetRenderer of targetRenderers) {
|
|
283
|
+
const thicknessRT = (_a = targetRenderer._thicknessRenderTarget) === null || _a === void 0 ? void 0 : _a.renderTarget;
|
|
284
|
+
const thicknessTexture = thicknessRT === null || thicknessRT === void 0 ? void 0 : thicknessRT.texture;
|
|
285
|
+
if (thicknessRT && thicknessTexture) {
|
|
286
|
+
const key = thicknessTexture.width + "_" + thicknessTexture.height;
|
|
287
|
+
let copyDepthTexture = copyDepthTextures[key];
|
|
288
|
+
if (!copyDepthTexture) {
|
|
289
|
+
copyDepthTexture = copyDepthTextures[key] = new FluidRenderingDepthTextureCopy(this._engine, thicknessTexture.width, thicknessTexture.height);
|
|
290
|
+
}
|
|
291
|
+
copyDepthTexture.depthRTWrapper._shareDepth(thicknessRT);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
// Dispose the CopyDepthTexture instances that we don't need anymore
|
|
297
|
+
iterator = this._cameras.keys();
|
|
298
|
+
for (let key = iterator.next(); key.done !== true; key = iterator.next()) {
|
|
299
|
+
const camera = key.value;
|
|
300
|
+
const list = this._cameras.get(camera);
|
|
301
|
+
const copyDepthTextures = list[1];
|
|
302
|
+
const list2 = cameras.get(camera);
|
|
303
|
+
if (!list2) {
|
|
304
|
+
for (const key in copyDepthTextures) {
|
|
305
|
+
copyDepthTextures[key].dispose();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
for (const key in copyDepthTextures) {
|
|
310
|
+
if (!list2[1][key]) {
|
|
311
|
+
copyDepthTextures[key].dispose();
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
this._cameras.clear();
|
|
317
|
+
this._cameras = cameras;
|
|
318
|
+
this._setParticleSizeForRenderTargets();
|
|
319
|
+
}
|
|
320
|
+
_setParticleSizeForRenderTargets() {
|
|
321
|
+
const particleSizes = new Map();
|
|
322
|
+
for (let i = 0; i < this.renderObjects.length; ++i) {
|
|
323
|
+
const renderingObject = this.renderObjects[i];
|
|
324
|
+
let curSize = particleSizes.get(renderingObject.targetRenderer);
|
|
325
|
+
if (curSize === undefined) {
|
|
326
|
+
curSize = 0;
|
|
327
|
+
}
|
|
328
|
+
particleSizes.set(renderingObject.targetRenderer, Math.max(curSize, renderingObject.object.particleSize));
|
|
329
|
+
}
|
|
330
|
+
particleSizes.forEach((particleSize, targetRenderer) => {
|
|
331
|
+
if (targetRenderer._depthRenderTarget) {
|
|
332
|
+
targetRenderer._depthRenderTarget.particleSize = particleSize;
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
_setUseVelocityForRenderObject() {
|
|
337
|
+
for (const renderingObject of this.renderObjects) {
|
|
338
|
+
renderingObject.object.useVelocity = renderingObject.targetRenderer.useVelocity;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/** @internal */
|
|
342
|
+
_prepareRendering() {
|
|
343
|
+
for (const renderer of this.targetRenderers) {
|
|
344
|
+
if (renderer.needInitialization) {
|
|
345
|
+
this._initialize();
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/** @internal */
|
|
351
|
+
_render(forCamera) {
|
|
352
|
+
var _a;
|
|
353
|
+
for (let i = 0; i < this.targetRenderers.length; ++i) {
|
|
354
|
+
if (!forCamera || this.targetRenderers[i].camera === forCamera) {
|
|
355
|
+
this.targetRenderers[i]._clearTargets();
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
const iterator = this._cameras.keys();
|
|
359
|
+
for (let key = iterator.next(); key.done !== true; key = iterator.next()) {
|
|
360
|
+
const camera = key.value;
|
|
361
|
+
const list = this._cameras.get(camera);
|
|
362
|
+
if (forCamera && camera !== forCamera) {
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
const firstPostProcess = camera._getFirstPostProcess();
|
|
366
|
+
if (!firstPostProcess) {
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
const sourceCopyDepth = (_a = firstPostProcess.inputTexture) === null || _a === void 0 ? void 0 : _a.depthStencilTexture;
|
|
370
|
+
if (sourceCopyDepth) {
|
|
371
|
+
const [targetRenderers, copyDepthTextures] = list;
|
|
372
|
+
for (const targetRenderer of targetRenderers) {
|
|
373
|
+
targetRenderer._bgDepthTexture = sourceCopyDepth;
|
|
374
|
+
}
|
|
375
|
+
for (const key in copyDepthTextures) {
|
|
376
|
+
copyDepthTextures[key].copy(sourceCopyDepth);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
for (let i = 0; i < this.renderObjects.length; ++i) {
|
|
381
|
+
const renderingObject = this.renderObjects[i];
|
|
382
|
+
if (!forCamera || renderingObject.targetRenderer.camera === forCamera) {
|
|
383
|
+
renderingObject.targetRenderer._render(renderingObject.object);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Disposes of all the ressources used by the class
|
|
389
|
+
*/
|
|
390
|
+
dispose() {
|
|
391
|
+
this._engine.onResizeObservable.remove(this._onEngineResizeObserver);
|
|
392
|
+
this._onEngineResizeObserver = null;
|
|
393
|
+
for (let i = 0; i < this.renderObjects.length; ++i) {
|
|
394
|
+
this.renderObjects[i].object.dispose();
|
|
395
|
+
}
|
|
396
|
+
for (let i = 0; i < this.targetRenderers.length; ++i) {
|
|
397
|
+
this.targetRenderers[i].dispose();
|
|
398
|
+
}
|
|
399
|
+
this._cameras.forEach((list) => {
|
|
400
|
+
const copyDepthTextures = list[1];
|
|
401
|
+
for (const key in copyDepthTextures) {
|
|
402
|
+
copyDepthTextures[key].dispose();
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
this.renderObjects = [];
|
|
406
|
+
this.targetRenderers = [];
|
|
407
|
+
this._cameras.clear();
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=fluidRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluidRenderer.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Rendering/fluidRenderer/fluidRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"core/scene\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport type { FloatArray, Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport type { ISceneComponent } from \"core/sceneComponent\";\r\nimport { SceneComponentConstants } from \"core/sceneComponent\";\r\nimport type { SmartArrayNoDuplicate } from \"core/Misc/smartArray\";\r\nimport type { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\n\r\nimport type { FluidRenderingObject } from \"./fluidRenderingObject\";\r\nimport { FluidRenderingObjectParticleSystem } from \"./fluidRenderingObjectParticleSystem\";\r\nimport { FluidRenderingTargetRenderer } from \"./fluidRenderingTargetRenderer\";\r\nimport { FluidRenderingObjectCustomParticles } from \"./fluidRenderingObjectCustomParticles\";\r\nimport { FluidRenderingDepthTextureCopy } from \"./fluidRenderingDepthTextureCopy\";\r\n\r\nimport \"../../Shaders/fluidRenderingParticleDepth.vertex\";\r\nimport \"../../Shaders/fluidRenderingParticleDepth.fragment\";\r\nimport \"../../Shaders/fluidRenderingParticleThickness.vertex\";\r\nimport \"../../Shaders/fluidRenderingParticleThickness.fragment\";\r\nimport \"../../Shaders/fluidRenderingParticleDiffuse.vertex\";\r\nimport \"../../Shaders/fluidRenderingParticleDiffuse.fragment\";\r\nimport \"../../Shaders/fluidRenderingBilateralBlur.fragment\";\r\nimport \"../../Shaders/fluidRenderingStandardBlur.fragment\";\r\nimport \"../../Shaders/fluidRenderingRender.fragment\";\r\n\r\ndeclare module \"core/abstractScene\" {\r\n export interface AbstractScene {\r\n /** @internal (Backing field) */\r\n _fluidRenderer: Nullable<FluidRenderer>;\r\n\r\n /**\r\n * Gets or Sets the fluid renderer associated to the scene.\r\n */\r\n fluidRenderer: Nullable<FluidRenderer>;\r\n\r\n /**\r\n * Enables the fluid renderer and associates it with the scene\r\n * @returns the FluidRenderer\r\n */\r\n enableFluidRenderer(): Nullable<FluidRenderer>;\r\n\r\n /**\r\n * Disables the fluid renderer associated with the scene\r\n */\r\n disableFluidRenderer(): void;\r\n }\r\n}\r\n\r\nObject.defineProperty(Scene.prototype, \"fluidRenderer\", {\r\n get: function (this: Scene) {\r\n return this._fluidRenderer;\r\n },\r\n set: function (this: Scene, value: Nullable<FluidRenderer>) {\r\n this._fluidRenderer = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nScene.prototype.enableFluidRenderer = function (): Nullable<FluidRenderer> {\r\n if (this._fluidRenderer) {\r\n return this._fluidRenderer;\r\n }\r\n\r\n this._fluidRenderer = new FluidRenderer(this);\r\n\r\n return this._fluidRenderer;\r\n};\r\n\r\nScene.prototype.disableFluidRenderer = function (): void {\r\n this._fluidRenderer?.dispose();\r\n this._fluidRenderer = null;\r\n};\r\n\r\ntype CameraMapForFluidRendering = [Array<FluidRenderingTargetRenderer>, { [key: string]: FluidRenderingDepthTextureCopy }];\r\n\r\nfunction IsParticleSystemObject(obj: FluidRenderingObject): obj is FluidRenderingObjectParticleSystem {\r\n return !!(obj as FluidRenderingObjectParticleSystem).particleSystem;\r\n}\r\n\r\n/**\r\n * Defines the fluid renderer scene component responsible to render objects as fluids\r\n */\r\nexport class FluidRendererSceneComponent implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_FLUIDRENDERER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene: Scene) {\r\n this.scene = scene;\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._gatherActiveCameraRenderTargetsStage.registerStep(\r\n SceneComponentConstants.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER,\r\n this,\r\n this._gatherActiveCameraRenderTargets\r\n );\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_FLUIDRENDERER, this, this._afterCameraDraw);\r\n }\r\n\r\n private _gatherActiveCameraRenderTargets(_renderTargets: SmartArrayNoDuplicate<RenderTargetTexture>): void {\r\n this.scene.fluidRenderer?._prepareRendering();\r\n }\r\n\r\n private _afterCameraDraw(camera: Camera) {\r\n this.scene.fluidRenderer?._render(camera);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n if (this.scene._fluidRenderer) {\r\n // Release resources first\r\n this.scene.disableFluidRenderer();\r\n\r\n // Re-enable\r\n this.scene.enableFluidRenderer();\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources\r\n */\r\n public dispose(): void {\r\n this.scene.disableFluidRenderer();\r\n }\r\n}\r\n\r\n/**\r\n * An object rendered as a fluid.\r\n * It consists of the object itself as well as the render target renderer (which is used to generate the textures (render target) needed for fluid rendering)\r\n */\r\nexport interface IFluidRenderingRenderObject {\r\n /** object rendered as a fluid */\r\n object: FluidRenderingObject;\r\n /** target renderer used to render the fluid object */\r\n targetRenderer: FluidRenderingTargetRenderer;\r\n}\r\n\r\n/**\r\n * Class responsible for fluid rendering.\r\n * It is implementing the method described in https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf\r\n */\r\nexport class FluidRenderer {\r\n /** @internal */\r\n public static _SceneComponentInitialization(scene: Scene) {\r\n let component = scene._getComponent(SceneComponentConstants.NAME_FLUIDRENDERER) as FluidRendererSceneComponent;\r\n if (!component) {\r\n component = new FluidRendererSceneComponent(scene);\r\n scene._addComponent(component);\r\n }\r\n }\r\n\r\n private _scene: Scene;\r\n private _engine: Engine;\r\n private _onEngineResizeObserver: Nullable<Observer<Engine>>;\r\n private _cameras: Map<Camera, CameraMapForFluidRendering>;\r\n\r\n /** Retrieves all the render objects managed by the class */\r\n public readonly renderObjects: Array<IFluidRenderingRenderObject>;\r\n\r\n /** Retrieves all the render target renderers managed by the class */\r\n public readonly targetRenderers: FluidRenderingTargetRenderer[];\r\n\r\n /**\r\n * Initializes the class\r\n * @param scene Scene in which the objects are part of\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._onEngineResizeObserver = null;\r\n this.renderObjects = [];\r\n this.targetRenderers = [];\r\n this._cameras = new Map();\r\n\r\n FluidRenderer._SceneComponentInitialization(this._scene);\r\n\r\n this._onEngineResizeObserver = this._engine.onResizeObservable.add(() => {\r\n this._initialize();\r\n });\r\n }\r\n\r\n /**\r\n * Reinitializes the class\r\n * Can be used if you change the object priority (FluidRenderingObject.priority), to make sure the objects are rendered in the right order\r\n */\r\n public recreate(): void {\r\n this._sortRenderingObjects();\r\n this._initialize();\r\n }\r\n\r\n /**\r\n * Gets the render object corresponding to a particle system (null if the particle system is not rendered as a fluid)\r\n * @param ps The particle system\r\n * @returns the render object corresponding to this particle system if any, otherwise null\r\n */\r\n public getRenderObjectFromParticleSystem(ps: IParticleSystem): Nullable<IFluidRenderingRenderObject> {\r\n const index = this._getParticleSystemIndex(ps);\r\n return index !== -1 ? this.renderObjects[index] : null;\r\n }\r\n\r\n /**\r\n * Adds a particle system to the fluid renderer.\r\n * Note that you should not normally call this method directly, as you can simply use the renderAsFluid property of the ParticleSystem/GPUParticleSystem class\r\n * @param ps particle system\r\n * @param generateDiffuseTexture True if you want to generate a diffuse texture from the particle system and use it as part of the fluid rendering (default: false)\r\n * @param targetRenderer The target renderer used to display the particle system as a fluid. If not provided, the method will create a new one\r\n * @param camera The camera used by the target renderer (if the target renderer is created by the method)\r\n * @returns the render object corresponding to the particle system\r\n */\r\n public addParticleSystem(ps: IParticleSystem, generateDiffuseTexture?: boolean, targetRenderer?: FluidRenderingTargetRenderer, camera?: Camera): IFluidRenderingRenderObject {\r\n const object = new FluidRenderingObjectParticleSystem(this._scene, ps);\r\n\r\n object.onParticleSizeChanged.add(this._setParticleSizeForRenderTargets.bind(this));\r\n\r\n if (!targetRenderer) {\r\n targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera);\r\n this.targetRenderers.push(targetRenderer);\r\n }\r\n\r\n if (!targetRenderer._onUseVelocityChanged.hasObservers()) {\r\n targetRenderer._onUseVelocityChanged.add(this._setUseVelocityForRenderObject.bind(this));\r\n }\r\n\r\n if (generateDiffuseTexture !== undefined) {\r\n targetRenderer.generateDiffuseTexture = generateDiffuseTexture;\r\n }\r\n\r\n const renderObject = { object, targetRenderer };\r\n\r\n this.renderObjects.push(renderObject);\r\n\r\n this._sortRenderingObjects();\r\n\r\n this._setParticleSizeForRenderTargets();\r\n\r\n return renderObject;\r\n }\r\n\r\n /**\r\n * Adds a custom particle set to the fluid renderer.\r\n * @param buffers The list of buffers (should contain at least a \"position\" buffer!)\r\n * @param numParticles Number of particles in each buffer\r\n * @param generateDiffuseTexture True if you want to generate a diffuse texture from buffers and use it as part of the fluid rendering (default: false). For the texture to be generated correctly, you need a \"color\" buffer in the set!\r\n * @param targetRenderer The target renderer used to display the particle system as a fluid. If not provided, the method will create a new one\r\n * @param camera The camera used by the target renderer (if the target renderer is created by the method)\r\n * @returns the render object corresponding to the custom particle set\r\n */\r\n public addCustomParticles(\r\n buffers: { [key: string]: FloatArray },\r\n numParticles: number,\r\n generateDiffuseTexture?: boolean,\r\n targetRenderer?: FluidRenderingTargetRenderer,\r\n camera?: Camera\r\n ): IFluidRenderingRenderObject {\r\n const object = new FluidRenderingObjectCustomParticles(this._scene, buffers, numParticles);\r\n\r\n object.onParticleSizeChanged.add(this._setParticleSizeForRenderTargets.bind(this));\r\n\r\n if (!targetRenderer) {\r\n targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera);\r\n this.targetRenderers.push(targetRenderer);\r\n }\r\n\r\n if (!targetRenderer._onUseVelocityChanged.hasObservers()) {\r\n targetRenderer._onUseVelocityChanged.add(this._setUseVelocityForRenderObject.bind(this));\r\n }\r\n\r\n if (generateDiffuseTexture !== undefined) {\r\n targetRenderer.generateDiffuseTexture = generateDiffuseTexture;\r\n }\r\n\r\n const renderObject = { object, targetRenderer };\r\n\r\n this.renderObjects.push(renderObject);\r\n\r\n this._sortRenderingObjects();\r\n\r\n this._setParticleSizeForRenderTargets();\r\n\r\n return renderObject;\r\n }\r\n\r\n /**\r\n * Removes a render object from the fluid renderer\r\n * @param renderObject the render object to remove\r\n * @param removeUnusedTargetRenderer True to remove/dispose of the target renderer if it's not used anymore (default: true)\r\n * @returns True if the render object has been found and released, else false\r\n */\r\n public removeRenderObject(renderObject: IFluidRenderingRenderObject, removeUnusedTargetRenderer = true): boolean {\r\n const index = this.renderObjects.indexOf(renderObject);\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n renderObject.object.dispose();\r\n\r\n this.renderObjects.splice(index, 1);\r\n\r\n if (removeUnusedTargetRenderer && this._removeUnusedTargetRenderers()) {\r\n this._initialize();\r\n } else {\r\n this._setParticleSizeForRenderTargets();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _sortRenderingObjects(): void {\r\n this.renderObjects.sort((a, b) => {\r\n return a.object.priority < b.object.priority ? -1 : a.object.priority > b.object.priority ? 1 : 0;\r\n });\r\n }\r\n\r\n private _removeUnusedTargetRenderers(): boolean {\r\n const indexes: { [id: number]: boolean } = {};\r\n\r\n for (let i = 0; i < this.renderObjects.length; ++i) {\r\n const targetRenderer = this.renderObjects[i].targetRenderer;\r\n indexes[this.targetRenderers.indexOf(targetRenderer)] = true;\r\n }\r\n\r\n let removed = false;\r\n const newList: Array<FluidRenderingTargetRenderer> = [];\r\n for (let i = 0; i < this.targetRenderers.length; ++i) {\r\n if (!indexes[i]) {\r\n this.targetRenderers[i].dispose();\r\n removed = true;\r\n } else {\r\n newList.push(this.targetRenderers[i]);\r\n }\r\n }\r\n\r\n if (removed) {\r\n this.targetRenderers.length = 0;\r\n this.targetRenderers.push(...newList);\r\n }\r\n\r\n return removed;\r\n }\r\n\r\n private _getParticleSystemIndex(ps: IParticleSystem): number {\r\n for (let i = 0; i < this.renderObjects.length; ++i) {\r\n const obj = this.renderObjects[i].object;\r\n if (IsParticleSystemObject(obj) && obj.particleSystem === ps) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n private _initialize(): void {\r\n for (let i = 0; i < this.targetRenderers.length; ++i) {\r\n this.targetRenderers[i].dispose();\r\n }\r\n\r\n const cameras: Map<Camera, CameraMapForFluidRendering> = new Map();\r\n\r\n for (let i = 0; i < this.targetRenderers.length; ++i) {\r\n const targetRenderer = this.targetRenderers[i];\r\n\r\n targetRenderer._initialize();\r\n\r\n if (targetRenderer.camera && targetRenderer._renderPostProcess) {\r\n let list = cameras.get(targetRenderer.camera);\r\n if (!list) {\r\n list = [[], {}];\r\n cameras.set(targetRenderer.camera, list);\r\n }\r\n list[0].push(targetRenderer);\r\n targetRenderer.camera.attachPostProcess(targetRenderer._renderPostProcess, i);\r\n }\r\n }\r\n\r\n let iterator = cameras.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const camera = key.value;\r\n const list = cameras.get(camera)!;\r\n\r\n const firstPostProcess = camera._getFirstPostProcess();\r\n if (!firstPostProcess) {\r\n continue;\r\n }\r\n\r\n const [targetRenderers, copyDepthTextures] = list;\r\n\r\n firstPostProcess.onSizeChangedObservable.add(() => {\r\n if (!firstPostProcess.inputTexture.depthStencilTexture) {\r\n firstPostProcess.inputTexture.createDepthStencilTexture(0, true, this._engine.isStencilEnable, targetRenderers[0].samples);\r\n }\r\n for (const targetRenderer of targetRenderers) {\r\n const thicknessRT = targetRenderer._thicknessRenderTarget?.renderTarget;\r\n const thicknessTexture = thicknessRT?.texture;\r\n if (thicknessRT && thicknessTexture) {\r\n const key = thicknessTexture.width + \"_\" + thicknessTexture.height;\r\n let copyDepthTexture = copyDepthTextures[key];\r\n if (!copyDepthTexture) {\r\n copyDepthTexture = copyDepthTextures[key] = new FluidRenderingDepthTextureCopy(this._engine, thicknessTexture.width, thicknessTexture.height);\r\n }\r\n copyDepthTexture.depthRTWrapper._shareDepth(thicknessRT);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Dispose the CopyDepthTexture instances that we don't need anymore\r\n iterator = this._cameras.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const camera = key.value;\r\n const list = this._cameras.get(camera)!;\r\n\r\n const copyDepthTextures = list[1];\r\n\r\n const list2 = cameras.get(camera);\r\n if (!list2) {\r\n for (const key in copyDepthTextures) {\r\n copyDepthTextures[key].dispose();\r\n }\r\n } else {\r\n for (const key in copyDepthTextures) {\r\n if (!list2[1][key]) {\r\n copyDepthTextures[key].dispose();\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._cameras.clear();\r\n this._cameras = cameras;\r\n\r\n this._setParticleSizeForRenderTargets();\r\n }\r\n\r\n private _setParticleSizeForRenderTargets(): void {\r\n const particleSizes = new Map<FluidRenderingTargetRenderer, number>();\r\n\r\n for (let i = 0; i < this.renderObjects.length; ++i) {\r\n const renderingObject = this.renderObjects[i];\r\n let curSize = particleSizes.get(renderingObject.targetRenderer);\r\n if (curSize === undefined) {\r\n curSize = 0;\r\n }\r\n particleSizes.set(renderingObject.targetRenderer, Math.max(curSize, renderingObject.object.particleSize));\r\n }\r\n\r\n particleSizes.forEach((particleSize, targetRenderer) => {\r\n if (targetRenderer._depthRenderTarget) {\r\n targetRenderer._depthRenderTarget.particleSize = particleSize;\r\n }\r\n });\r\n }\r\n\r\n private _setUseVelocityForRenderObject(): void {\r\n for (const renderingObject of this.renderObjects) {\r\n renderingObject.object.useVelocity = renderingObject.targetRenderer.useVelocity;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _prepareRendering(): void {\r\n for (const renderer of this.targetRenderers) {\r\n if (renderer.needInitialization) {\r\n this._initialize();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _render(forCamera?: Camera): void {\r\n for (let i = 0; i < this.targetRenderers.length; ++i) {\r\n if (!forCamera || this.targetRenderers[i].camera === forCamera) {\r\n this.targetRenderers[i]._clearTargets();\r\n }\r\n }\r\n\r\n const iterator = this._cameras.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const camera = key.value;\r\n const list = this._cameras.get(camera)!;\r\n if (forCamera && camera !== forCamera) {\r\n continue;\r\n }\r\n\r\n const firstPostProcess = camera._getFirstPostProcess();\r\n if (!firstPostProcess) {\r\n continue;\r\n }\r\n\r\n const sourceCopyDepth = firstPostProcess.inputTexture?.depthStencilTexture;\r\n if (sourceCopyDepth) {\r\n const [targetRenderers, copyDepthTextures] = list;\r\n for (const targetRenderer of targetRenderers) {\r\n targetRenderer._bgDepthTexture = sourceCopyDepth;\r\n }\r\n for (const key in copyDepthTextures) {\r\n copyDepthTextures[key].copy(sourceCopyDepth);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.renderObjects.length; ++i) {\r\n const renderingObject = this.renderObjects[i];\r\n if (!forCamera || renderingObject.targetRenderer.camera === forCamera) {\r\n renderingObject.targetRenderer._render(renderingObject.object);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of all the ressources used by the class\r\n */\r\n public dispose(): void {\r\n this._engine.onResizeObservable.remove(this._onEngineResizeObserver);\r\n this._onEngineResizeObserver = null;\r\n\r\n for (let i = 0; i < this.renderObjects.length; ++i) {\r\n this.renderObjects[i].object.dispose();\r\n }\r\n\r\n for (let i = 0; i < this.targetRenderers.length; ++i) {\r\n this.targetRenderers[i].dispose();\r\n }\r\n\r\n this._cameras.forEach((list) => {\r\n const copyDepthTextures = list[1];\r\n for (const key in copyDepthTextures) {\r\n copyDepthTextures[key].dispose();\r\n }\r\n });\r\n\r\n (this.renderObjects as Array<IFluidRenderingRenderObject>) = [];\r\n (this.targetRenderers as FluidRenderingTargetRenderer[]) = [];\r\n this._cameras.clear();\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Engine } from "../../Engines/engine.js";
|
|
2
|
+
import type { RenderTargetWrapper } from "../../Engines/renderTargetWrapper.js";
|
|
3
|
+
import type { InternalTexture } from "../../Materials/Textures/internalTexture.js";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export declare class FluidRenderingDepthTextureCopy {
|
|
6
|
+
private _engine;
|
|
7
|
+
private _depthRTWrapper;
|
|
8
|
+
private _copyTextureToTexture;
|
|
9
|
+
get depthRTWrapper(): RenderTargetWrapper;
|
|
10
|
+
constructor(engine: Engine, width: number, height: number, samples?: number);
|
|
11
|
+
copy(source: InternalTexture): boolean;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|