b467d4c009e3e15dd7e5d140e47f524de3d2ff0f1c228988c4ede411890592c3.json 51 KB

1
  1. {"ast":null,"code":"import { Scene } from \"../../scene.js\";\nimport { SceneComponentConstants } from \"../../sceneComponent.js\";\nimport { FluidRenderingObjectParticleSystem } from \"./fluidRenderingObjectParticleSystem.js\";\nimport { FluidRenderingTargetRenderer } from \"./fluidRenderingTargetRenderer.js\";\nimport { FluidRenderingObjectCustomParticles } from \"./fluidRenderingObjectCustomParticles.js\";\nimport { FluidRenderingDepthTextureCopy } from \"./fluidRenderingDepthTextureCopy.js\";\nObject.defineProperty(Scene.prototype, \"fluidRenderer\", {\n get: function () {\n return this._fluidRenderer;\n },\n set: function (value) {\n this._fluidRenderer = value;\n },\n enumerable: true,\n configurable: true\n});\nScene.prototype.enableFluidRenderer = function () {\n if (this._fluidRenderer) {\n return this._fluidRenderer;\n }\n this._fluidRenderer = new FluidRenderer(this);\n return this._fluidRenderer;\n};\nScene.prototype.disableFluidRenderer = function () {\n var _this$_fluidRenderer;\n (_this$_fluidRenderer = this._fluidRenderer) === null || _this$_fluidRenderer === void 0 || _this$_fluidRenderer.dispose();\n this._fluidRenderer = null;\n};\nfunction IsParticleSystemObject(obj) {\n return !!obj.particleSystem;\n}\nfunction IsCustomParticlesObject(obj) {\n return !!obj.addBuffers;\n}\n/**\n * Defines the fluid renderer scene component responsible to render objects as fluids\n */\nexport class FluidRendererSceneComponent {\n /**\n * Creates a new instance of the component for the given scene\n * @param scene Defines the scene to register the component in\n */\n constructor(scene) {\n /**\n * The component name helpful to identify the component in the list of scene components.\n */\n this.name = SceneComponentConstants.NAME_FLUIDRENDERER;\n this.scene = scene;\n }\n /**\n * Registers the component in a given scene\n */\n register() {\n this.scene._gatherActiveCameraRenderTargetsStage.registerStep(SceneComponentConstants.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER, this, this._gatherActiveCameraRenderTargets);\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_FLUIDRENDERER, this, this._afterCameraDraw);\n }\n _gatherActiveCameraRenderTargets(_renderTargets) {\n var _this$scene$fluidRend;\n (_this$scene$fluidRend = this.scene.fluidRenderer) === null || _this$scene$fluidRend === void 0 || _this$scene$fluidRend._prepareRendering();\n }\n _afterCameraDraw(camera) {\n var _this$scene$fluidRend2;\n (_this$scene$fluidRend2 = this.scene.fluidRenderer) === null || _this$scene$fluidRend2 === void 0 || _this$scene$fluidRend2._render(camera);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n const fluidRenderer = this.scene.fluidRenderer;\n if (!fluidRenderer) {\n return;\n }\n const buffers = new Set();\n for (let i = 0; i < fluidRenderer.renderObjects.length; ++i) {\n const obj = fluidRenderer.renderObjects[i].object;\n if (IsCustomParticlesObject(obj)) {\n const vbuffers = obj.vertexBuffers;\n for (const name in vbuffers) {\n buffers.add(vbuffers[name].getWrapperBuffer());\n }\n }\n }\n buffers.forEach(buffer => {\n buffer._rebuild();\n });\n }\n /**\n * Disposes the component and the associated resources\n */\n dispose() {\n this.scene.disableFluidRenderer();\n }\n}\n/**\n * Class responsible for fluid rendering.\n * It is implementing the method described in https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf\n */\nexport class FluidRenderer {\n /** @internal */\n static _SceneComponentInitialization(scene) {\n let component = scene._getComponent(SceneComponentConstants.NAME_FLUIDRENDERER);\n if (!component) {\n component = new FluidRendererSceneComponent(scene);\n scene._addComponent(component);\n }\n }\n /**\n * Gets the shader language used in this renderer\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Initializes the class\n * @param scene Scene in which the objects are part of\n */\n constructor(scene) {\n /** Shader language used by the renderer */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this._scene = scene;\n this._engine = scene.getEngine();\n this._onEngineResizeObserver = null;\n this.renderObjects = [];\n this.targetRenderers = [];\n this._cameras = new Map();\n FluidRenderer._SceneComponentInitialization(this._scene);\n this._onEngineResizeObserver = this._engine.onResizeObservable.add(() => {\n this._initialize();\n });\n const engine = this._engine;\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n }\n /**\n * Reinitializes the class\n * Can be used if you change the object priority (FluidRenderingObject.priority), to make sure the objects are rendered in the right order\n */\n recreate() {\n this._sortRenderingObjects();\n this._initialize();\n }\n /**\n * Gets the render object corresponding to a particle system (null if the particle system is not rendered as a fluid)\n * @param ps The particle system\n * @returns the render object corresponding to this particle system if any, otherwise null\n */\n getRenderObjectFromParticleSystem(ps) {\n const index = this._getParticleSystemIndex(ps);\n return index !== -1 ? this.renderObjects[index] : null;\n }\n /**\n * Adds a particle system to the fluid renderer.\n * @param ps particle system\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)\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\n * @param camera The camera used by the target renderer (if the target renderer is created by the method)\n * @returns the render object corresponding to the particle system\n */\n addParticleSystem(ps, generateDiffuseTexture, targetRenderer, camera) {\n const object = new FluidRenderingObjectParticleSystem(this._scene, ps, this._shaderLanguage);\n object.onParticleSizeChanged.add(() => this._setParticleSizeForRenderTargets());\n if (!targetRenderer) {\n targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera, this._shaderLanguage);\n this.targetRenderers.push(targetRenderer);\n }\n if (!targetRenderer._onUseVelocityChanged.hasObservers()) {\n targetRenderer._onUseVelocityChanged.add(() => this._setUseVelocityForRenderObject());\n }\n if (generateDiffuseTexture !== undefined) {\n targetRenderer.generateDiffuseTexture = generateDiffuseTexture;\n }\n const renderObject = {\n object,\n targetRenderer\n };\n this.renderObjects.push(renderObject);\n this._sortRenderingObjects();\n this._setParticleSizeForRenderTargets();\n return renderObject;\n }\n /**\n * Adds a custom particle set to the fluid renderer.\n * @param buffers The list of buffers (should contain at least a \"position\" buffer!)\n * @param numParticles Number of particles in each buffer\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!\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\n * @param camera The camera used by the target renderer (if the target renderer is created by the method)\n * @returns the render object corresponding to the custom particle set\n */\n addCustomParticles(buffers, numParticles, generateDiffuseTexture, targetRenderer, camera) {\n const object = new FluidRenderingObjectCustomParticles(this._scene, buffers, numParticles, this._shaderLanguage);\n object.onParticleSizeChanged.add(() => this._setParticleSizeForRenderTargets());\n if (!targetRenderer) {\n targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera, this._shaderLanguage);\n this.targetRenderers.push(targetRenderer);\n }\n if (!targetRenderer._onUseVelocityChanged.hasObservers()) {\n targetRenderer._onUseVelocityChanged.add(() => this._setUseVelocityForRenderObject());\n }\n if (generateDiffuseTexture !== undefined) {\n targetRenderer.generateDiffuseTexture = generateDiffuseTexture;\n }\n const renderObject = {\n object,\n targetRenderer\n };\n this.renderObjects.push(renderObject);\n this._sortRenderingObjects();\n this._setParticleSizeForRenderTargets();\n return renderObject;\n }\n /**\n * Removes a render object from the fluid renderer\n * @param renderObject the render object to remove\n * @param removeUnusedTargetRenderer True to remove/dispose of the target renderer if it's not used anymore (default: true)\n * @returns True if the render object has been found and released, else false\n */\n removeRenderObject(renderObject, removeUnusedTargetRenderer = true) {\n const index = this.renderObjects.indexOf(renderObject);\n if (index === -1) {\n return false;\n }\n renderObject.object.dispose();\n this.renderObjects.splice(index, 1);\n if (removeUnusedTargetRenderer && this._removeUnusedTargetRenderers()) {\n this._initialize();\n } else {\n this._setParticleSizeForRenderTargets();\n }\n return true;\n }\n _sortRenderingObjects() {\n this.renderObjects.sort((a, b) => {\n return a.object.priority < b.object.priority ? -1 : a.object.priority > b.object.priority ? 1 : 0;\n });\n }\n _removeUnusedTargetRenderers() {\n const indexes = {};\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const targetRenderer = this.renderObjects[i].targetRenderer;\n indexes[this.targetRenderers.indexOf(targetRenderer)] = true;\n }\n let removed = false;\n const newList = [];\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n if (!indexes[i]) {\n this.targetRenderers[i].dispose();\n removed = true;\n } else {\n newList.push(this.targetRenderers[i]);\n }\n }\n if (removed) {\n this.targetRenderers.length = 0;\n this.targetRenderers.push(...newList);\n }\n return removed;\n }\n _getParticleSystemIndex(ps) {\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const obj = this.renderObjects[i].object;\n if (IsParticleSystemObject(obj) && obj.particleSystem === ps) {\n return i;\n }\n }\n return -1;\n }\n _initialize() {\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n this.targetRenderers[i].dispose();\n }\n const cameras = new Map();\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n const targetRenderer = this.targetRenderers[i];\n targetRenderer._initialize();\n if (targetRenderer.camera && targetRenderer._renderPostProcess) {\n let list = cameras.get(targetRenderer.camera);\n if (!list) {\n list = [[], {}];\n cameras.set(targetRenderer.camera, list);\n }\n list[0].push(targetRenderer);\n targetRenderer.camera.attachPostProcess(targetRenderer._renderPostProcess, i);\n }\n }\n let iterator = cameras.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const camera = key.value;\n const list = cameras.get(camera);\n const firstPostProcess = camera._getFirstPostProcess();\n if (!firstPostProcess) {\n continue;\n }\n const [targetRenderers, copyDepthTextures] = list;\n firstPostProcess.onSizeChangedObservable.add(() => {\n if (!firstPostProcess.inputTexture.depthStencilTexture) {\n firstPostProcess.inputTexture.createDepthStencilTexture(0, true, this._engine.isStencilEnable, targetRenderers[0].samples, this._engine.isStencilEnable ? 13 : 14, `PostProcessRTTDepthStencil-${firstPostProcess.name}`);\n }\n for (const targetRenderer of targetRenderers) {\n var _targetRenderer$_thic;\n const thicknessRT = (_targetRenderer$_thic = targetRenderer._thicknessRenderTarget) === null || _targetRenderer$_thic === void 0 ? void 0 : _targetRenderer$_thic.renderTarget;\n const thicknessTexture = thicknessRT === null || thicknessRT === void 0 ? void 0 : thicknessRT.texture;\n if (thicknessRT && thicknessTexture) {\n const key = thicknessTexture.width + \"_\" + thicknessTexture.height;\n let copyDepthTexture = copyDepthTextures[key];\n if (!copyDepthTexture) {\n copyDepthTexture = copyDepthTextures[key] = new FluidRenderingDepthTextureCopy(this._engine, thicknessTexture.width, thicknessTexture.height);\n }\n copyDepthTexture.depthRTWrapper.shareDepth(thicknessRT);\n }\n }\n });\n }\n // Dispose the CopyDepthTexture instances that we don't need anymore\n iterator = this._cameras.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const camera = key.value;\n const list = this._cameras.get(camera);\n const copyDepthTextures = list[1];\n const list2 = cameras.get(camera);\n if (!list2) {\n for (const key in copyDepthTextures) {\n copyDepthTextures[key].dispose();\n }\n } else {\n for (const key in copyDepthTextures) {\n if (!list2[1][key]) {\n copyDepthTextures[key].dispose();\n }\n }\n }\n }\n this._cameras.clear();\n this._cameras = cameras;\n this._setParticleSizeForRenderTargets();\n }\n _setParticleSizeForRenderTargets() {\n const particleSizes = new Map();\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const renderingObject = this.renderObjects[i];\n let curSize = particleSizes.get(renderingObject.targetRenderer);\n if (curSize === undefined) {\n curSize = 0;\n }\n particleSizes.set(renderingObject.targetRenderer, Math.max(curSize, renderingObject.object.particleSize));\n }\n particleSizes.forEach((particleSize, targetRenderer) => {\n if (targetRenderer._depthRenderTarget) {\n targetRenderer._depthRenderTarget.particleSize = particleSize;\n }\n });\n }\n _setUseVelocityForRenderObject() {\n for (const renderingObject of this.renderObjects) {\n renderingObject.object.useVelocity = renderingObject.targetRenderer.useVelocity;\n }\n }\n /** @internal */\n _prepareRendering() {\n for (const renderer of this.targetRenderers) {\n if (renderer.needInitialization) {\n this._initialize();\n return;\n }\n }\n }\n /** @internal */\n _render(forCamera) {\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n if (!forCamera || this.targetRenderers[i].camera === forCamera) {\n this.targetRenderers[i]._clearTargets();\n }\n }\n const iterator = this._cameras.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n var _firstPostProcess$inp;\n const camera = key.value;\n const list = this._cameras.get(camera);\n if (forCamera && camera !== forCamera) {\n continue;\n }\n const firstPostProcess = camera._getFirstPostProcess();\n if (!firstPostProcess) {\n continue;\n }\n const sourceCopyDepth = (_firstPostProcess$inp = firstPostProcess.inputTexture) === null || _firstPostProcess$inp === void 0 ? void 0 : _firstPostProcess$inp.depthStencilTexture;\n if (sourceCopyDepth) {\n const [targetRenderers, copyDepthTextures] = list;\n for (const targetRenderer of targetRenderers) {\n targetRenderer._bgDepthTexture = sourceCopyDepth;\n }\n for (const key in copyDepthTextures) {\n copyDepthTextures[key].copy(sourceCopyDepth);\n }\n }\n }\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const renderingObject = this.renderObjects[i];\n if (!forCamera || renderingObject.targetRenderer.camera === forCamera) {\n renderingObject.targetRenderer._render(renderingObject.object);\n }\n }\n }\n /**\n * Disposes of all the ressources used by the class\n */\n dispose() {\n this._engine.onResizeObservable.remove(this._onEngineResizeObserver);\n this._onEngineResizeObserver = null;\n for (let i = 0; i < this.renderObjects.length; ++i) {\n this.renderObjects[i].object.dispose();\n }\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n this.targetRenderers[i].dispose();\n }\n this._cameras.forEach(list => {\n const copyDepthTextures = list[1];\n for (const key in copyDepthTextures) {\n copyDepthTextures[key].dispose();\n }\n });\n this.renderObjects = [];\n this.targetRenderers = [];\n this._cameras.clear();\n }\n}","map":{"version":3,"names":["Scene","SceneComponentConstants","FluidRenderingObjectParticleSystem","FluidRenderingTargetRenderer","FluidRenderingObjectCustomParticles","FluidRenderingDepthTextureCopy","Object","defineProperty","prototype","get","_fluidRenderer","set","value","enumerable","configurable","enableFluidRenderer","FluidRenderer","disableFluidRenderer","_this$_fluidRenderer","dispose","IsParticleSystemObject","obj","particleSystem","IsCustomParticlesObject","addBuffers","FluidRendererSceneComponent","constructor","scene","name","NAME_FLUIDRENDERER","register","_gatherActiveCameraRenderTargetsStage","registerStep","STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER","_gatherActiveCameraRenderTargets","_afterCameraDrawStage","STEP_AFTERCAMERADRAW_FLUIDRENDERER","_afterCameraDraw","_renderTargets","_this$scene$fluidRend","fluidRenderer","_prepareRendering","camera","_this$scene$fluidRend2","_render","rebuild","buffers","Set","i","renderObjects","length","object","vbuffers","vertexBuffers","add","getWrapperBuffer","forEach","buffer","_rebuild","_SceneComponentInitialization","component","_getComponent","_addComponent","shaderLanguage","_shaderLanguage","_scene","_engine","getEngine","_onEngineResizeObserver","targetRenderers","_cameras","Map","onResizeObservable","_initialize","engine","isWebGPU","recreate","_sortRenderingObjects","getRenderObjectFromParticleSystem","ps","index","_getParticleSystemIndex","addParticleSystem","generateDiffuseTexture","targetRenderer","onParticleSizeChanged","_setParticleSizeForRenderTargets","push","_onUseVelocityChanged","hasObservers","_setUseVelocityForRenderObject","undefined","renderObject","addCustomParticles","numParticles","removeRenderObject","removeUnusedTargetRenderer","indexOf","splice","_removeUnusedTargetRenderers","sort","a","b","priority","indexes","removed","newList","cameras","_renderPostProcess","list","attachPostProcess","iterator","keys","key","next","done","firstPostProcess","_getFirstPostProcess","copyDepthTextures","onSizeChangedObservable","inputTexture","depthStencilTexture","createDepthStencilTexture","isStencilEnable","samples","_targetRenderer$_thic","thicknessRT","_thicknessRenderTarget","renderTarget","thicknessTexture","texture","width","height","copyDepthTexture","depthRTWrapper","shareDepth","list2","clear","particleSizes","renderingObject","curSize","Math","max","particleSize","_depthRenderTarget","useVelocity","renderer","needInitialization","forCamera","_clearTargets","_firstPostProcess$inp","sourceCopyDepth","_bgDepthTexture","copy","remove"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Rendering/fluidRenderer/fluidRenderer.js"],"sourcesContent":["import { Scene } from \"../../scene.js\";\nimport { SceneComponentConstants } from \"../../sceneComponent.js\";\n\nimport { FluidRenderingObjectParticleSystem } from \"./fluidRenderingObjectParticleSystem.js\";\nimport { FluidRenderingTargetRenderer } from \"./fluidRenderingTargetRenderer.js\";\nimport { FluidRenderingObjectCustomParticles } from \"./fluidRenderingObjectCustomParticles.js\";\nimport { FluidRenderingDepthTextureCopy } from \"./fluidRenderingDepthTextureCopy.js\";\nObject.defineProperty(Scene.prototype, \"fluidRenderer\", {\n get: function () {\n return this._fluidRenderer;\n },\n set: function (value) {\n this._fluidRenderer = value;\n },\n enumerable: true,\n configurable: true,\n});\nScene.prototype.enableFluidRenderer = function () {\n if (this._fluidRenderer) {\n return this._fluidRenderer;\n }\n this._fluidRenderer = new FluidRenderer(this);\n return this._fluidRenderer;\n};\nScene.prototype.disableFluidRenderer = function () {\n this._fluidRenderer?.dispose();\n this._fluidRenderer = null;\n};\nfunction IsParticleSystemObject(obj) {\n return !!obj.particleSystem;\n}\nfunction IsCustomParticlesObject(obj) {\n return !!obj.addBuffers;\n}\n/**\n * Defines the fluid renderer scene component responsible to render objects as fluids\n */\nexport class FluidRendererSceneComponent {\n /**\n * Creates a new instance of the component for the given scene\n * @param scene Defines the scene to register the component in\n */\n constructor(scene) {\n /**\n * The component name helpful to identify the component in the list of scene components.\n */\n this.name = SceneComponentConstants.NAME_FLUIDRENDERER;\n this.scene = scene;\n }\n /**\n * Registers the component in a given scene\n */\n register() {\n this.scene._gatherActiveCameraRenderTargetsStage.registerStep(SceneComponentConstants.STEP_GATHERACTIVECAMERARENDERTARGETS_FLUIDRENDERER, this, this._gatherActiveCameraRenderTargets);\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_FLUIDRENDERER, this, this._afterCameraDraw);\n }\n _gatherActiveCameraRenderTargets(_renderTargets) {\n this.scene.fluidRenderer?._prepareRendering();\n }\n _afterCameraDraw(camera) {\n this.scene.fluidRenderer?._render(camera);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n const fluidRenderer = this.scene.fluidRenderer;\n if (!fluidRenderer) {\n return;\n }\n const buffers = new Set();\n for (let i = 0; i < fluidRenderer.renderObjects.length; ++i) {\n const obj = fluidRenderer.renderObjects[i].object;\n if (IsCustomParticlesObject(obj)) {\n const vbuffers = obj.vertexBuffers;\n for (const name in vbuffers) {\n buffers.add(vbuffers[name].getWrapperBuffer());\n }\n }\n }\n buffers.forEach((buffer) => {\n buffer._rebuild();\n });\n }\n /**\n * Disposes the component and the associated resources\n */\n dispose() {\n this.scene.disableFluidRenderer();\n }\n}\n/**\n * Class responsible for fluid rendering.\n * It is implementing the method described in https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf\n */\nexport class FluidRenderer {\n /** @internal */\n static _SceneComponentInitialization(scene) {\n let component = scene._getComponent(SceneComponentConstants.NAME_FLUIDRENDERER);\n if (!component) {\n component = new FluidRendererSceneComponent(scene);\n scene._addComponent(component);\n }\n }\n /**\n * Gets the shader language used in this renderer\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Initializes the class\n * @param scene Scene in which the objects are part of\n */\n constructor(scene) {\n /** Shader language used by the renderer */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this._scene = scene;\n this._engine = scene.getEngine();\n this._onEngineResizeObserver = null;\n this.renderObjects = [];\n this.targetRenderers = [];\n this._cameras = new Map();\n FluidRenderer._SceneComponentInitialization(this._scene);\n this._onEngineResizeObserver = this._engine.onResizeObservable.add(() => {\n this._initialize();\n });\n const engine = this._engine;\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n }\n /**\n * Reinitializes the class\n * Can be used if you change the object priority (FluidRenderingObject.priority), to make sure the objects are rendered in the right order\n */\n recreate() {\n this._sortRenderingObjects();\n this._initialize();\n }\n /**\n * Gets the render object corresponding to a particle system (null if the particle system is not rendered as a fluid)\n * @param ps The particle system\n * @returns the render object corresponding to this particle system if any, otherwise null\n */\n getRenderObjectFromParticleSystem(ps) {\n const index = this._getParticleSystemIndex(ps);\n return index !== -1 ? this.renderObjects[index] : null;\n }\n /**\n * Adds a particle system to the fluid renderer.\n * @param ps particle system\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)\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\n * @param camera The camera used by the target renderer (if the target renderer is created by the method)\n * @returns the render object corresponding to the particle system\n */\n addParticleSystem(ps, generateDiffuseTexture, targetRenderer, camera) {\n const object = new FluidRenderingObjectParticleSystem(this._scene, ps, this._shaderLanguage);\n object.onParticleSizeChanged.add(() => this._setParticleSizeForRenderTargets());\n if (!targetRenderer) {\n targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera, this._shaderLanguage);\n this.targetRenderers.push(targetRenderer);\n }\n if (!targetRenderer._onUseVelocityChanged.hasObservers()) {\n targetRenderer._onUseVelocityChanged.add(() => this._setUseVelocityForRenderObject());\n }\n if (generateDiffuseTexture !== undefined) {\n targetRenderer.generateDiffuseTexture = generateDiffuseTexture;\n }\n const renderObject = { object, targetRenderer };\n this.renderObjects.push(renderObject);\n this._sortRenderingObjects();\n this._setParticleSizeForRenderTargets();\n return renderObject;\n }\n /**\n * Adds a custom particle set to the fluid renderer.\n * @param buffers The list of buffers (should contain at least a \"position\" buffer!)\n * @param numParticles Number of particles in each buffer\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!\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\n * @param camera The camera used by the target renderer (if the target renderer is created by the method)\n * @returns the render object corresponding to the custom particle set\n */\n addCustomParticles(buffers, numParticles, generateDiffuseTexture, targetRenderer, camera) {\n const object = new FluidRenderingObjectCustomParticles(this._scene, buffers, numParticles, this._shaderLanguage);\n object.onParticleSizeChanged.add(() => this._setParticleSizeForRenderTargets());\n if (!targetRenderer) {\n targetRenderer = new FluidRenderingTargetRenderer(this._scene, camera, this._shaderLanguage);\n this.targetRenderers.push(targetRenderer);\n }\n if (!targetRenderer._onUseVelocityChanged.hasObservers()) {\n targetRenderer._onUseVelocityChanged.add(() => this._setUseVelocityForRenderObject());\n }\n if (generateDiffuseTexture !== undefined) {\n targetRenderer.generateDiffuseTexture = generateDiffuseTexture;\n }\n const renderObject = { object, targetRenderer };\n this.renderObjects.push(renderObject);\n this._sortRenderingObjects();\n this._setParticleSizeForRenderTargets();\n return renderObject;\n }\n /**\n * Removes a render object from the fluid renderer\n * @param renderObject the render object to remove\n * @param removeUnusedTargetRenderer True to remove/dispose of the target renderer if it's not used anymore (default: true)\n * @returns True if the render object has been found and released, else false\n */\n removeRenderObject(renderObject, removeUnusedTargetRenderer = true) {\n const index = this.renderObjects.indexOf(renderObject);\n if (index === -1) {\n return false;\n }\n renderObject.object.dispose();\n this.renderObjects.splice(index, 1);\n if (removeUnusedTargetRenderer && this._removeUnusedTargetRenderers()) {\n this._initialize();\n }\n else {\n this._setParticleSizeForRenderTargets();\n }\n return true;\n }\n _sortRenderingObjects() {\n this.renderObjects.sort((a, b) => {\n return a.object.priority < b.object.priority ? -1 : a.object.priority > b.object.priority ? 1 : 0;\n });\n }\n _removeUnusedTargetRenderers() {\n const indexes = {};\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const targetRenderer = this.renderObjects[i].targetRenderer;\n indexes[this.targetRenderers.indexOf(targetRenderer)] = true;\n }\n let removed = false;\n const newList = [];\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n if (!indexes[i]) {\n this.targetRenderers[i].dispose();\n removed = true;\n }\n else {\n newList.push(this.targetRenderers[i]);\n }\n }\n if (removed) {\n this.targetRenderers.length = 0;\n this.targetRenderers.push(...newList);\n }\n return removed;\n }\n _getParticleSystemIndex(ps) {\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const obj = this.renderObjects[i].object;\n if (IsParticleSystemObject(obj) && obj.particleSystem === ps) {\n return i;\n }\n }\n return -1;\n }\n _initialize() {\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n this.targetRenderers[i].dispose();\n }\n const cameras = new Map();\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n const targetRenderer = this.targetRenderers[i];\n targetRenderer._initialize();\n if (targetRenderer.camera && targetRenderer._renderPostProcess) {\n let list = cameras.get(targetRenderer.camera);\n if (!list) {\n list = [[], {}];\n cameras.set(targetRenderer.camera, list);\n }\n list[0].push(targetRenderer);\n targetRenderer.camera.attachPostProcess(targetRenderer._renderPostProcess, i);\n }\n }\n let iterator = cameras.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const camera = key.value;\n const list = cameras.get(camera);\n const firstPostProcess = camera._getFirstPostProcess();\n if (!firstPostProcess) {\n continue;\n }\n const [targetRenderers, copyDepthTextures] = list;\n firstPostProcess.onSizeChangedObservable.add(() => {\n if (!firstPostProcess.inputTexture.depthStencilTexture) {\n firstPostProcess.inputTexture.createDepthStencilTexture(0, true, this._engine.isStencilEnable, targetRenderers[0].samples, this._engine.isStencilEnable ? 13 : 14, `PostProcessRTTDepthStencil-${firstPostProcess.name}`);\n }\n for (const targetRenderer of targetRenderers) {\n const thicknessRT = targetRenderer._thicknessRenderTarget?.renderTarget;\n const thicknessTexture = thicknessRT?.texture;\n if (thicknessRT && thicknessTexture) {\n const key = thicknessTexture.width + \"_\" + thicknessTexture.height;\n let copyDepthTexture = copyDepthTextures[key];\n if (!copyDepthTexture) {\n copyDepthTexture = copyDepthTextures[key] = new FluidRenderingDepthTextureCopy(this._engine, thicknessTexture.width, thicknessTexture.height);\n }\n copyDepthTexture.depthRTWrapper.shareDepth(thicknessRT);\n }\n }\n });\n }\n // Dispose the CopyDepthTexture instances that we don't need anymore\n iterator = this._cameras.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const camera = key.value;\n const list = this._cameras.get(camera);\n const copyDepthTextures = list[1];\n const list2 = cameras.get(camera);\n if (!list2) {\n for (const key in copyDepthTextures) {\n copyDepthTextures[key].dispose();\n }\n }\n else {\n for (const key in copyDepthTextures) {\n if (!list2[1][key]) {\n copyDepthTextures[key].dispose();\n }\n }\n }\n }\n this._cameras.clear();\n this._cameras = cameras;\n this._setParticleSizeForRenderTargets();\n }\n _setParticleSizeForRenderTargets() {\n const particleSizes = new Map();\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const renderingObject = this.renderObjects[i];\n let curSize = particleSizes.get(renderingObject.targetRenderer);\n if (curSize === undefined) {\n curSize = 0;\n }\n particleSizes.set(renderingObject.targetRenderer, Math.max(curSize, renderingObject.object.particleSize));\n }\n particleSizes.forEach((particleSize, targetRenderer) => {\n if (targetRenderer._depthRenderTarget) {\n targetRenderer._depthRenderTarget.particleSize = particleSize;\n }\n });\n }\n _setUseVelocityForRenderObject() {\n for (const renderingObject of this.renderObjects) {\n renderingObject.object.useVelocity = renderingObject.targetRenderer.useVelocity;\n }\n }\n /** @internal */\n _prepareRendering() {\n for (const renderer of this.targetRenderers) {\n if (renderer.needInitialization) {\n this._initialize();\n return;\n }\n }\n }\n /** @internal */\n _render(forCamera) {\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n if (!forCamera || this.targetRenderers[i].camera === forCamera) {\n this.targetRenderers[i]._clearTargets();\n }\n }\n const iterator = this._cameras.keys();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const camera = key.value;\n const list = this._cameras.get(camera);\n if (forCamera && camera !== forCamera) {\n continue;\n }\n const firstPostProcess = camera._getFirstPostProcess();\n if (!firstPostProcess) {\n continue;\n }\n const sourceCopyDepth = firstPostProcess.inputTexture?.depthStencilTexture;\n if (sourceCopyDepth) {\n const [targetRenderers, copyDepthTextures] = list;\n for (const targetRenderer of targetRenderers) {\n targetRenderer._bgDepthTexture = sourceCopyDepth;\n }\n for (const key in copyDepthTextures) {\n copyDepthTextures[key].copy(sourceCopyDepth);\n }\n }\n }\n for (let i = 0; i < this.renderObjects.length; ++i) {\n const renderingObject = this.renderObjects[i];\n if (!forCamera || renderingObject.targetRenderer.camera === forCamera) {\n renderingObject.targetRenderer._render(renderingObject.object);\n }\n }\n }\n /**\n * Disposes of all the ressources used by the class\n */\n dispose() {\n this._engine.onResizeObservable.remove(this._onEngineResizeObserver);\n this._onEngineResizeObserver = null;\n for (let i = 0; i < this.renderObjects.length; ++i) {\n this.renderObjects[i].object.dispose();\n }\n for (let i = 0; i < this.targetRenderers.length; ++i) {\n this.targetRenderers[i].dispose();\n }\n this._cameras.forEach((list) => {\n const copyDepthTextures = list[1];\n for (const key in copyDepthTextures) {\n copyDepthTextures[key].dispose();\n }\n });\n this.renderObjects = [];\n this.targetRenderers = [];\n this._cameras.clear();\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}