@babylonjs/core 6.41.0 → 6.41.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (650) hide show
  1. package/Animations/animatable.js +1 -2
  2. package/Animations/animatable.js.map +1 -1
  3. package/Animations/animation.js +4 -6
  4. package/Animations/animation.js.map +1 -1
  5. package/Animations/animationGroup.js +3 -3
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/runtimeAnimation.js +1 -1
  8. package/Animations/runtimeAnimation.js.map +1 -1
  9. package/Audio/audioEngine.js +3 -5
  10. package/Audio/audioEngine.js.map +1 -1
  11. package/Audio/audioSceneComponent.js +1 -2
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/sound.js +48 -74
  14. package/Audio/sound.js.map +1 -1
  15. package/Audio/soundTrack.js +6 -12
  16. package/Audio/soundTrack.js.map +1 -1
  17. package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -2
  18. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  19. package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
  20. package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
  21. package/Behaviors/Meshes/fadeInOutBehavior.js +2 -4
  22. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  23. package/Behaviors/Meshes/followBehavior.js +1 -2
  24. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  25. package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
  26. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  27. package/Bones/bone.js +4 -6
  28. package/Bones/bone.js.map +1 -1
  29. package/Bones/skeleton.js +2 -3
  30. package/Bones/skeleton.js.map +1 -1
  31. package/Buffers/buffer.align.js +5 -8
  32. package/Buffers/buffer.align.js.map +1 -1
  33. package/Buffers/buffer.js +6 -8
  34. package/Buffers/buffer.js.map +1 -1
  35. package/Cameras/Inputs/BaseCameraPointersInput.js +3 -4
  36. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  37. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -5
  38. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  39. package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
  40. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
  42. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  43. package/Cameras/arcRotateCamera.js +1 -2
  44. package/Cameras/arcRotateCamera.js.map +1 -1
  45. package/Cameras/camera.d.ts +5 -0
  46. package/Cameras/camera.js +18 -11
  47. package/Cameras/camera.js.map +1 -1
  48. package/Collisions/pickingInfo.js +1 -1
  49. package/Collisions/pickingInfo.js.map +1 -1
  50. package/Compute/computeEffect.js +5 -8
  51. package/Compute/computeEffect.js.map +1 -1
  52. package/Compute/computeShader.js +12 -9
  53. package/Compute/computeShader.js.map +1 -1
  54. package/Culling/Octrees/octreeSceneComponent.js +1 -2
  55. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  56. package/Culling/boundingBox.js +2 -3
  57. package/Culling/boundingBox.js.map +1 -1
  58. package/Culling/ray.d.ts +6 -1
  59. package/Culling/ray.js +9 -4
  60. package/Culling/ray.js.map +1 -1
  61. package/Debug/debugLayer.js +4 -1
  62. package/Debug/debugLayer.js.map +1 -1
  63. package/Debug/directionalLightFrustumViewer.js +7 -9
  64. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  65. package/Debug/physicsViewer.js +5 -7
  66. package/Debug/physicsViewer.js.map +1 -1
  67. package/Debug/rayHelper.js +1 -2
  68. package/Debug/rayHelper.js.map +1 -1
  69. package/Debug/skeletonViewer.js +26 -31
  70. package/Debug/skeletonViewer.js.map +1 -1
  71. package/Decorators/nodeDecorator.js +1 -1
  72. package/Decorators/nodeDecorator.js.map +1 -1
  73. package/DeviceInput/InputDevices/deviceSourceManager.js +3 -5
  74. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  75. package/DeviceInput/eventFactory.js +1 -1
  76. package/DeviceInput/eventFactory.js.map +1 -1
  77. package/DeviceInput/internalDeviceSourceManager.js +1 -2
  78. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  79. package/DeviceInput/webDeviceInputSystem.js +9 -12
  80. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  81. package/Engines/Extensions/engine.cubeTexture.js +6 -1
  82. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  83. package/Engines/Extensions/engine.multiRender.js +3 -4
  84. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  85. package/Engines/Extensions/engine.rawTexture.js +4 -4
  86. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  87. package/Engines/Extensions/engine.readTexture.js +2 -3
  88. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  89. package/Engines/Extensions/engine.renderTarget.js +9 -5
  90. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  91. package/Engines/Extensions/engine.renderTargetCube.js +9 -1
  92. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  93. package/Engines/Extensions/engine.views.js +1 -2
  94. package/Engines/Extensions/engine.views.js.map +1 -1
  95. package/Engines/Processors/shaderCodeNode.js +6 -7
  96. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  97. package/Engines/Processors/shaderProcessor.js +6 -11
  98. package/Engines/Processors/shaderProcessor.js.map +1 -1
  99. package/Engines/WebGL/webGLHardwareTexture.js +1 -2
  100. package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
  101. package/Engines/WebGL/webGLRenderTargetWrapper.js +3 -5
  102. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  103. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +9 -2
  104. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  105. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -2
  106. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  107. package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -6
  108. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  109. package/Engines/WebGPU/Extensions/engine.query.js +2 -4
  110. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  111. package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
  112. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  113. package/Engines/WebGPU/Extensions/engine.renderTarget.js +11 -5
  114. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  115. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +11 -3
  116. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  117. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +2 -3
  118. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  119. package/Engines/WebGPU/Extensions/engine.textureSampler.js +1 -2
  120. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  121. package/Engines/WebGPU/Extensions/engine.videoTexture.js +1 -2
  122. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  123. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  124. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  125. package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -7
  126. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  127. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +15 -20
  128. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  129. package/Engines/WebGPU/webgpuCacheSampler.js +10 -5
  130. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  131. package/Engines/WebGPU/webgpuClearQuad.js +2 -3
  132. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  133. package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -2
  134. package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
  135. package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
  136. package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
  137. package/Engines/WebGPU/webgpuDrawContext.js +1 -2
  138. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  139. package/Engines/WebGPU/webgpuHardwareTexture.js +4 -6
  140. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  141. package/Engines/WebGPU/webgpuMaterialContext.js +2 -3
  142. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  143. package/Engines/WebGPU/webgpuOcclusionQuery.js +3 -5
  144. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  145. package/Engines/WebGPU/webgpuPipelineContext.js +2 -4
  146. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  147. package/Engines/WebGPU/webgpuQuerySet.js +1 -1
  148. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  149. package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -4
  150. package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
  151. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
  152. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  153. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +5 -4
  154. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  155. package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -2
  156. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  157. package/Engines/WebGPU/webgpuTextureManager.js +40 -43
  158. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  159. package/Engines/WebGPU/webgpuTimestampQuery.js +12 -7
  160. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  161. package/Engines/WebGPU/webgpuTintWASM.js +4 -1
  162. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  163. package/Engines/engine.js +4 -7
  164. package/Engines/engine.js.map +1 -1
  165. package/Engines/nativeEngine.js +16 -22
  166. package/Engines/nativeEngine.js.map +1 -1
  167. package/Engines/nullEngine.js +9 -1
  168. package/Engines/nullEngine.js.map +1 -1
  169. package/Engines/renderTargetWrapper.js +11 -16
  170. package/Engines/renderTargetWrapper.js.map +1 -1
  171. package/Engines/thinEngine.js +32 -44
  172. package/Engines/thinEngine.js.map +1 -1
  173. package/Engines/webgpuEngine.js +77 -95
  174. package/Engines/webgpuEngine.js.map +1 -1
  175. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +2 -3
  176. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  177. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +3 -6
  178. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  179. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +1 -2
  180. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
  181. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js +1 -2
  182. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
  183. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +2 -4
  184. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
  185. package/FlowGraph/flowGraph.js +1 -2
  186. package/FlowGraph/flowGraph.js.map +1 -1
  187. package/FlowGraph/flowGraphBlock.js +2 -4
  188. package/FlowGraph/flowGraphBlock.js.map +1 -1
  189. package/FlowGraph/flowGraphContext.js +1 -2
  190. package/FlowGraph/flowGraphContext.js.map +1 -1
  191. package/FlowGraph/flowGraphCoordinator.js +4 -7
  192. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  193. package/FlowGraph/flowGraphSignalConnection.js +1 -2
  194. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  195. package/FlowGraph/serialization.js +2 -3
  196. package/FlowGraph/serialization.js.map +1 -1
  197. package/Gamepads/gamepadManager.js +1 -1
  198. package/Gamepads/gamepadManager.js.map +1 -1
  199. package/Gizmos/axisDragGizmo.js +2 -4
  200. package/Gizmos/axisDragGizmo.js.map +1 -1
  201. package/Gizmos/axisScaleGizmo.js +5 -8
  202. package/Gizmos/axisScaleGizmo.js.map +1 -1
  203. package/Gizmos/boundingBoxGizmo.js +1 -1
  204. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  205. package/Gizmos/cameraGizmo.js +2 -3
  206. package/Gizmos/cameraGizmo.js.map +1 -1
  207. package/Gizmos/gizmo.js +4 -7
  208. package/Gizmos/gizmo.js.map +1 -1
  209. package/Gizmos/gizmoManager.js +3 -4
  210. package/Gizmos/gizmoManager.js.map +1 -1
  211. package/Gizmos/planeDragGizmo.js +2 -4
  212. package/Gizmos/planeDragGizmo.js.map +1 -1
  213. package/Gizmos/planeRotationGizmo.js +2 -4
  214. package/Gizmos/planeRotationGizmo.js.map +1 -1
  215. package/Helpers/environmentHelper.js +8 -2
  216. package/Helpers/environmentHelper.js.map +1 -1
  217. package/Helpers/videoDome.js +1 -2
  218. package/Helpers/videoDome.js.map +1 -1
  219. package/Inputs/scene.inputManager.js +8 -10
  220. package/Inputs/scene.inputManager.js.map +1 -1
  221. package/Layers/effectLayer.js +16 -10
  222. package/Layers/effectLayer.js.map +1 -1
  223. package/Layers/glowLayer.js +16 -6
  224. package/Layers/glowLayer.js.map +1 -1
  225. package/Layers/highlightLayer.js +12 -3
  226. package/Layers/highlightLayer.js.map +1 -1
  227. package/Layers/layer.js +1 -2
  228. package/Layers/layer.js.map +1 -1
  229. package/LensFlares/lensFlareSystem.js +1 -2
  230. package/LensFlares/lensFlareSystem.js.map +1 -1
  231. package/Lights/Shadows/cascadedShadowGenerator.js +21 -25
  232. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  233. package/Lights/Shadows/shadowGenerator.js +18 -21
  234. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  235. package/Lights/light.js +2 -4
  236. package/Lights/light.js.map +1 -1
  237. package/Lights/shadowLight.js +1 -1
  238. package/Lights/shadowLight.js.map +1 -1
  239. package/Loading/Plugins/babylonFileLoader.js +1 -2
  240. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  241. package/Loading/sceneLoader.js +1 -1
  242. package/Loading/sceneLoader.js.map +1 -1
  243. package/Materials/GreasedLine/greasedLinePluginMaterial.js +26 -32
  244. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  245. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +22 -27
  246. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  247. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -7
  248. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
  250. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -2
  252. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +1 -1
  254. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/Dual/textureBlock.js +10 -16
  256. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -3
  258. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -2
  260. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -4
  262. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/Input/inputBlock.js +1 -2
  264. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +24 -26
  266. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
  268. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +45 -49
  270. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -2
  272. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  273. package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
  274. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  275. package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
  276. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  277. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -28
  278. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
  280. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  281. package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
  282. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  283. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +43 -33
  284. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  285. package/Materials/Node/Blocks/biPlanarBlock.js +1 -2
  286. package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
  287. package/Materials/Node/Blocks/cloudBlock.js +2 -3
  288. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  289. package/Materials/Node/Blocks/colorMergerBlock.js +4 -5
  290. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/customBlock.js +4 -6
  292. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +2 -4
  294. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/triPlanarBlock.js +14 -23
  296. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/vectorMergerBlock.js +4 -5
  298. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  299. package/Materials/Node/nodeMaterial.js +16 -11
  300. package/Materials/Node/nodeMaterial.js.map +1 -1
  301. package/Materials/Node/nodeMaterialBlock.js +3 -4
  302. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  303. package/Materials/Node/nodeMaterialBuildState.js +1 -1
  304. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  305. package/Materials/PBR/pbrBaseMaterial.js +25 -28
  306. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  307. package/Materials/PBR/pbrClearCoatConfiguration.js +6 -9
  308. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  309. package/Materials/PBR/pbrIridescenceConfiguration.js +4 -7
  310. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  311. package/Materials/PBR/pbrSheenConfiguration.js +4 -7
  312. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  313. package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
  314. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  315. package/Materials/Textures/Packer/packer.js +13 -14
  316. package/Materials/Textures/Packer/packer.js.map +1 -1
  317. package/Materials/Textures/Procedurals/noiseProceduralTexture.js +1 -2
  318. package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
  319. package/Materials/Textures/Procedurals/proceduralTexture.js +19 -11
  320. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  321. package/Materials/Textures/baseTexture.js +2 -4
  322. package/Materials/Textures/baseTexture.js.map +1 -1
  323. package/Materials/Textures/cubeTexture.js +7 -13
  324. package/Materials/Textures/cubeTexture.js.map +1 -1
  325. package/Materials/Textures/dynamicTexture.js +1 -2
  326. package/Materials/Textures/dynamicTexture.js.map +1 -1
  327. package/Materials/Textures/hdrCubeTexture.js +2 -4
  328. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  329. package/Materials/Textures/htmlElementTexture.js +5 -3
  330. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  331. package/Materials/Textures/internalTexture.js +3 -5
  332. package/Materials/Textures/internalTexture.js.map +1 -1
  333. package/Materials/Textures/mirrorTexture.js +3 -6
  334. package/Materials/Textures/mirrorTexture.js.map +1 -1
  335. package/Materials/Textures/multiRenderTarget.js +5 -8
  336. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  337. package/Materials/Textures/rawTexture.js +1 -1
  338. package/Materials/Textures/rawTexture.js.map +1 -1
  339. package/Materials/Textures/renderTargetTexture.js +22 -34
  340. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  341. package/Materials/Textures/texture.js +16 -21
  342. package/Materials/Textures/texture.js.map +1 -1
  343. package/Materials/Textures/thinRenderTargetTexture.js +2 -4
  344. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  345. package/Materials/Textures/thinTexture.js +1 -1
  346. package/Materials/Textures/thinTexture.js.map +1 -1
  347. package/Materials/Textures/videoTexture.js +12 -10
  348. package/Materials/Textures/videoTexture.js.map +1 -1
  349. package/Materials/clipPlaneMaterialHelper.js +18 -21
  350. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  351. package/Materials/drawWrapper.js +2 -4
  352. package/Materials/drawWrapper.js.map +1 -1
  353. package/Materials/effect.d.ts +4 -0
  354. package/Materials/effect.js +18 -18
  355. package/Materials/effect.js.map +1 -1
  356. package/Materials/effectRenderer.js +2 -3
  357. package/Materials/effectRenderer.js.map +1 -1
  358. package/Materials/material.decalMapConfiguration.js +3 -3
  359. package/Materials/material.decalMapConfiguration.js.map +1 -1
  360. package/Materials/material.detailMapConfiguration.js +1 -2
  361. package/Materials/material.detailMapConfiguration.js.map +1 -1
  362. package/Materials/material.js +7 -4
  363. package/Materials/material.js.map +1 -1
  364. package/Materials/materialDefines.js +5 -6
  365. package/Materials/materialDefines.js.map +1 -1
  366. package/Materials/materialHelper.d.ts +1 -1
  367. package/Materials/materialHelper.js +3 -4
  368. package/Materials/materialHelper.js.map +1 -1
  369. package/Materials/materialPluginManager.js +3 -5
  370. package/Materials/materialPluginManager.js.map +1 -1
  371. package/Materials/meshDebugPluginMaterial.js +13 -14
  372. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  373. package/Materials/multiMaterial.js +1 -2
  374. package/Materials/multiMaterial.js.map +1 -1
  375. package/Materials/shaderMaterial.d.ts +1 -1
  376. package/Materials/shaderMaterial.js +64 -32
  377. package/Materials/shaderMaterial.js.map +1 -1
  378. package/Materials/shadowDepthWrapper.js +24 -23
  379. package/Materials/shadowDepthWrapper.js.map +1 -1
  380. package/Materials/standardMaterial.js +10 -12
  381. package/Materials/standardMaterial.js.map +1 -1
  382. package/Materials/uniformBuffer.js +1 -1
  383. package/Materials/uniformBuffer.js.map +1 -1
  384. package/Maths/math.vector.js +1 -2
  385. package/Maths/math.vector.js.map +1 -1
  386. package/Meshes/Builders/decalBuilder.js +26 -29
  387. package/Meshes/Builders/decalBuilder.js.map +1 -1
  388. package/Meshes/Builders/greasedLineBuilder.js +16 -16
  389. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  390. package/Meshes/Builders/groundBuilder.d.ts +5 -1
  391. package/Meshes/Builders/groundBuilder.js +13 -2
  392. package/Meshes/Builders/groundBuilder.js.map +1 -1
  393. package/Meshes/Builders/textBuilder.js +2 -3
  394. package/Meshes/Builders/textBuilder.js.map +1 -1
  395. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +9 -1
  396. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +141 -12
  397. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  398. package/Meshes/GreasedLine/greasedLineBaseMesh.js +8 -11
  399. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  400. package/Meshes/GreasedLine/greasedLineMesh.js +3 -5
  401. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  402. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +13 -18
  403. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  404. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js +1 -2
  405. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  406. package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +18 -18
  407. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +18 -18
  408. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  409. package/Meshes/Node/nodeGeometry.js +6 -3
  410. package/Meshes/Node/nodeGeometry.js.map +1 -1
  411. package/Meshes/Node/nodeGeometryBlock.js +1 -1
  412. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  413. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +1 -2
  414. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  415. package/Meshes/Node/nodeGeometryBuildState.js +1 -2
  416. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  417. package/Meshes/abstractMesh.js +6 -10
  418. package/Meshes/abstractMesh.js.map +1 -1
  419. package/Meshes/csg.js +1 -2
  420. package/Meshes/csg.js.map +1 -1
  421. package/Meshes/geometry.js +1 -1
  422. package/Meshes/geometry.js.map +1 -1
  423. package/Meshes/instancedMesh.js +5 -10
  424. package/Meshes/instancedMesh.js.map +1 -1
  425. package/Meshes/mesh.js +13 -22
  426. package/Meshes/mesh.js.map +1 -1
  427. package/Meshes/mesh.vertexData.js +3 -4
  428. package/Meshes/mesh.vertexData.js.map +1 -1
  429. package/Meshes/meshUVSpaceRenderer.js +18 -15
  430. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  431. package/Meshes/subMesh.js +8 -14
  432. package/Meshes/subMesh.js.map +1 -1
  433. package/Meshes/thinInstanceMesh.js +12 -18
  434. package/Meshes/thinInstanceMesh.js.map +1 -1
  435. package/Meshes/trailMesh.js +2 -3
  436. package/Meshes/trailMesh.js.map +1 -1
  437. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -2
  438. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  439. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +9 -14
  440. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  441. package/Misc/PerformanceViewer/performanceViewerCollector.js +2 -3
  442. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  443. package/Misc/arrayTools.js +1 -1
  444. package/Misc/arrayTools.js.map +1 -1
  445. package/Misc/basis.js +2 -3
  446. package/Misc/basis.js.map +1 -1
  447. package/Misc/dataStorage.js +1 -1
  448. package/Misc/dataStorage.js.map +1 -1
  449. package/Misc/deepCopier.js +1 -1
  450. package/Misc/deepCopier.js.map +1 -1
  451. package/Misc/environmentTextureTools.js +3 -4
  452. package/Misc/environmentTextureTools.js.map +1 -1
  453. package/Misc/equirectangularCapture.js +2 -3
  454. package/Misc/equirectangularCapture.js.map +1 -1
  455. package/Misc/fileTools.js +4 -4
  456. package/Misc/fileTools.js.map +1 -1
  457. package/Misc/greasedLineTools.js +3 -5
  458. package/Misc/greasedLineTools.js.map +1 -1
  459. package/Misc/logger.js +1 -2
  460. package/Misc/logger.js.map +1 -1
  461. package/Misc/minMaxReducer.js +2 -3
  462. package/Misc/minMaxReducer.js.map +1 -1
  463. package/Misc/pressureObserverWrapper.js +5 -8
  464. package/Misc/pressureObserverWrapper.js.map +1 -1
  465. package/Misc/sceneRecorder.js +1 -1
  466. package/Misc/sceneRecorder.js.map +1 -1
  467. package/Misc/screenshotTools.js +1 -1
  468. package/Misc/screenshotTools.js.map +1 -1
  469. package/Misc/textureTools.js +5 -5
  470. package/Misc/textureTools.js.map +1 -1
  471. package/Misc/timer.js +3 -5
  472. package/Misc/timer.js.map +1 -1
  473. package/Misc/tools.d.ts +3 -2
  474. package/Misc/tools.js +6 -5
  475. package/Misc/tools.js.map +1 -1
  476. package/Misc/trajectoryClassifier.js +3 -3
  477. package/Misc/trajectoryClassifier.js.map +1 -1
  478. package/Misc/videoRecorder.js +6 -4
  479. package/Misc/videoRecorder.js.map +1 -1
  480. package/Misc/virtualJoystick.js +4 -1
  481. package/Misc/virtualJoystick.js.map +1 -1
  482. package/Morph/morphTargetManager.js +1 -2
  483. package/Morph/morphTargetManager.js.map +1 -1
  484. package/Particles/EmitterTypes/meshParticleEmitter.js +1 -2
  485. package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
  486. package/Particles/baseParticleSystem.d.ts +4 -0
  487. package/Particles/baseParticleSystem.js +4 -0
  488. package/Particles/baseParticleSystem.js.map +1 -1
  489. package/Particles/computeShaderParticleSystem.js +3 -6
  490. package/Particles/computeShaderParticleSystem.js.map +1 -1
  491. package/Particles/gpuParticleSystem.d.ts +2 -2
  492. package/Particles/gpuParticleSystem.js +30 -20
  493. package/Particles/gpuParticleSystem.js.map +1 -1
  494. package/Particles/particleSystem.d.ts +3 -2
  495. package/Particles/particleSystem.js +33 -30
  496. package/Particles/particleSystem.js.map +1 -1
  497. package/Particles/particleSystemComponent.js +2 -3
  498. package/Particles/particleSystemComponent.js.map +1 -1
  499. package/Particles/pointsCloudSystem.js +5 -8
  500. package/Particles/pointsCloudSystem.js.map +1 -1
  501. package/Particles/solidParticleSystem.js +5 -7
  502. package/Particles/solidParticleSystem.js.map +1 -1
  503. package/Particles/webgl2ParticleSystem.js +1 -2
  504. package/Particles/webgl2ParticleSystem.js.map +1 -1
  505. package/Physics/castingResult.js +1 -1
  506. package/Physics/castingResult.js.map +1 -1
  507. package/Physics/joinedPhysicsEngineComponent.js +2 -2
  508. package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
  509. package/Physics/physicsHelper.js +19 -21
  510. package/Physics/physicsHelper.js.map +1 -1
  511. package/Physics/v2/IPhysicsEnginePlugin.d.ts +20 -0
  512. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  513. package/Physics/v2/Plugins/havokPlugin.js +48 -35
  514. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  515. package/Physics/v2/physicsAggregate.js +10 -12
  516. package/Physics/v2/physicsAggregate.js.map +1 -1
  517. package/Physics/v2/physicsBody.js +2 -4
  518. package/Physics/v2/physicsBody.js.map +1 -1
  519. package/Physics/v2/physicsShape.js +1 -2
  520. package/Physics/v2/physicsShape.js.map +1 -1
  521. package/Physics/v2/ragdoll.js +6 -8
  522. package/Physics/v2/ragdoll.js.map +1 -1
  523. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +6 -8
  524. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  525. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +14 -22
  526. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  527. package/PostProcesses/colorCorrectionPostProcess.js +1 -1
  528. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  529. package/PostProcesses/postProcess.js +28 -34
  530. package/PostProcesses/postProcess.js.map +1 -1
  531. package/PostProcesses/postProcessManager.js +4 -6
  532. package/PostProcesses/postProcessManager.js.map +1 -1
  533. package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
  534. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  535. package/PostProcesses/volumetricLightScatteringPostProcess.js +4 -7
  536. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  537. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +1 -1
  538. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  539. package/Probes/reflectionProbe.js +2 -4
  540. package/Probes/reflectionProbe.js.map +1 -1
  541. package/Rendering/GlobalIllumination/giRSMManager.js +22 -19
  542. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  543. package/Rendering/boundingBoxRenderer.js +2 -3
  544. package/Rendering/boundingBoxRenderer.js.map +1 -1
  545. package/Rendering/depthPeelingRenderer.js +2 -4
  546. package/Rendering/depthPeelingRenderer.js.map +1 -1
  547. package/Rendering/depthPeelingSceneComponent.js +2 -4
  548. package/Rendering/depthPeelingSceneComponent.js.map +1 -1
  549. package/Rendering/depthRenderer.js +10 -13
  550. package/Rendering/depthRenderer.js.map +1 -1
  551. package/Rendering/edgesRenderer.js +8 -11
  552. package/Rendering/edgesRenderer.js.map +1 -1
  553. package/Rendering/fluidRenderer/fluidRenderer.js +6 -11
  554. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  555. package/Rendering/fluidRenderer/fluidRenderingObject.js +3 -5
  556. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  557. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -4
  558. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  559. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +30 -36
  560. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  561. package/Rendering/fluidRenderer/fluidRenderingTextures.js +5 -7
  562. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  563. package/Rendering/geometryBufferRenderer.js +3 -2
  564. package/Rendering/geometryBufferRenderer.js.map +1 -1
  565. package/Rendering/outlineRenderer.js +5 -4
  566. package/Rendering/outlineRenderer.js.map +1 -1
  567. package/Rendering/prePassRenderer.js +3 -6
  568. package/Rendering/prePassRenderer.js.map +1 -1
  569. package/Rendering/reflectiveShadowMap.d.ts +1 -0
  570. package/Rendering/reflectiveShadowMap.js +5 -5
  571. package/Rendering/reflectiveShadowMap.js.map +1 -1
  572. package/Shaders/color.fragment.d.ts +2 -0
  573. package/Shaders/color.fragment.js +4 -0
  574. package/Shaders/color.fragment.js.map +1 -1
  575. package/Shaders/color.vertex.d.ts +2 -0
  576. package/Shaders/color.vertex.js +7 -0
  577. package/Shaders/color.vertex.js.map +1 -1
  578. package/Shaders/gpuRenderParticles.fragment.d.ts +2 -0
  579. package/Shaders/gpuRenderParticles.fragment.js +4 -0
  580. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  581. package/Shaders/gpuRenderParticles.vertex.d.ts +2 -0
  582. package/Shaders/gpuRenderParticles.vertex.js +5 -1
  583. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  584. package/Shaders/particles.fragment.d.ts +2 -0
  585. package/Shaders/particles.fragment.js +4 -0
  586. package/Shaders/particles.fragment.js.map +1 -1
  587. package/Shaders/particles.vertex.d.ts +2 -0
  588. package/Shaders/particles.vertex.js +5 -1
  589. package/Shaders/particles.vertex.js.map +1 -1
  590. package/Sprites/spriteManager.js +1 -2
  591. package/Sprites/spriteManager.js.map +1 -1
  592. package/Sprites/spriteRenderer.js +5 -7
  593. package/Sprites/spriteRenderer.js.map +1 -1
  594. package/States/stencilStateComposer.js +2 -4
  595. package/States/stencilStateComposer.js.map +1 -1
  596. package/XR/features/WebXRAbstractFeature.js +6 -2
  597. package/XR/features/WebXRAbstractFeature.js.map +1 -1
  598. package/XR/features/WebXRAnchorSystem.js +1 -2
  599. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  600. package/XR/features/WebXRControllerMovement.js +6 -7
  601. package/XR/features/WebXRControllerMovement.js.map +1 -1
  602. package/XR/features/WebXRControllerPhysics.js +17 -10
  603. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  604. package/XR/features/WebXRControllerPointerSelection.js +1 -2
  605. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  606. package/XR/features/WebXRControllerTeleportation.d.ts +1 -0
  607. package/XR/features/WebXRControllerTeleportation.js +6 -3
  608. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  609. package/XR/features/WebXRDepthSensing.js +3 -5
  610. package/XR/features/WebXRDepthSensing.js.map +1 -1
  611. package/XR/features/WebXRHandTracking.d.ts +1 -0
  612. package/XR/features/WebXRHandTracking.js +31 -28
  613. package/XR/features/WebXRHandTracking.js.map +1 -1
  614. package/XR/features/WebXRLayers.js +9 -11
  615. package/XR/features/WebXRLayers.js.map +1 -1
  616. package/XR/features/WebXRLightEstimation.js +3 -6
  617. package/XR/features/WebXRLightEstimation.js.map +1 -1
  618. package/XR/features/WebXRMeshDetector.js +2 -4
  619. package/XR/features/WebXRMeshDetector.js.map +1 -1
  620. package/XR/features/WebXRNearInteraction.js +21 -18
  621. package/XR/features/WebXRNearInteraction.js.map +1 -1
  622. package/XR/features/WebXRPlaneDetector.js +1 -2
  623. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  624. package/XR/features/WebXRRawCameraAccess.js +2 -3
  625. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  626. package/XR/features/WebXRSpaceWarp.js +1 -1
  627. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  628. package/XR/motionController/webXRAbstractMotionController.js +4 -1
  629. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  630. package/XR/native/nativeXRFrame.js +1 -2
  631. package/XR/native/nativeXRFrame.js.map +1 -1
  632. package/XR/webXRCamera.js +1 -2
  633. package/XR/webXRCamera.js.map +1 -1
  634. package/XR/webXRDefaultExperience.js +28 -6
  635. package/XR/webXRDefaultExperience.js.map +1 -1
  636. package/XR/webXRExperienceHelper.js +5 -7
  637. package/XR/webXRExperienceHelper.js.map +1 -1
  638. package/XR/webXRFeaturesManager.js +4 -1
  639. package/XR/webXRFeaturesManager.js.map +1 -1
  640. package/XR/webXRInput.js +6 -1
  641. package/XR/webXRInput.js.map +1 -1
  642. package/XR/webXRInputSource.js +1 -2
  643. package/XR/webXRInputSource.js.map +1 -1
  644. package/XR/webXRSessionManager.js +16 -29
  645. package/XR/webXRSessionManager.js.map +1 -1
  646. package/assetContainer.js +4 -1
  647. package/assetContainer.js.map +1 -1
  648. package/package.json +1 -1
  649. package/scene.js +18 -17
  650. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fluidRenderer.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,uBAAmB;AAOnC,OAAO,EAAE,uBAAuB,EAAE,gCAA4B;AAG9D,OAAO,EAAE,SAAS,EAAE,mCAA+B;AAInD,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAC5F,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,OAAO,kDAAkD,CAAC;AAC1D,OAAO,oDAAoD,CAAC;AAC5D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,wDAAwD,CAAC;AAChE,OAAO,oDAAoD,CAAC;AAC5D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,oDAAoD,CAAC;AAC5D,OAAO,mDAAmD,CAAC;AAC3D,OAAO,6CAA6C,CAAC;AAyBrD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,EAAE;IACpD,GAAG,EAAE;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,GAAG,EAAE,UAAuB,KAA8B;QACtD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH,KAAK,CAAC,SAAS,CAAC,mBAAmB,GAAG;IAClC,IAAI,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;IAED,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IAE9C,OAAO,IAAI,CAAC,cAAc,CAAC;AAC/B,CAAC,CAAC;AAEF,KAAK,CAAC,SAAS,CAAC,oBAAoB,GAAG;;IACnC,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/B,CAAC,CAAC;AAIF,SAAS,sBAAsB,CAAC,GAAyB;IACrD,OAAO,CAAC,CAAE,GAA0C,CAAC,cAAc,CAAC;AACxE,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAyB;IACtD,OAAO,CAAC,CAAE,GAA2C,CAAC,UAAU,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,2BAA2B;IAWpC;;;OAGG;IACH,YAAY,KAAY;QAdxB;;WAEG;QACa,SAAI,GAAG,uBAAuB,CAAC,kBAAkB,CAAC;QAY9D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC,YAAY,CACzD,uBAAuB,CAAC,kDAAkD,EAC1E,IAAI,EACJ,IAAI,CAAC,gCAAgC,CACxC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,YAAY,CAAC,uBAAuB,CAAC,kCAAkC,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3I,CAAC;IAEO,gCAAgC,CAAC,cAA0D;;QAC/F,MAAA,IAAI,CAAC,KAAK,CAAC,aAAa,0CAAE,iBAAiB,EAAE,CAAC;IAClD,CAAC;IAEO,gBAAgB,CAAC,MAAc;;QACnC,MAAA,IAAI,CAAC,KAAK,CAAC,aAAa,0CAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACI,OAAO;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE;YAChB,OAAO;SACV;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACzD,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAClD,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE;gBAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC;gBACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;oBACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;iBAClD;aACJ;SACJ;QAED,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACvB,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACtC,CAAC;CACJ;AAaD;;;GAGG;AACH,MAAM,OAAO,aAAa;IACtB,gBAAgB;IACT,MAAM,CAAC,6BAA6B,CAAC,KAAY;QACpD,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,uBAAuB,CAAC,kBAAkB,CAAgC,CAAC;QAC/G,IAAI,CAAC,SAAS,EAAE;YACZ,SAAS,GAAG,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACnD,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;SAClC;IACL,CAAC;IAaD;;;OAGG;IACH,YAAY,KAAY;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAE1B,aAAa,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE;YACpE,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACI,QAAQ;QACX,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,iCAAiC,CAAC,EAAmB;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACI,iBAAiB,CAAC,EAAmB,EAAE,sBAAgC,EAAE,cAA6C,EAAE,MAAe;QAC1I,MAAM,MAAM,GAAG,IAAI,kCAAkC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC;QAEhF,IAAI,CAAC,cAAc,EAAE;YACjB,cAAc,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC7C;QAED,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,YAAY,EAAE,EAAE;YACtD,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;SACzF;QAED,IAAI,sBAAsB,KAAK,SAAS,EAAE;YACtC,cAAc,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;SAClE;QAED,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAEhD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAExC,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACI,kBAAkB,CACrB,OAAsC,EACtC,YAAoB,EACpB,sBAAgC,EAChC,cAA6C,EAC7C,MAAe;QAEf,MAAM,MAAM,GAAG,IAAI,mCAAmC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAE3F,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC;QAEhF,IAAI,CAAC,cAAc,EAAE;YACjB,cAAc,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC7C;QAED,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,YAAY,EAAE,EAAE;YACtD,cAAc,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;SACzF;QAED,IAAI,sBAAsB,KAAK,SAAS,EAAE;YACtC,cAAc,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;SAClE;QAED,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAEhD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAExC,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,kBAAkB,CAAC,YAAyC,EAAE,0BAA0B,GAAG,IAAI;QAClG,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,OAAO,KAAK,CAAC;SAChB;QAED,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEpC,IAAI,0BAA0B,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;YACnE,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;aAAM;YACH,IAAI,CAAC,gCAAgC,EAAE,CAAC;SAC3C;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,qBAAqB;QACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,4BAA4B;QAChC,MAAM,OAAO,GAA8B,EAAE,CAAC;QAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAChD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC;SAChE;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAwC,EAAE,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACb,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;aAClB;iBAAM;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;aACzC;SACJ;QAED,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;SACzC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,uBAAuB,CAAC,EAAmB;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,cAAc,KAAK,EAAE,EAAE;gBAC1D,OAAO,CAAC,CAAC;aACZ;SACJ;QAED,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAEO,WAAW;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACrC;QAED,MAAM,OAAO,GAA4C,IAAI,GAAG,EAAE,CAAC;QAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAE/C,cAAc,CAAC,WAAW,EAAE,CAAC;YAE7B,IAAI,cAAc,CAAC,MAAM,IAAI,cAAc,CAAC,kBAAkB,EAAE;gBAC5D,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI,EAAE;oBACP,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBAC5C;gBACD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC7B,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;aACjF;SACJ;QAED,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAElC,MAAM,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACvD,IAAI,CAAC,gBAAgB,EAAE;gBACnB,SAAS;aACZ;YAED,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC;YAElD,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE;;gBAC9C,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,mBAAmB,EAAE;oBACpD,gBAAgB,CAAC,YAAY,CAAC,yBAAyB,CACnD,CAAC,EACD,IAAI,EACJ,IAAI,CAAC,OAAO,CAAC,eAAe,EAC5B,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAC1B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,CAAC,SAAS,CAAC,2BAA2B,EAC/G,8BAA8B,gBAAgB,CAAC,IAAI,EAAE,CACxD,CAAC;iBACL;gBACD,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;oBAC1C,MAAM,WAAW,GAAG,MAAA,cAAc,CAAC,sBAAsB,0CAAE,YAAY,CAAC;oBACxE,MAAM,gBAAgB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC;oBAC9C,IAAI,WAAW,IAAI,gBAAgB,EAAE;wBACjC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,GAAG,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC;wBACnE,IAAI,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;wBAC9C,IAAI,CAAC,gBAAgB,EAAE;4BACnB,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;yBACjJ;wBACD,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;qBAC5D;iBACJ;YACL,CAAC,CAAC,CAAC;SACN;QAED,oEAAoE;QACpE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAExC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,EAAE;gBACR,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;oBACjC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;iBACpC;aACJ;iBAAM;gBACH,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;oBACjC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;wBAChB,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;qBACpC;iBACJ;aACJ;SACJ;QAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,gCAAgC,EAAE,CAAC;IAC5C,CAAC;IAEO,gCAAgC;QACpC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwC,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAChD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAChE,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,OAAO,GAAG,CAAC,CAAC;aACf;YACD,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;SAC7G;QAED,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE;YACnD,IAAI,cAAc,CAAC,kBAAkB,EAAE;gBACnC,cAAc,CAAC,kBAAkB,CAAC,YAAY,GAAG,YAAY,CAAC;aACjE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,8BAA8B;QAClC,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,aAAa,EAAE;YAC9C,eAAe,CAAC,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC;SACnF;IACL,CAAC;IAED,gBAAgB;IACT,iBAAiB;QACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;YACzC,IAAI,QAAQ,CAAC,kBAAkB,EAAE;gBAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO;aACV;SACJ;IACL,CAAC;IAED,gBAAgB;IACT,OAAO,CAAC,SAAkB;;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;aAC3C;SACJ;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE;YACtE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YACxC,IAAI,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;gBACnC,SAAS;aACZ;YAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACvD,IAAI,CAAC,gBAAgB,EAAE;gBACnB,SAAS;aACZ;YAED,MAAM,eAAe,GAAG,MAAA,gBAAgB,CAAC,YAAY,0CAAE,mBAAmB,CAAC;YAC3E,IAAI,eAAe,EAAE;gBACjB,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC;gBAClD,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;oBAC1C,cAAc,CAAC,eAAe,GAAG,eAAe,CAAC;iBACpD;gBACD,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;oBACjC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;iBAChD;aACJ;SACJ;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAChD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,IAAI,eAAe,CAAC,cAAc,CAAC,MAAM,KAAK,SAAS,EAAE;gBACnE,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;aAClE;SACJ;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAC1C;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACrC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;gBACjC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aACpC;QACL,CAAC,CAAC,CAAC;QAEF,IAAI,CAAC,aAAoD,GAAG,EAAE,CAAC;QAC/D,IAAI,CAAC,eAAkD,GAAG,EAAE,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACJ","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\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { Buffer } from \"core/Buffers/buffer\";\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 \"../../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\nfunction IsCustomParticlesObject(obj: FluidRenderingObject): obj is FluidRenderingObjectCustomParticles {\r\n return !!(obj as FluidRenderingObjectCustomParticles).addBuffers;\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 const fluidRenderer = this.scene.fluidRenderer;\r\n if (!fluidRenderer) {\r\n return;\r\n }\r\n\r\n const buffers = new Set<Buffer>();\r\n for (let i = 0; i < fluidRenderer.renderObjects.length; ++i) {\r\n const obj = fluidRenderer.renderObjects[i].object;\r\n if (IsCustomParticlesObject(obj)) {\r\n const vbuffers = obj.vertexBuffers;\r\n for (const name in vbuffers) {\r\n buffers.add(vbuffers[name].getWrapperBuffer());\r\n }\r\n }\r\n }\r\n\r\n buffers.forEach((buffer) => {\r\n buffer._rebuild();\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 * @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());\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());\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());\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());\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(\r\n 0,\r\n true,\r\n this._engine.isStencilEnable,\r\n targetRenderers[0].samples,\r\n this._engine.isStencilEnable ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n `PostProcessRTTDepthStencil-${firstPostProcess.name}`\r\n );\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"]}
1
+ {"version":3,"file":"fluidRenderer.js","sourceRoot":"","sources":["../../../../../dev/core/src/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\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { Buffer } from \"core/Buffers/buffer\";\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 \"../../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\nfunction IsCustomParticlesObject(obj: FluidRenderingObject): obj is FluidRenderingObjectCustomParticles {\r\n return !!(obj as FluidRenderingObjectCustomParticles).addBuffers;\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 const fluidRenderer = this.scene.fluidRenderer;\r\n if (!fluidRenderer) {\r\n return;\r\n }\r\n\r\n const buffers = new Set<Buffer>();\r\n for (let i = 0; i < fluidRenderer.renderObjects.length; ++i) {\r\n const obj = fluidRenderer.renderObjects[i].object;\r\n if (IsCustomParticlesObject(obj)) {\r\n const vbuffers = obj.vertexBuffers;\r\n for (const name in vbuffers) {\r\n buffers.add(vbuffers[name].getWrapperBuffer());\r\n }\r\n }\r\n }\r\n\r\n buffers.forEach((buffer) => {\r\n buffer._rebuild();\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 * @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());\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());\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());\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());\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(\r\n 0,\r\n true,\r\n this._engine.isStencilEnable,\r\n targetRenderers[0].samples,\r\n this._engine.isStencilEnable ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n `PostProcessRTTDepthStencil-${firstPostProcess.name}`\r\n );\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"]}
@@ -33,8 +33,7 @@ export class FluidRenderingObject {
33
33
  this._effectsAreDirty = true;
34
34
  }
35
35
  _hasVelocity() {
36
- var _a;
37
- return !!((_a = this.vertexBuffers) === null || _a === void 0 ? void 0 : _a.velocity);
36
+ return !!this.vertexBuffers?.velocity;
38
37
  }
39
38
  /**
40
39
  * Gets the index buffer (or null if the object is using instancing)
@@ -175,9 +174,8 @@ export class FluidRenderingObject {
175
174
  * Releases the ressources used by the class
176
175
  */
177
176
  dispose() {
178
- var _a, _b;
179
- (_a = this._depthEffectWrapper) === null || _a === void 0 ? void 0 : _a.dispose();
180
- (_b = this._thicknessEffectWrapper) === null || _b === void 0 ? void 0 : _b.dispose();
177
+ this._depthEffectWrapper?.dispose();
178
+ this._thicknessEffectWrapper?.dispose();
181
179
  }
182
180
  }
183
181
  //# sourceMappingURL=fluidRenderingObject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fluidRenderingObject.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingObject.ts"],"names":[],"mappings":"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","sourcesContent":["import type { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { DataBuffer } from \"core/Buffers/dataBuffer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\n/**\r\n * Defines the base object used for fluid rendering.\r\n * It is based on a list of vertices (particles)\r\n */\r\nexport abstract class FluidRenderingObject {\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n protected _effectsAreDirty: boolean;\r\n protected _depthEffectWrapper: Nullable<EffectWrapper>;\r\n protected _thicknessEffectWrapper: Nullable<EffectWrapper>;\r\n\r\n /** Defines the priority of the object. Objects will be rendered in ascending order of priority */\r\n public priority = 0;\r\n\r\n protected _particleSize = 0.1;\r\n\r\n /** Observable triggered when the size of the particle is changed */\r\n public onParticleSizeChanged = new Observable<FluidRenderingObject>();\r\n\r\n /** Gets or sets the size of the particle */\r\n public get particleSize() {\r\n return this._particleSize;\r\n }\r\n\r\n public set particleSize(size: number) {\r\n if (size === this._particleSize) {\r\n return;\r\n }\r\n\r\n this._particleSize = size;\r\n this.onParticleSizeChanged.notifyObservers(this);\r\n }\r\n\r\n /** Defines the alpha value of a particle */\r\n public particleThicknessAlpha = 0.05;\r\n\r\n /** Indicates if the object uses instancing or not */\r\n public get useInstancing() {\r\n return !this.indexBuffer;\r\n }\r\n\r\n private _useVelocity = false;\r\n\r\n /** Indicates if velocity of particles should be used when rendering the object. The vertex buffer set must contain a \"velocity\" buffer for this to work! */\r\n public get useVelocity() {\r\n return this._useVelocity;\r\n }\r\n\r\n public set useVelocity(use: boolean) {\r\n if (this._useVelocity === use || !this._hasVelocity()) {\r\n return;\r\n }\r\n\r\n this._useVelocity = use;\r\n this._effectsAreDirty = true;\r\n }\r\n\r\n private _hasVelocity() {\r\n return !!this.vertexBuffers?.velocity;\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers\r\n */\r\n public abstract get vertexBuffers(): { [key: string]: VertexBuffer };\r\n\r\n /**\r\n * Gets the index buffer (or null if the object is using instancing)\r\n */\r\n public get indexBuffer(): Nullable<DataBuffer> {\r\n return null;\r\n }\r\n\r\n /**\r\n * @returns the name of the class\r\n */\r\n public getClassName(): string {\r\n return \"FluidRenderingObject\";\r\n }\r\n\r\n /**\r\n * Instantiates a fluid rendering object\r\n * @param scene The scene the object is part of\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._effectsAreDirty = true;\r\n this._depthEffectWrapper = null;\r\n this._thicknessEffectWrapper = null;\r\n }\r\n\r\n protected _createEffects(): void {\r\n const uniformNames = [\"view\", \"projection\", \"particleRadius\", \"size\"];\r\n const attributeNames = [\"position\", \"offset\"];\r\n const defines: string[] = [];\r\n\r\n this._effectsAreDirty = false;\r\n\r\n if (this.useVelocity) {\r\n attributeNames.push(\"velocity\");\r\n defines.push(\"#define FLUIDRENDERING_VELOCITY\");\r\n }\r\n\r\n if (this._scene.useRightHandedSystem) {\r\n defines.push(\"#define FLUIDRENDERING_RHS\");\r\n }\r\n\r\n this._depthEffectWrapper = new EffectWrapper({\r\n engine: this._engine,\r\n useShaderStore: true,\r\n vertexShader: \"fluidRenderingParticleDepth\",\r\n fragmentShader: \"fluidRenderingParticleDepth\",\r\n attributeNames,\r\n uniformNames,\r\n samplerNames: [],\r\n defines,\r\n });\r\n\r\n uniformNames.push(\"particleAlpha\");\r\n\r\n this._thicknessEffectWrapper = new EffectWrapper({\r\n engine: this._engine,\r\n useShaderStore: true,\r\n vertexShader: \"fluidRenderingParticleThickness\",\r\n fragmentShader: \"fluidRenderingParticleThickness\",\r\n attributeNames: [\"position\", \"offset\"],\r\n uniformNames,\r\n samplerNames: [],\r\n });\r\n }\r\n\r\n /**\r\n * Indicates if the object is ready to be rendered\r\n * @returns True if everything is ready for the object to be rendered, otherwise false\r\n */\r\n public isReady(): boolean {\r\n if (this._effectsAreDirty) {\r\n this._createEffects();\r\n }\r\n\r\n if (!this._depthEffectWrapper || !this._thicknessEffectWrapper) {\r\n return false;\r\n }\r\n\r\n const depthEffect = this._depthEffectWrapper._drawWrapper.effect!;\r\n const thicknessEffect = this._thicknessEffectWrapper._drawWrapper.effect!;\r\n\r\n return depthEffect.isReady() && thicknessEffect.isReady();\r\n }\r\n\r\n /**\r\n * Gets the number of particles (vertices) of this object\r\n * @returns The number of particles\r\n */\r\n public abstract get numParticles(): number;\r\n\r\n /**\r\n * Render the depth texture for this object\r\n */\r\n public renderDepthTexture(): void {\r\n const numParticles = this.numParticles;\r\n\r\n if (!this._depthEffectWrapper || numParticles === 0) {\r\n return;\r\n }\r\n\r\n const depthDrawWrapper = this._depthEffectWrapper._drawWrapper;\r\n const depthEffect = depthDrawWrapper.effect!;\r\n\r\n this._engine.enableEffect(depthDrawWrapper);\r\n this._engine.bindBuffers(this.vertexBuffers, this.indexBuffer, depthEffect);\r\n\r\n depthEffect.setMatrix(\"view\", this._scene.getViewMatrix());\r\n depthEffect.setMatrix(\"projection\", this._scene.getProjectionMatrix());\r\n depthEffect.setFloat2(\"size\", this._particleSize, this._particleSize);\r\n depthEffect.setFloat(\"particleRadius\", this._particleSize / 2);\r\n\r\n if (this.useInstancing) {\r\n this._engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, numParticles);\r\n } else {\r\n this._engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, numParticles);\r\n }\r\n }\r\n\r\n /**\r\n * Render the thickness texture for this object\r\n */\r\n public renderThicknessTexture(): void {\r\n const numParticles = this.numParticles;\r\n\r\n if (!this._thicknessEffectWrapper || numParticles === 0) {\r\n return;\r\n }\r\n\r\n const thicknessDrawWrapper = this._thicknessEffectWrapper._drawWrapper;\r\n const thicknessEffect = thicknessDrawWrapper.effect!;\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_ONEONE);\r\n this._engine.setDepthWrite(false);\r\n\r\n this._engine.enableEffect(thicknessDrawWrapper);\r\n this._engine.bindBuffers(this.vertexBuffers, this.indexBuffer, thicknessEffect);\r\n\r\n thicknessEffect.setMatrix(\"view\", this._scene.getViewMatrix());\r\n thicknessEffect.setMatrix(\"projection\", this._scene.getProjectionMatrix());\r\n thicknessEffect.setFloat(\"particleAlpha\", this.particleThicknessAlpha);\r\n thicknessEffect.setFloat2(\"size\", this._particleSize, this._particleSize);\r\n\r\n if (this.useInstancing) {\r\n this._engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, numParticles);\r\n } else {\r\n this._engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, numParticles);\r\n }\r\n\r\n this._engine.setDepthWrite(true);\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n /**\r\n * Render the diffuse texture for this object\r\n */\r\n public renderDiffuseTexture(): void {\r\n // do nothing by default\r\n }\r\n\r\n /**\r\n * Releases the ressources used by the class\r\n */\r\n public dispose(): void {\r\n this._depthEffectWrapper?.dispose();\r\n this._thicknessEffectWrapper?.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fluidRenderingObject.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingObject.ts"],"names":[],"mappings":"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","sourcesContent":["import type { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { DataBuffer } from \"core/Buffers/dataBuffer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { Nullable } from \"core/types\";\r\n\r\n/**\r\n * Defines the base object used for fluid rendering.\r\n * It is based on a list of vertices (particles)\r\n */\r\nexport abstract class FluidRenderingObject {\r\n protected _scene: Scene;\r\n protected _engine: Engine;\r\n protected _effectsAreDirty: boolean;\r\n protected _depthEffectWrapper: Nullable<EffectWrapper>;\r\n protected _thicknessEffectWrapper: Nullable<EffectWrapper>;\r\n\r\n /** Defines the priority of the object. Objects will be rendered in ascending order of priority */\r\n public priority = 0;\r\n\r\n protected _particleSize = 0.1;\r\n\r\n /** Observable triggered when the size of the particle is changed */\r\n public onParticleSizeChanged = new Observable<FluidRenderingObject>();\r\n\r\n /** Gets or sets the size of the particle */\r\n public get particleSize() {\r\n return this._particleSize;\r\n }\r\n\r\n public set particleSize(size: number) {\r\n if (size === this._particleSize) {\r\n return;\r\n }\r\n\r\n this._particleSize = size;\r\n this.onParticleSizeChanged.notifyObservers(this);\r\n }\r\n\r\n /** Defines the alpha value of a particle */\r\n public particleThicknessAlpha = 0.05;\r\n\r\n /** Indicates if the object uses instancing or not */\r\n public get useInstancing() {\r\n return !this.indexBuffer;\r\n }\r\n\r\n private _useVelocity = false;\r\n\r\n /** Indicates if velocity of particles should be used when rendering the object. The vertex buffer set must contain a \"velocity\" buffer for this to work! */\r\n public get useVelocity() {\r\n return this._useVelocity;\r\n }\r\n\r\n public set useVelocity(use: boolean) {\r\n if (this._useVelocity === use || !this._hasVelocity()) {\r\n return;\r\n }\r\n\r\n this._useVelocity = use;\r\n this._effectsAreDirty = true;\r\n }\r\n\r\n private _hasVelocity() {\r\n return !!this.vertexBuffers?.velocity;\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers\r\n */\r\n public abstract get vertexBuffers(): { [key: string]: VertexBuffer };\r\n\r\n /**\r\n * Gets the index buffer (or null if the object is using instancing)\r\n */\r\n public get indexBuffer(): Nullable<DataBuffer> {\r\n return null;\r\n }\r\n\r\n /**\r\n * @returns the name of the class\r\n */\r\n public getClassName(): string {\r\n return \"FluidRenderingObject\";\r\n }\r\n\r\n /**\r\n * Instantiates a fluid rendering object\r\n * @param scene The scene the object is part of\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n this._effectsAreDirty = true;\r\n this._depthEffectWrapper = null;\r\n this._thicknessEffectWrapper = null;\r\n }\r\n\r\n protected _createEffects(): void {\r\n const uniformNames = [\"view\", \"projection\", \"particleRadius\", \"size\"];\r\n const attributeNames = [\"position\", \"offset\"];\r\n const defines: string[] = [];\r\n\r\n this._effectsAreDirty = false;\r\n\r\n if (this.useVelocity) {\r\n attributeNames.push(\"velocity\");\r\n defines.push(\"#define FLUIDRENDERING_VELOCITY\");\r\n }\r\n\r\n if (this._scene.useRightHandedSystem) {\r\n defines.push(\"#define FLUIDRENDERING_RHS\");\r\n }\r\n\r\n this._depthEffectWrapper = new EffectWrapper({\r\n engine: this._engine,\r\n useShaderStore: true,\r\n vertexShader: \"fluidRenderingParticleDepth\",\r\n fragmentShader: \"fluidRenderingParticleDepth\",\r\n attributeNames,\r\n uniformNames,\r\n samplerNames: [],\r\n defines,\r\n });\r\n\r\n uniformNames.push(\"particleAlpha\");\r\n\r\n this._thicknessEffectWrapper = new EffectWrapper({\r\n engine: this._engine,\r\n useShaderStore: true,\r\n vertexShader: \"fluidRenderingParticleThickness\",\r\n fragmentShader: \"fluidRenderingParticleThickness\",\r\n attributeNames: [\"position\", \"offset\"],\r\n uniformNames,\r\n samplerNames: [],\r\n });\r\n }\r\n\r\n /**\r\n * Indicates if the object is ready to be rendered\r\n * @returns True if everything is ready for the object to be rendered, otherwise false\r\n */\r\n public isReady(): boolean {\r\n if (this._effectsAreDirty) {\r\n this._createEffects();\r\n }\r\n\r\n if (!this._depthEffectWrapper || !this._thicknessEffectWrapper) {\r\n return false;\r\n }\r\n\r\n const depthEffect = this._depthEffectWrapper._drawWrapper.effect!;\r\n const thicknessEffect = this._thicknessEffectWrapper._drawWrapper.effect!;\r\n\r\n return depthEffect.isReady() && thicknessEffect.isReady();\r\n }\r\n\r\n /**\r\n * Gets the number of particles (vertices) of this object\r\n * @returns The number of particles\r\n */\r\n public abstract get numParticles(): number;\r\n\r\n /**\r\n * Render the depth texture for this object\r\n */\r\n public renderDepthTexture(): void {\r\n const numParticles = this.numParticles;\r\n\r\n if (!this._depthEffectWrapper || numParticles === 0) {\r\n return;\r\n }\r\n\r\n const depthDrawWrapper = this._depthEffectWrapper._drawWrapper;\r\n const depthEffect = depthDrawWrapper.effect!;\r\n\r\n this._engine.enableEffect(depthDrawWrapper);\r\n this._engine.bindBuffers(this.vertexBuffers, this.indexBuffer, depthEffect);\r\n\r\n depthEffect.setMatrix(\"view\", this._scene.getViewMatrix());\r\n depthEffect.setMatrix(\"projection\", this._scene.getProjectionMatrix());\r\n depthEffect.setFloat2(\"size\", this._particleSize, this._particleSize);\r\n depthEffect.setFloat(\"particleRadius\", this._particleSize / 2);\r\n\r\n if (this.useInstancing) {\r\n this._engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, numParticles);\r\n } else {\r\n this._engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, numParticles);\r\n }\r\n }\r\n\r\n /**\r\n * Render the thickness texture for this object\r\n */\r\n public renderThicknessTexture(): void {\r\n const numParticles = this.numParticles;\r\n\r\n if (!this._thicknessEffectWrapper || numParticles === 0) {\r\n return;\r\n }\r\n\r\n const thicknessDrawWrapper = this._thicknessEffectWrapper._drawWrapper;\r\n const thicknessEffect = thicknessDrawWrapper.effect!;\r\n\r\n this._engine.setAlphaMode(Constants.ALPHA_ONEONE);\r\n this._engine.setDepthWrite(false);\r\n\r\n this._engine.enableEffect(thicknessDrawWrapper);\r\n this._engine.bindBuffers(this.vertexBuffers, this.indexBuffer, thicknessEffect);\r\n\r\n thicknessEffect.setMatrix(\"view\", this._scene.getViewMatrix());\r\n thicknessEffect.setMatrix(\"projection\", this._scene.getProjectionMatrix());\r\n thicknessEffect.setFloat(\"particleAlpha\", this.particleThicknessAlpha);\r\n thicknessEffect.setFloat2(\"size\", this._particleSize, this._particleSize);\r\n\r\n if (this.useInstancing) {\r\n this._engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, numParticles);\r\n } else {\r\n this._engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, numParticles);\r\n }\r\n\r\n this._engine.setDepthWrite(true);\r\n this._engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n /**\r\n * Render the diffuse texture for this object\r\n */\r\n public renderDiffuseTexture(): void {\r\n // do nothing by default\r\n }\r\n\r\n /**\r\n * Releases the ressources used by the class\r\n */\r\n public dispose(): void {\r\n this._depthEffectWrapper?.dispose();\r\n this._thicknessEffectWrapper?.dispose();\r\n }\r\n}\r\n"]}
@@ -70,11 +70,10 @@ export class FluidRenderingObjectCustomParticles extends FluidRenderingObject {
70
70
  * @returns True if everything is ready for the object to be rendered, otherwise false
71
71
  */
72
72
  isReady() {
73
- var _a, _b;
74
73
  if (!this._vertexBuffers["offset"]) {
75
74
  this._vertexBuffers["offset"] = new VertexBuffer(this._engine, [0, 0, 1, 0, 0, 1, 1, 1], "offset", false, false, 2);
76
75
  }
77
- return super.isReady() && ((_b = (_a = this._diffuseEffectWrapper) === null || _a === void 0 ? void 0 : _a.effect.isReady()) !== null && _b !== void 0 ? _b : false);
76
+ return super.isReady() && (this._diffuseEffectWrapper?.effect.isReady() ?? false);
78
77
  }
79
78
  /**
80
79
  * Gets the number of particles in this object
@@ -118,9 +117,8 @@ export class FluidRenderingObjectCustomParticles extends FluidRenderingObject {
118
117
  * Releases the ressources used by the class
119
118
  */
120
119
  dispose() {
121
- var _a;
122
120
  super.dispose();
123
- (_a = this._diffuseEffectWrapper) === null || _a === void 0 ? void 0 : _a.dispose();
121
+ this._diffuseEffectWrapper?.dispose();
124
122
  for (const name in this._vertexBuffers) {
125
123
  this._vertexBuffers[name].dispose();
126
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fluidRenderingObjectCustomParticles.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.ts"],"names":[],"mappings":"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","sourcesContent":["import { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { FloatArray, Nullable } from \"core/types\";\r\n\r\nimport { FluidRenderingObject } from \"./fluidRenderingObject\";\r\n\r\n/**\r\n * Defines a rendering object based on a list of custom buffers\r\n * The list must contain at least a \"position\" buffer!\r\n */\r\nexport class FluidRenderingObjectCustomParticles extends FluidRenderingObject {\r\n private _numParticles: number;\r\n private _diffuseEffectWrapper: Nullable<EffectWrapper>;\r\n private _vertexBuffers: { [key: string]: VertexBuffer };\r\n\r\n /**\r\n * @returns the name of the class\r\n */\r\n public getClassName(): string {\r\n return \"FluidRenderingObjectCustomParticles\";\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers\r\n */\r\n public get vertexBuffers(): { [key: string]: VertexBuffer } {\r\n return this._vertexBuffers;\r\n }\r\n\r\n /**\r\n * Creates a new instance of the class\r\n * @param scene The scene the particles should be rendered into\r\n * @param buffers The list of buffers (must contain at least one \"position\" buffer!). Note that you don't have to pass all (or any!) buffers at once in the constructor, you can use the addBuffers method to add more later.\r\n * @param numParticles Number of vertices to take into account from the buffers\r\n */\r\n constructor(scene: Scene, buffers: { [key: string]: FloatArray }, numParticles: number) {\r\n super(scene);\r\n\r\n this._numParticles = numParticles;\r\n this._diffuseEffectWrapper = null;\r\n this._vertexBuffers = {};\r\n\r\n this.addBuffers(buffers);\r\n }\r\n\r\n /**\r\n * Add some new buffers\r\n * @param buffers List of buffers\r\n */\r\n public addBuffers(buffers: { [key: string]: FloatArray }) {\r\n for (const name in buffers) {\r\n let stride: number | undefined;\r\n let instanced = true;\r\n\r\n switch (name) {\r\n case \"velocity\":\r\n stride = 3;\r\n break;\r\n case \"offset\":\r\n instanced = false;\r\n break;\r\n }\r\n\r\n this._vertexBuffers[name] = new VertexBuffer(this._engine, buffers[name], name, true, false, stride, instanced);\r\n }\r\n }\r\n\r\n protected _createEffects(): void {\r\n super._createEffects();\r\n\r\n const uniformNames = [\"view\", \"projection\", \"size\"];\r\n const attributeNames = [\"position\", \"offset\", \"color\"];\r\n\r\n this._diffuseEffectWrapper = new EffectWrapper({\r\n engine: this._engine,\r\n useShaderStore: true,\r\n vertexShader: \"fluidRenderingParticleDiffuse\",\r\n fragmentShader: \"fluidRenderingParticleDiffuse\",\r\n attributeNames,\r\n uniformNames,\r\n samplerNames: [],\r\n });\r\n }\r\n\r\n /**\r\n * Indicates if the object is ready to be rendered\r\n * @returns True if everything is ready for the object to be rendered, otherwise false\r\n */\r\n public isReady(): boolean {\r\n if (!this._vertexBuffers[\"offset\"]) {\r\n this._vertexBuffers[\"offset\"] = new VertexBuffer(this._engine, [0, 0, 1, 0, 0, 1, 1, 1], \"offset\", false, false, 2);\r\n }\r\n\r\n return super.isReady() && (this._diffuseEffectWrapper?.effect!.isReady() ?? false);\r\n }\r\n\r\n /**\r\n * Gets the number of particles in this object\r\n * @returns The number of particles\r\n */\r\n public get numParticles(): number {\r\n return this._numParticles;\r\n }\r\n\r\n /**\r\n * Sets the number of particles in this object\r\n * @param num The number of particles to take into account\r\n */\r\n public setNumParticles(num: number) {\r\n this._numParticles = num;\r\n }\r\n\r\n /**\r\n * Render the diffuse texture for this object\r\n */\r\n public renderDiffuseTexture(): void {\r\n const numParticles = this.numParticles;\r\n\r\n if (!this._diffuseEffectWrapper || numParticles === 0) {\r\n return;\r\n }\r\n\r\n const diffuseDrawWrapper = this._diffuseEffectWrapper._drawWrapper;\r\n const diffuseEffect = diffuseDrawWrapper.effect!;\r\n\r\n this._engine.enableEffect(diffuseDrawWrapper);\r\n this._engine.bindBuffers(this.vertexBuffers, this.indexBuffer, diffuseEffect);\r\n\r\n diffuseEffect.setMatrix(\"view\", this._scene.getViewMatrix());\r\n diffuseEffect.setMatrix(\"projection\", this._scene.getProjectionMatrix());\r\n if (this._particleSize !== null) {\r\n diffuseEffect.setFloat2(\"size\", this._particleSize, this._particleSize);\r\n }\r\n\r\n if (this.useInstancing) {\r\n this._engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, numParticles);\r\n } else {\r\n this._engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, numParticles);\r\n }\r\n }\r\n\r\n /**\r\n * Releases the ressources used by the class\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this._diffuseEffectWrapper?.dispose();\r\n\r\n for (const name in this._vertexBuffers) {\r\n this._vertexBuffers[name].dispose();\r\n }\r\n\r\n this._vertexBuffers = {};\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fluidRenderingObjectCustomParticles.js","sourceRoot":"","sources":["../../../../../dev/core/src/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.ts"],"names":[],"mappings":"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","sourcesContent":["import { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer\";\r\nimport type { Scene } from \"core/scene\";\r\nimport type { FloatArray, Nullable } from \"core/types\";\r\n\r\nimport { FluidRenderingObject } from \"./fluidRenderingObject\";\r\n\r\n/**\r\n * Defines a rendering object based on a list of custom buffers\r\n * The list must contain at least a \"position\" buffer!\r\n */\r\nexport class FluidRenderingObjectCustomParticles extends FluidRenderingObject {\r\n private _numParticles: number;\r\n private _diffuseEffectWrapper: Nullable<EffectWrapper>;\r\n private _vertexBuffers: { [key: string]: VertexBuffer };\r\n\r\n /**\r\n * @returns the name of the class\r\n */\r\n public getClassName(): string {\r\n return \"FluidRenderingObjectCustomParticles\";\r\n }\r\n\r\n /**\r\n * Gets the vertex buffers\r\n */\r\n public get vertexBuffers(): { [key: string]: VertexBuffer } {\r\n return this._vertexBuffers;\r\n }\r\n\r\n /**\r\n * Creates a new instance of the class\r\n * @param scene The scene the particles should be rendered into\r\n * @param buffers The list of buffers (must contain at least one \"position\" buffer!). Note that you don't have to pass all (or any!) buffers at once in the constructor, you can use the addBuffers method to add more later.\r\n * @param numParticles Number of vertices to take into account from the buffers\r\n */\r\n constructor(scene: Scene, buffers: { [key: string]: FloatArray }, numParticles: number) {\r\n super(scene);\r\n\r\n this._numParticles = numParticles;\r\n this._diffuseEffectWrapper = null;\r\n this._vertexBuffers = {};\r\n\r\n this.addBuffers(buffers);\r\n }\r\n\r\n /**\r\n * Add some new buffers\r\n * @param buffers List of buffers\r\n */\r\n public addBuffers(buffers: { [key: string]: FloatArray }) {\r\n for (const name in buffers) {\r\n let stride: number | undefined;\r\n let instanced = true;\r\n\r\n switch (name) {\r\n case \"velocity\":\r\n stride = 3;\r\n break;\r\n case \"offset\":\r\n instanced = false;\r\n break;\r\n }\r\n\r\n this._vertexBuffers[name] = new VertexBuffer(this._engine, buffers[name], name, true, false, stride, instanced);\r\n }\r\n }\r\n\r\n protected _createEffects(): void {\r\n super._createEffects();\r\n\r\n const uniformNames = [\"view\", \"projection\", \"size\"];\r\n const attributeNames = [\"position\", \"offset\", \"color\"];\r\n\r\n this._diffuseEffectWrapper = new EffectWrapper({\r\n engine: this._engine,\r\n useShaderStore: true,\r\n vertexShader: \"fluidRenderingParticleDiffuse\",\r\n fragmentShader: \"fluidRenderingParticleDiffuse\",\r\n attributeNames,\r\n uniformNames,\r\n samplerNames: [],\r\n });\r\n }\r\n\r\n /**\r\n * Indicates if the object is ready to be rendered\r\n * @returns True if everything is ready for the object to be rendered, otherwise false\r\n */\r\n public isReady(): boolean {\r\n if (!this._vertexBuffers[\"offset\"]) {\r\n this._vertexBuffers[\"offset\"] = new VertexBuffer(this._engine, [0, 0, 1, 0, 0, 1, 1, 1], \"offset\", false, false, 2);\r\n }\r\n\r\n return super.isReady() && (this._diffuseEffectWrapper?.effect!.isReady() ?? false);\r\n }\r\n\r\n /**\r\n * Gets the number of particles in this object\r\n * @returns The number of particles\r\n */\r\n public get numParticles(): number {\r\n return this._numParticles;\r\n }\r\n\r\n /**\r\n * Sets the number of particles in this object\r\n * @param num The number of particles to take into account\r\n */\r\n public setNumParticles(num: number) {\r\n this._numParticles = num;\r\n }\r\n\r\n /**\r\n * Render the diffuse texture for this object\r\n */\r\n public renderDiffuseTexture(): void {\r\n const numParticles = this.numParticles;\r\n\r\n if (!this._diffuseEffectWrapper || numParticles === 0) {\r\n return;\r\n }\r\n\r\n const diffuseDrawWrapper = this._diffuseEffectWrapper._drawWrapper;\r\n const diffuseEffect = diffuseDrawWrapper.effect!;\r\n\r\n this._engine.enableEffect(diffuseDrawWrapper);\r\n this._engine.bindBuffers(this.vertexBuffers, this.indexBuffer, diffuseEffect);\r\n\r\n diffuseEffect.setMatrix(\"view\", this._scene.getViewMatrix());\r\n diffuseEffect.setMatrix(\"projection\", this._scene.getProjectionMatrix());\r\n if (this._particleSize !== null) {\r\n diffuseEffect.setFloat2(\"size\", this._particleSize, this._particleSize);\r\n }\r\n\r\n if (this.useInstancing) {\r\n this._engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, numParticles);\r\n } else {\r\n this._engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, numParticles);\r\n }\r\n }\r\n\r\n /**\r\n * Releases the ressources used by the class\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this._diffuseEffectWrapper?.dispose();\r\n\r\n for (const name in this._vertexBuffers) {\r\n this._vertexBuffers[name].dispose();\r\n }\r\n\r\n this._vertexBuffers = {};\r\n }\r\n}\r\n"]}
@@ -359,7 +359,7 @@ export class FluidRenderingTargetRenderer {
359
359
  this._samples = 1;
360
360
  this._scene = scene;
361
361
  this._engine = scene.getEngine();
362
- this._camera = camera !== null && camera !== void 0 ? camera : scene.activeCamera;
362
+ this._camera = camera ?? scene.activeCamera;
363
363
  this._needInitialization = true;
364
364
  this._bgDepthTexture = null;
365
365
  this._invProjectionMatrix = new Matrix();
@@ -372,22 +372,21 @@ export class FluidRenderingTargetRenderer {
372
372
  }
373
373
  /** @internal */
374
374
  _initialize() {
375
- var _a, _b, _c;
376
375
  this.dispose();
377
376
  this._needInitialization = false;
378
- const depthWidth = (_a = this._depthMapSize) !== null && _a !== void 0 ? _a : this._engine.getRenderWidth();
377
+ const depthWidth = this._depthMapSize ?? this._engine.getRenderWidth();
379
378
  const depthHeight = this._depthMapSize !== null ? Math.round((this._depthMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth()) : this._engine.getRenderHeight();
380
379
  this._depthRenderTarget = new FluidRenderingTextures("Depth", this._scene, depthWidth, depthHeight, depthWidth, depthHeight, 1, 7, 1, 7, false, this._camera, true, this._samples);
381
380
  this._initializeRenderTarget(this._depthRenderTarget);
382
381
  if (this.generateDiffuseTexture) {
383
- const diffuseWidth = (_b = this._diffuseMapSize) !== null && _b !== void 0 ? _b : this._engine.getRenderWidth();
382
+ const diffuseWidth = this._diffuseMapSize ?? this._engine.getRenderWidth();
384
383
  const diffuseHeight = this._diffuseMapSize !== null
385
384
  ? Math.round((this._diffuseMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth())
386
385
  : this._engine.getRenderHeight();
387
386
  this._diffuseRenderTarget = new FluidRenderingTextures("Diffuse", this._scene, diffuseWidth, diffuseHeight, 0, 0, 0, 5, 0, 5, true, this._camera, true, this._samples);
388
387
  this._initializeRenderTarget(this._diffuseRenderTarget);
389
388
  }
390
- const thicknessWidth = (_c = this._thicknessMapSize) !== null && _c !== void 0 ? _c : this._engine.getRenderWidth();
389
+ const thicknessWidth = this._thicknessMapSize ?? this._engine.getRenderWidth();
391
390
  const thicknessHeight = this._thicknessMapSize !== null
392
391
  ? Math.round((this._thicknessMapSize * this._engine.getRenderHeight()) / this._engine.getRenderWidth())
393
392
  : this._engine.getRenderHeight();
@@ -430,7 +429,6 @@ export class FluidRenderingTargetRenderer {
430
429
  renderTarget.initialize();
431
430
  }
432
431
  _createLiquidRenderingPostProcess() {
433
- var _a;
434
432
  const engine = this._scene.getEngine();
435
433
  const uniformNames = [
436
434
  "viewMatrix",
@@ -456,7 +454,7 @@ export class FluidRenderingTargetRenderer {
456
454
  defines.push("#define FLUIDRENDERING_RHS");
457
455
  }
458
456
  if (this._environmentMap !== null) {
459
- const envMap = (_a = this._environmentMap) !== null && _a !== void 0 ? _a : this._scene.environmentTexture;
457
+ const envMap = this._environmentMap ?? this._scene.environmentTexture;
460
458
  if (envMap) {
461
459
  samplerNames.push("reflectionSampler");
462
460
  defines.push("#define FLUIDRENDERING_ENVIRONMENT");
@@ -502,7 +500,6 @@ export class FluidRenderingTargetRenderer {
502
500
  this._renderPostProcess.updateEffect(defines.join("\n"));
503
501
  this._renderPostProcess.samples = this._samples;
504
502
  this._renderPostProcess.onApplyObservable.add((effect) => {
505
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
506
503
  this._invProjectionMatrix.copyFrom(this._scene.getProjectionMatrix());
507
504
  this._invProjectionMatrix.invert();
508
505
  if (engine.isWebGPU) {
@@ -511,26 +508,26 @@ export class FluidRenderingTargetRenderer {
511
508
  if (!this._depthRenderTarget.enableBlur) {
512
509
  effect.setTexture("depthSampler", this._depthRenderTarget.texture);
513
510
  if (engine.isWebGPU) {
514
- effect.setTextureSampler("depthSamplerSampler", (_b = (_a = this._depthRenderTarget.texture) === null || _a === void 0 ? void 0 : _a.getInternalTexture()) !== null && _b !== void 0 ? _b : null);
511
+ effect.setTextureSampler("depthSamplerSampler", this._depthRenderTarget.texture?.getInternalTexture() ?? null);
515
512
  }
516
513
  }
517
514
  else {
518
515
  effect.setTexture("depthSampler", this._depthRenderTarget.textureBlur);
519
516
  if (engine.isWebGPU) {
520
- effect.setTextureSampler("depthSamplerSampler", (_d = (_c = this._depthRenderTarget.textureBlur) === null || _c === void 0 ? void 0 : _c.getInternalTexture()) !== null && _d !== void 0 ? _d : null);
517
+ effect.setTextureSampler("depthSamplerSampler", this._depthRenderTarget.textureBlur?.getInternalTexture() ?? null);
521
518
  }
522
519
  }
523
520
  if (this._diffuseRenderTarget) {
524
521
  if (!this._diffuseRenderTarget.enableBlur) {
525
522
  effect.setTexture("diffuseSampler", this._diffuseRenderTarget.texture);
526
523
  if (engine.isWebGPU) {
527
- effect.setTextureSampler("diffuseSamplerSampler", (_f = (_e = this._diffuseRenderTarget.texture) === null || _e === void 0 ? void 0 : _e.getInternalTexture()) !== null && _f !== void 0 ? _f : null);
524
+ effect.setTextureSampler("diffuseSamplerSampler", this._diffuseRenderTarget.texture?.getInternalTexture() ?? null);
528
525
  }
529
526
  }
530
527
  else {
531
528
  effect.setTexture("diffuseSampler", this._diffuseRenderTarget.textureBlur);
532
529
  if (engine.isWebGPU) {
533
- effect.setTextureSampler("diffuseSamplerSampler", (_h = (_g = this._diffuseRenderTarget.textureBlur) === null || _g === void 0 ? void 0 : _g.getInternalTexture()) !== null && _h !== void 0 ? _h : null);
530
+ effect.setTextureSampler("diffuseSamplerSampler", this._diffuseRenderTarget.textureBlur?.getInternalTexture() ?? null);
534
531
  }
535
532
  }
536
533
  }
@@ -541,30 +538,30 @@ export class FluidRenderingTargetRenderer {
541
538
  effect.setFloat("thickness", this.minimumThickness);
542
539
  effect._bindTexture("bgDepthSampler", this._bgDepthTexture);
543
540
  if (engine.isWebGPU) {
544
- effect.setTextureSampler("bgDepthSamplerSampler", (_j = this._bgDepthTexture) !== null && _j !== void 0 ? _j : null);
541
+ effect.setTextureSampler("bgDepthSamplerSampler", this._bgDepthTexture ?? null);
545
542
  }
546
543
  }
547
544
  else {
548
545
  if (!this._thicknessRenderTarget.enableBlur) {
549
546
  effect.setTexture("thicknessSampler", this._thicknessRenderTarget.texture);
550
547
  if (engine.isWebGPU) {
551
- effect.setTextureSampler("thicknessSamplerSampler", (_l = (_k = this._thicknessRenderTarget.texture) === null || _k === void 0 ? void 0 : _k.getInternalTexture()) !== null && _l !== void 0 ? _l : null);
548
+ effect.setTextureSampler("thicknessSamplerSampler", this._thicknessRenderTarget.texture?.getInternalTexture() ?? null);
552
549
  }
553
550
  }
554
551
  else {
555
552
  effect.setTexture("thicknessSampler", this._thicknessRenderTarget.textureBlur);
556
553
  if (engine.isWebGPU) {
557
- effect.setTextureSampler("thicknessSamplerSampler", (_o = (_m = this._thicknessRenderTarget.textureBlur) === null || _m === void 0 ? void 0 : _m.getInternalTexture()) !== null && _o !== void 0 ? _o : null);
554
+ effect.setTextureSampler("thicknessSamplerSampler", this._thicknessRenderTarget.textureBlur?.getInternalTexture() ?? null);
558
555
  }
559
556
  }
560
557
  effect.setFloat("minimumThickness", this.minimumThickness);
561
558
  }
562
559
  if (this._environmentMap !== null) {
563
- const envMap = (_p = this._environmentMap) !== null && _p !== void 0 ? _p : this._scene.environmentTexture;
560
+ const envMap = this._environmentMap ?? this._scene.environmentTexture;
564
561
  if (envMap) {
565
562
  effect.setTexture("reflectionSampler", envMap);
566
563
  if (engine.isWebGPU) {
567
- effect.setTextureSampler("reflectionSamplerSampler", (_q = envMap === null || envMap === void 0 ? void 0 : envMap.getInternalTexture()) !== null && _q !== void 0 ? _q : null);
564
+ effect.setTextureSampler("reflectionSamplerSampler", envMap?.getInternalTexture() ?? null);
568
565
  }
569
566
  }
570
567
  }
@@ -588,10 +585,10 @@ export class FluidRenderingTargetRenderer {
588
585
  texture = this._depthRenderTarget.enableBlur ? this._depthRenderTarget.textureBlur : this._depthRenderTarget.texture;
589
586
  break;
590
587
  case FluidRenderingDebug.ThicknessTexture:
591
- texture = (_s = (_r = this._thicknessRenderTarget) === null || _r === void 0 ? void 0 : _r.texture) !== null && _s !== void 0 ? _s : null;
588
+ texture = this._thicknessRenderTarget?.texture ?? null;
592
589
  break;
593
590
  case FluidRenderingDebug.ThicknessBlurredTexture:
594
- texture = ((_t = this._thicknessRenderTarget) === null || _t === void 0 ? void 0 : _t.enableBlur) ? (_v = (_u = this._thicknessRenderTarget) === null || _u === void 0 ? void 0 : _u.textureBlur) !== null && _v !== void 0 ? _v : null : (_x = (_w = this._thicknessRenderTarget) === null || _w === void 0 ? void 0 : _w.texture) !== null && _x !== void 0 ? _x : null;
591
+ texture = this._thicknessRenderTarget?.enableBlur ? this._thicknessRenderTarget?.textureBlur ?? null : this._thicknessRenderTarget?.texture ?? null;
595
592
  break;
596
593
  case FluidRenderingDebug.DiffuseTexture:
597
594
  if (this._diffuseRenderTarget) {
@@ -602,7 +599,7 @@ export class FluidRenderingTargetRenderer {
602
599
  if (this._debugFeature !== FluidRenderingDebug.Normals) {
603
600
  effect.setTexture("debugSampler", texture);
604
601
  if (engine.isWebGPU) {
605
- effect.setTextureSampler("debugSamplerSampler", (_y = texture === null || texture === void 0 ? void 0 : texture.getInternalTexture()) !== null && _y !== void 0 ? _y : null);
602
+ effect.setTextureSampler("debugSamplerSampler", texture?.getInternalTexture() ?? null);
606
603
  }
607
604
  }
608
605
  }
@@ -610,18 +607,17 @@ export class FluidRenderingTargetRenderer {
610
607
  }
611
608
  /** @internal */
612
609
  _clearTargets() {
613
- var _a, _b, _c;
614
- if ((_a = this._depthRenderTarget) === null || _a === void 0 ? void 0 : _a.renderTarget) {
610
+ if (this._depthRenderTarget?.renderTarget) {
615
611
  this._engine.bindFramebuffer(this._depthRenderTarget.renderTarget);
616
612
  this._engine.clear(this._depthClearColor, true, true, false);
617
613
  this._engine.unBindFramebuffer(this._depthRenderTarget.renderTarget);
618
614
  }
619
- if ((_b = this._diffuseRenderTarget) === null || _b === void 0 ? void 0 : _b.renderTarget) {
615
+ if (this._diffuseRenderTarget?.renderTarget) {
620
616
  this._engine.bindFramebuffer(this._diffuseRenderTarget.renderTarget);
621
617
  this._engine.clear(this._thicknessClearColor, true, true, false);
622
618
  this._engine.unBindFramebuffer(this._diffuseRenderTarget.renderTarget);
623
619
  }
624
- if ((_c = this._thicknessRenderTarget) === null || _c === void 0 ? void 0 : _c.renderTarget) {
620
+ if (this._thicknessRenderTarget?.renderTarget) {
625
621
  this._engine.bindFramebuffer(this._thicknessRenderTarget.renderTarget);
626
622
  // we don't clear the depth buffer because it is the depth buffer that is coming from the scene and that we reuse in the thickness rendering pass
627
623
  this._engine.clear(this._thicknessClearColor, true, false, false);
@@ -630,7 +626,6 @@ export class FluidRenderingTargetRenderer {
630
626
  }
631
627
  /** @internal */
632
628
  _render(fluidObject) {
633
- var _a, _b, _c, _d, _e, _f;
634
629
  if (this._needInitialization || !fluidObject.isReady()) {
635
630
  return;
636
631
  }
@@ -640,30 +635,30 @@ export class FluidRenderingTargetRenderer {
640
635
  this._engine.setDepthWrite(true);
641
636
  this._engine.setAlphaMode(0);
642
637
  // Render the particles in the depth texture
643
- if ((_a = this._depthRenderTarget) === null || _a === void 0 ? void 0 : _a.renderTarget) {
638
+ if (this._depthRenderTarget?.renderTarget) {
644
639
  this._engine.bindFramebuffer(this._depthRenderTarget.renderTarget);
645
640
  fluidObject.renderDepthTexture();
646
641
  this._engine.unbindInstanceAttributes();
647
642
  this._engine.unBindFramebuffer(this._depthRenderTarget.renderTarget);
648
643
  }
649
644
  // Render the particles in the diffuse texture
650
- if ((_b = this._diffuseRenderTarget) === null || _b === void 0 ? void 0 : _b.renderTarget) {
645
+ if (this._diffuseRenderTarget?.renderTarget) {
651
646
  this._engine.bindFramebuffer(this._diffuseRenderTarget.renderTarget);
652
647
  fluidObject.renderDiffuseTexture();
653
648
  this._engine.unbindInstanceAttributes();
654
649
  this._engine.unBindFramebuffer(this._diffuseRenderTarget.renderTarget);
655
650
  }
656
651
  // Render the particles in the thickness texture
657
- if ((_c = this._thicknessRenderTarget) === null || _c === void 0 ? void 0 : _c.renderTarget) {
652
+ if (this._thicknessRenderTarget?.renderTarget) {
658
653
  this._engine.bindFramebuffer(this._thicknessRenderTarget.renderTarget);
659
654
  fluidObject.renderThicknessTexture();
660
655
  this._engine.unbindInstanceAttributes();
661
656
  this._engine.unBindFramebuffer(this._thicknessRenderTarget.renderTarget);
662
657
  }
663
658
  // Run the blur post processes
664
- (_d = this._depthRenderTarget) === null || _d === void 0 ? void 0 : _d.applyBlurPostProcesses();
665
- (_e = this._diffuseRenderTarget) === null || _e === void 0 ? void 0 : _e.applyBlurPostProcesses();
666
- (_f = this._thicknessRenderTarget) === null || _f === void 0 ? void 0 : _f.applyBlurPostProcesses();
659
+ this._depthRenderTarget?.applyBlurPostProcesses();
660
+ this._diffuseRenderTarget?.applyBlurPostProcesses();
661
+ this._thicknessRenderTarget?.applyBlurPostProcesses();
667
662
  if (currentRenderTarget) {
668
663
  this._engine.bindFramebuffer(currentRenderTarget);
669
664
  }
@@ -673,19 +668,18 @@ export class FluidRenderingTargetRenderer {
673
668
  * @param onlyPostProcesses If true, releases only the ressources used by the render post processes
674
669
  */
675
670
  dispose(onlyPostProcesses = false) {
676
- var _a, _b, _c, _d;
677
671
  if (!onlyPostProcesses) {
678
- (_a = this._depthRenderTarget) === null || _a === void 0 ? void 0 : _a.dispose();
672
+ this._depthRenderTarget?.dispose();
679
673
  this._depthRenderTarget = null;
680
- (_b = this._diffuseRenderTarget) === null || _b === void 0 ? void 0 : _b.dispose();
674
+ this._diffuseRenderTarget?.dispose();
681
675
  this._diffuseRenderTarget = null;
682
- (_c = this._thicknessRenderTarget) === null || _c === void 0 ? void 0 : _c.dispose();
676
+ this._thicknessRenderTarget?.dispose();
683
677
  this._thicknessRenderTarget = null;
684
678
  }
685
679
  if (this._renderPostProcess && this._camera) {
686
680
  this._camera.detachPostProcess(this._renderPostProcess);
687
681
  }
688
- (_d = this._renderPostProcess) === null || _d === void 0 ? void 0 : _d.dispose();
682
+ this._renderPostProcess?.dispose();
689
683
  this._renderPostProcess = null;
690
684
  this._needInitialization = false;
691
685
  }