@onerjs/core 8.42.7 → 8.42.9

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 (327) hide show
  1. package/Animations/animatable.core.js +1 -1
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animatorAvatar.js +2 -2
  4. package/Animations/animatorAvatar.js.map +1 -1
  5. package/Animations/runtimeAnimation.js +1 -1
  6. package/Animations/runtimeAnimation.js.map +1 -1
  7. package/Audio/audioSceneComponent.js +1 -2
  8. package/Audio/audioSceneComponent.js.map +1 -1
  9. package/AudioV2/audioUtils.d.ts +23 -0
  10. package/AudioV2/audioUtils.js +37 -0
  11. package/AudioV2/audioUtils.js.map +1 -1
  12. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
  13. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
  14. package/AudioV2/webAudio/webAudioEngine.js +1 -1
  15. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  16. package/AudioV2/webAudio/webAudioStaticSound.js +3 -2
  17. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  18. package/AudioV2/webAudio/webAudioStreamingSound.js +10 -3
  19. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  20. package/Behaviors/Meshes/followBehavior.js +1 -1
  21. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  22. package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
  23. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  24. package/Bones/boneLookController.js +1 -1
  25. package/Bones/boneLookController.js.map +1 -1
  26. package/Buffers/buffer.js +1 -1
  27. package/Buffers/buffer.js.map +1 -1
  28. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
  29. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  30. package/Cameras/camera.js +2 -2
  31. package/Cameras/camera.js.map +1 -1
  32. package/Engines/AbstractEngine/abstractEngine.renderPass.js +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -1
  34. package/Engines/Extensions/engine.query.js +1 -1
  35. package/Engines/Extensions/engine.query.js.map +1 -1
  36. package/Engines/Processors/shaderProcessor.js +2 -3
  37. package/Engines/Processors/shaderProcessor.js.map +1 -1
  38. package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
  39. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  40. package/Engines/WebGPU/Extensions/engine.debugging.d.ts +87 -0
  41. package/Engines/WebGPU/Extensions/engine.debugging.js +123 -31
  42. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  43. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  44. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  45. package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
  46. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  47. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
  48. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  49. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
  50. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  51. package/Engines/WebGPU/webgpuTextureManager.js +20 -6
  52. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  53. package/Engines/abstractEngine.js +2 -2
  54. package/Engines/abstractEngine.js.map +1 -1
  55. package/Engines/engine.common.js +2 -2
  56. package/Engines/engine.common.js.map +1 -1
  57. package/Engines/engine.js +0 -1
  58. package/Engines/engine.js.map +1 -1
  59. package/Engines/thinEngine.functions.js +1 -1
  60. package/Engines/thinEngine.functions.js.map +1 -1
  61. package/Engines/thinEngine.js +4 -5
  62. package/Engines/thinEngine.js.map +1 -1
  63. package/Engines/thinNativeEngine.js +2 -5
  64. package/Engines/thinNativeEngine.js.map +1 -1
  65. package/Engines/thinWebGPUEngine.d.ts +6 -4
  66. package/Engines/thinWebGPUEngine.js +49 -25
  67. package/Engines/thinWebGPUEngine.js.map +1 -1
  68. package/Engines/webgpuEngine.d.ts +2 -1
  69. package/Engines/webgpuEngine.js +18 -16
  70. package/Engines/webgpuEngine.js.map +1 -1
  71. package/FlowGraph/flowGraph.d.ts +1 -0
  72. package/FlowGraph/flowGraph.js.map +1 -1
  73. package/FlowGraph/flowGraphBlock.d.ts +1 -0
  74. package/FlowGraph/flowGraphBlock.js.map +1 -1
  75. package/FlowGraph/flowGraphContext.d.ts +1 -0
  76. package/FlowGraph/flowGraphContext.js.map +1 -1
  77. package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
  78. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  79. package/FrameGraph/Node/nodeRenderGraph.d.ts +12 -1
  80. package/FrameGraph/Node/nodeRenderGraph.js +36 -2
  81. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  82. package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
  83. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  84. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
  85. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  86. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
  87. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  88. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
  89. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +14 -0
  90. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  91. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
  92. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +20 -14
  93. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  94. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +3 -2
  95. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +38 -14
  96. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  97. package/Layers/glowLayer.js +1 -1
  98. package/Layers/glowLayer.js.map +1 -1
  99. package/Layers/highlightLayer.js +1 -1
  100. package/Layers/highlightLayer.js.map +1 -1
  101. package/Layers/selectionOutlineLayer.js +8 -0
  102. package/Layers/selectionOutlineLayer.js.map +1 -1
  103. package/Layers/thinSelectionOutlineLayer.js +15 -0
  104. package/Layers/thinSelectionOutlineLayer.js.map +1 -1
  105. package/Lights/Shadows/cascadedShadowGenerator.js +0 -1
  106. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  107. package/Lights/Shadows/shadowGenerator.d.ts +28 -1
  108. package/Lights/Shadows/shadowGenerator.js +77 -11
  109. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  110. package/Lights/lightingVolume.d.ts +1 -0
  111. package/Lights/lightingVolume.js +10 -2
  112. package/Lights/lightingVolume.js.map +1 -1
  113. package/Loading/sceneLoader.js +1 -1
  114. package/Loading/sceneLoader.js.map +1 -1
  115. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -1
  116. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
  118. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  119. package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
  120. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  121. package/Materials/Node/Blocks/cloudBlock.js +1 -1
  122. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/curveBlock.js +2 -3
  124. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  125. package/Materials/Node/nodeMaterial.js +1 -2
  126. package/Materials/Node/nodeMaterial.js.map +1 -1
  127. package/Materials/PBR/openpbrMaterial.js +3 -5
  128. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  129. package/Materials/PBR/pbrBaseMaterial.js +2 -3
  130. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  131. package/Materials/Textures/Procedurals/proceduralTexture.js +0 -1
  132. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  133. package/Materials/Textures/cubeTexture.js +1 -1
  134. package/Materials/Textures/cubeTexture.js.map +1 -1
  135. package/Materials/Textures/htmlElementTexture.js +2 -2
  136. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  137. package/Materials/Textures/multiRenderTarget.js +1 -1
  138. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  139. package/Materials/Textures/renderTargetTexture.js +13 -2
  140. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  141. package/Materials/effect.js +2 -1
  142. package/Materials/effect.js.map +1 -1
  143. package/Materials/materialHelper.functions.js +1 -1
  144. package/Materials/materialHelper.functions.js.map +1 -1
  145. package/Materials/multiMaterial.js +1 -1
  146. package/Materials/multiMaterial.js.map +1 -1
  147. package/Materials/standardMaterial.js +1 -2
  148. package/Materials/standardMaterial.js.map +1 -1
  149. package/Maths/math.geospatial.d.ts +17 -2
  150. package/Maths/math.geospatial.functions.d.ts +16 -2
  151. package/Maths/math.geospatial.functions.js +37 -4
  152. package/Maths/math.geospatial.functions.js.map +1 -1
  153. package/Maths/math.geospatial.js.map +1 -1
  154. package/Maths/math.path.js +1 -1
  155. package/Maths/math.path.js.map +1 -1
  156. package/Maths/math.scalar.functions.js +3 -3
  157. package/Maths/math.scalar.functions.js.map +1 -1
  158. package/Maths/math.vector.js +1 -1
  159. package/Maths/math.vector.js.map +1 -1
  160. package/Meshes/Builders/boxBuilder.js +1 -2
  161. package/Meshes/Builders/boxBuilder.js.map +1 -1
  162. package/Meshes/Builders/cylinderBuilder.js +2 -2
  163. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  164. package/Meshes/Builders/decalBuilder.js +1 -2
  165. package/Meshes/Builders/decalBuilder.js.map +1 -1
  166. package/Meshes/Builders/latheBuilder.js +2 -2
  167. package/Meshes/Builders/latheBuilder.js.map +1 -1
  168. package/Meshes/Builders/linesBuilder.js +11 -15
  169. package/Meshes/Builders/linesBuilder.js.map +1 -1
  170. package/Meshes/Builders/polygonBuilder.js +6 -6
  171. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  172. package/Meshes/Builders/polyhedronBuilder.js +2 -2
  173. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  174. package/Meshes/Builders/ribbonBuilder.js +6 -6
  175. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  176. package/Meshes/Builders/shapeBuilder.js +2 -3
  177. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  178. package/Meshes/Builders/tiledBoxBuilder.js +1 -1
  179. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  180. package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
  181. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  182. package/Meshes/GreasedLine/greasedLineMesh.js +1 -2
  183. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  184. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
  185. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  186. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -1
  187. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  188. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -1
  189. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  190. package/Meshes/Node/Blocks/extrudeGeometryBlock.d.ts +61 -0
  191. package/Meshes/Node/Blocks/extrudeGeometryBlock.js +297 -0
  192. package/Meshes/Node/Blocks/extrudeGeometryBlock.js.map +1 -0
  193. package/Meshes/Node/Blocks/mappingBlock.js +1 -1
  194. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  195. package/Meshes/Node/index.d.ts +1 -0
  196. package/Meshes/Node/index.js +1 -0
  197. package/Meshes/Node/index.js.map +1 -1
  198. package/Meshes/abstractMesh.d.ts +4 -0
  199. package/Meshes/abstractMesh.js +14 -10
  200. package/Meshes/abstractMesh.js.map +1 -1
  201. package/Meshes/csg.js +1 -1
  202. package/Meshes/csg.js.map +1 -1
  203. package/Meshes/csg2.js +1 -1
  204. package/Meshes/csg2.js.map +1 -1
  205. package/Meshes/geodesicMesh.js +11 -13
  206. package/Meshes/geodesicMesh.js.map +1 -1
  207. package/Meshes/geometry.js +2 -2
  208. package/Meshes/geometry.js.map +1 -1
  209. package/Meshes/groundMesh.js +7 -7
  210. package/Meshes/groundMesh.js.map +1 -1
  211. package/Meshes/mesh.d.ts +2 -0
  212. package/Meshes/mesh.js +21 -7
  213. package/Meshes/mesh.js.map +1 -1
  214. package/Meshes/mesh.vertexData.js +22 -22
  215. package/Meshes/mesh.vertexData.js.map +1 -1
  216. package/Meshes/meshSimplification.js +1 -1
  217. package/Meshes/meshSimplification.js.map +1 -1
  218. package/Meshes/polygonMesh.js +1 -1
  219. package/Meshes/polygonMesh.js.map +1 -1
  220. package/Meshes/trailMesh.js +1 -1
  221. package/Meshes/trailMesh.js.map +1 -1
  222. package/Misc/HighDynamicRange/hdr.js +4 -6
  223. package/Misc/HighDynamicRange/hdr.js.map +1 -1
  224. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  225. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  226. package/Misc/basisWorker.js +1 -1
  227. package/Misc/basisWorker.js.map +1 -1
  228. package/Misc/environmentTextureTools.js +1 -1
  229. package/Misc/environmentTextureTools.js.map +1 -1
  230. package/Misc/meshExploder.js +1 -2
  231. package/Misc/meshExploder.js.map +1 -1
  232. package/Misc/tga.js +2 -2
  233. package/Misc/tga.js.map +1 -1
  234. package/Misc/timer.js +4 -2
  235. package/Misc/timer.js.map +1 -1
  236. package/Misc/tools.d.ts +7 -0
  237. package/Misc/tools.js +25 -7
  238. package/Misc/tools.js.map +1 -1
  239. package/Misc/webRequest.d.ts +34 -3
  240. package/Misc/webRequest.js +107 -24
  241. package/Misc/webRequest.js.map +1 -1
  242. package/Morph/morphTargetManager.js +1 -1
  243. package/Morph/morphTargetManager.js.map +1 -1
  244. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +1 -1
  245. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  246. package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +11 -1
  247. package/Particles/Node/Blocks/particleSourceTextureBlock.js +25 -11
  248. package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
  249. package/Particles/Node/nodeParticleSystemSet.helper.js +3 -3
  250. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  251. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  252. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  253. package/Particles/computeShaderParticleSystem.js +2 -0
  254. package/Particles/computeShaderParticleSystem.js.map +1 -1
  255. package/Particles/gpuParticleSystem.d.ts +14 -0
  256. package/Particles/gpuParticleSystem.js +94 -12
  257. package/Particles/gpuParticleSystem.js.map +1 -1
  258. package/Particles/particleSystem.js +4 -1
  259. package/Particles/particleSystem.js.map +1 -1
  260. package/Particles/pointsCloudSystem.js +46 -47
  261. package/Particles/pointsCloudSystem.js.map +1 -1
  262. package/Particles/solidParticleSystem.js +5 -6
  263. package/Particles/solidParticleSystem.js.map +1 -1
  264. package/Particles/thinParticleSystem.js +3 -4
  265. package/Particles/thinParticleSystem.js.map +1 -1
  266. package/Particles/webgl2ParticleSystem.js +2 -1
  267. package/Particles/webgl2ParticleSystem.js.map +1 -1
  268. package/Physics/v1/Plugins/ammoJSPlugin.js +0 -8
  269. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  270. package/Physics/v2/characterController.js +4 -8
  271. package/Physics/v2/characterController.js.map +1 -1
  272. package/Physics/v2/ragdoll.js +1 -2
  273. package/Physics/v2/ragdoll.js.map +1 -1
  274. package/PostProcesses/postProcess.js +3 -3
  275. package/PostProcesses/postProcess.js.map +1 -1
  276. package/PostProcesses/thinDepthOfFieldEffect.js +2 -2
  277. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  278. package/Probes/reflectionProbe.js +0 -1
  279. package/Probes/reflectionProbe.js.map +1 -1
  280. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -5
  281. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  282. package/Rendering/depthRenderer.js +0 -11
  283. package/Rendering/depthRenderer.js.map +1 -1
  284. package/Rendering/depthRendererSceneComponent.js +1 -1
  285. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  286. package/Rendering/geometryBufferRenderer.js +0 -1
  287. package/Rendering/geometryBufferRenderer.js.map +1 -1
  288. package/Rendering/objectRenderer.js +7 -5
  289. package/Rendering/objectRenderer.js.map +1 -1
  290. package/Rendering/thinDepthPeelingRenderer.js +1 -1
  291. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  292. package/Rendering/utilityLayerRenderer.js +1 -1
  293. package/Rendering/utilityLayerRenderer.js.map +1 -1
  294. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +18 -8
  295. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  296. package/Shaders/gpuRenderParticles.vertex.js +4 -0
  297. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  298. package/Shaders/gpuUpdateParticles.vertex.js +15 -3
  299. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  300. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +18 -7
  301. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  302. package/ShadersWGSL/gpuUpdateParticles.compute.js +16 -1
  303. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  304. package/ShadersWGSL/lightingVolume.compute.js +1 -1
  305. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  306. package/Sprites/spriteManager.js +4 -4
  307. package/Sprites/spriteManager.js.map +1 -1
  308. package/XR/features/WebXRAnchorSystem.js +2 -2
  309. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  310. package/XR/features/WebXRHandTracking.js +1 -1
  311. package/XR/features/WebXRHandTracking.js.map +1 -1
  312. package/XR/features/WebXRNearInteraction.js +1 -1
  313. package/XR/features/WebXRNearInteraction.js.map +1 -1
  314. package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
  315. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  316. package/XR/motionController/webXROculusTouchMotionController.js +1 -1
  317. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  318. package/XR/webXRFeaturesManager.js +1 -1
  319. package/XR/webXRFeaturesManager.js.map +1 -1
  320. package/assetContainer.js +1 -1
  321. package/assetContainer.js.map +1 -1
  322. package/package.json +1 -1
  323. package/scene.d.ts +16 -0
  324. package/scene.js +28 -0
  325. package/scene.js.map +1 -1
  326. package/sceneComponent.js +1 -1
  327. package/sceneComponent.js.map +1 -1
@@ -58,6 +58,20 @@ export class ParticleTextureSourceBlock extends NodeParticleBlock {
58
58
  this._url = value.url || "";
59
59
  this._textureDataUrl = "";
60
60
  }
61
+ /**
62
+ * Gets the texture set on this block.
63
+ * This value will not be serialized.
64
+ */
65
+ get texture() {
66
+ return this.sourceTexture;
67
+ }
68
+ /**
69
+ * Sets the texture to be used by this block.
70
+ * This value will not be serialized.
71
+ */
72
+ set texture(value) {
73
+ this.sourceTexture = value;
74
+ }
61
75
  /**
62
76
  * Create a new ParticleTextureSourceBlock
63
77
  * @param name defines the block name
@@ -89,7 +103,7 @@ export class ParticleTextureSourceBlock extends NodeParticleBlock {
89
103
  /**
90
104
  * Gets the texture output component
91
105
  */
92
- get texture() {
106
+ get textureOutput() {
93
107
  return this._outputs[0];
94
108
  }
95
109
  /**
@@ -97,13 +111,13 @@ export class ParticleTextureSourceBlock extends NodeParticleBlock {
97
111
  * @returns a promise that resolves to the texture content, including width, height, and pixel data
98
112
  */
99
113
  async extractTextureContentAsync() {
100
- if (!this.texture._storedValue && !this._sourceTexture) {
114
+ if (!this.textureOutput._storedValue && !this._sourceTexture) {
101
115
  return null;
102
116
  }
103
117
  if (this._cachedData) {
104
118
  return this._cachedData;
105
119
  }
106
- const texture = this.texture._storedValue || this._sourceTexture;
120
+ const texture = this.textureOutput._storedValue || this._sourceTexture;
107
121
  return await new Promise((resolve, reject) => {
108
122
  if (!texture.isReady()) {
109
123
  texture.onLoadObservable.addOnce(async () => {
@@ -172,38 +186,38 @@ export class ParticleTextureSourceBlock extends NodeParticleBlock {
172
186
  const tex = new Texture(url, state.scene, undefined, invertY);
173
187
  this._copyTextureProperties(this._sourceTexture, tex);
174
188
  this._clonedTextures.push(tex);
175
- this.texture._storedValue = tex;
189
+ this.textureOutput._storedValue = tex;
176
190
  return;
177
191
  }
178
192
  // No URL available - use the source texture directly as fallback
179
193
  // This may not render correctly but avoids breaking completely
180
- this.texture._storedValue = this._sourceTexture;
194
+ this.textureOutput._storedValue = this._sourceTexture;
181
195
  return;
182
196
  }
183
197
  // Same engine: clone works correctly and preserves all properties
184
198
  const cloned = this._sourceTexture.clone();
185
199
  if (cloned) {
186
200
  this._clonedTextures.push(cloned);
187
- this.texture._storedValue = cloned;
201
+ this.textureOutput._storedValue = cloned;
188
202
  }
189
203
  else {
190
- this.texture._storedValue = this._sourceTexture;
204
+ this.textureOutput._storedValue = this._sourceTexture;
191
205
  }
192
206
  return;
193
207
  }
194
208
  if (!this._textureDataUrl && !this._url) {
195
- this.texture._storedValue = null;
209
+ this.textureOutput._storedValue = null;
196
210
  return;
197
211
  }
198
212
  if (this._textureDataUrl) {
199
213
  const tex = new Texture(this._textureDataUrl, state.scene, undefined, this.invertY);
200
214
  this._clonedTextures.push(tex);
201
- this.texture._storedValue = tex;
215
+ this.textureOutput._storedValue = tex;
202
216
  return;
203
217
  }
204
218
  const tex = new Texture(this._url, state.scene, undefined, this.invertY);
205
219
  this._clonedTextures.push(tex);
206
- this.texture._storedValue = tex;
220
+ this.textureOutput._storedValue = tex;
207
221
  }
208
222
  /**
209
223
  * Serializes this block
@@ -241,7 +255,7 @@ export class ParticleTextureSourceBlock extends NodeParticleBlock {
241
255
  tex.dispose();
242
256
  }
243
257
  this._clonedTextures = [];
244
- this.texture._storedValue = null;
258
+ this.textureOutput._storedValue = null;
245
259
  // Never dispose _sourceTexture - it's owned by the caller
246
260
  super.dispose();
247
261
  }
@@ -1 +1 @@
1
- {"version":3,"file":"particleSourceTextureBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleSourceTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport type { NodeParticleBuildState } from \"../nodeParticleBuildState\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { BaseTexture } from \"../../../Materials/Textures/baseTexture\";\r\nimport type { ProceduralTexture } from \"../../../Materials/Textures/Procedurals/proceduralTexture\";\r\n\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { TextureTools } from \"core/Misc/textureTools\";\r\n\r\n/**\r\n * Interface used to define texture data\r\n */\r\nexport interface INodeParticleTextureData {\r\n /** Width of the texture in pixels */\r\n width: number;\r\n /** Height of the texture in pixels */\r\n height: number;\r\n /** RGBA pixel data */\r\n data: Uint8ClampedArray;\r\n}\r\n\r\n/**\r\n * Block used to provide a texture for particles in a particle system\r\n */\r\nexport class ParticleTextureSourceBlock extends NodeParticleBlock {\r\n private _url: string = \"\";\r\n private _textureDataUrl: string = \"\";\r\n private _sourceTexture: Nullable<BaseTexture> = null;\r\n private _cachedData: Nullable<INodeParticleTextureData> = null;\r\n private _clonedTextures: BaseTexture[] = [];\r\n\r\n /**\r\n * Gets or sets the strenght of the flow map effect\r\n */\r\n public invertY = true;\r\n\r\n /**\r\n * Indicates if the texture data should be serialized as a base64 string.\r\n */\r\n public serializedCachedData: boolean = false;\r\n\r\n /**\r\n * Gets or sets the URL of the texture to be used by this block.\r\n */\r\n public get url(): string {\r\n return this._url;\r\n }\r\n\r\n public set url(value: string) {\r\n if (this._url === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._url = value;\r\n this._textureDataUrl = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets or sets the data URL of the texture to be used by this block.\r\n * This is a base64 encoded string representing the texture data.\r\n */\r\n public get textureDataUrl(): string {\r\n return this._textureDataUrl;\r\n }\r\n\r\n public set textureDataUrl(value: string) {\r\n if (this._textureDataUrl === value) {\r\n return;\r\n }\r\n\r\n this._cachedData = null;\r\n this._textureDataUrl = value;\r\n this._url = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets the texture directly set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get sourceTexture(): Nullable<BaseTexture> {\r\n return this._sourceTexture;\r\n }\r\n\r\n /**\r\n * Directly sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set sourceTexture(value: Nullable<BaseTexture>) {\r\n if (this._sourceTexture === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._sourceTexture = value;\r\n this._url = (value as Texture).url || \"\";\r\n this._textureDataUrl = \"\";\r\n }\r\n\r\n /**\r\n * Create a new ParticleTextureSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerOutput(\"texture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleTextureSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the texture output component\r\n */\r\n public get texture(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the texture content as a promise\r\n * @returns a promise that resolves to the texture content, including width, height, and pixel data\r\n */\r\n async extractTextureContentAsync() {\r\n if (!this.texture._storedValue && !this._sourceTexture) {\r\n return null;\r\n }\r\n\r\n if (this._cachedData) {\r\n return this._cachedData;\r\n }\r\n\r\n const texture = this.texture._storedValue || this._sourceTexture;\r\n return await new Promise<\r\n Nullable<{\r\n width: number;\r\n height: number;\r\n data: Uint8ClampedArray;\r\n }>\r\n >((resolve, reject) => {\r\n if (!texture.isReady()) {\r\n texture.onLoadObservable.addOnce(async () => {\r\n try {\r\n this._cachedData = await this.extractTextureContentAsync();\r\n resolve(this._cachedData);\r\n } catch (e) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(e);\r\n }\r\n });\r\n return;\r\n }\r\n const size = texture.getSize();\r\n if (texture.getContent) {\r\n const proceduralTexture = texture as ProceduralTexture;\r\n proceduralTexture\r\n .getContent()\r\n // eslint-disable-next-line github/no-then\r\n ?.then((data) => {\r\n this._cachedData = {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)),\r\n };\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n } else {\r\n TextureTools.GetTextureDataAsync(texture, size.width, size.height)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n this._cachedData = {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data),\r\n };\r\n texture.dispose();\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Builds the block\r\n * @param state defines the current build state\r\n */\r\n public override _build(state: NodeParticleBuildState) {\r\n if (this._sourceTexture) {\r\n // The same NodeParticleSystemSet can be built into multiple scenes/engines\r\n // (original system scene, editor preview scene).\r\n // Textures are engine-specific, so we need to handle cross-engine cases.\r\n const sourceScene = this._sourceTexture.getScene?.();\r\n const sourceEngine = sourceScene?.getEngine?.();\r\n const targetEngine = state.scene.getEngine();\r\n\r\n if (sourceEngine && sourceEngine !== targetEngine) {\r\n // Cross-engine: recreate texture from URL if available, preserving invertY\r\n const url = (this._sourceTexture as Texture).url || this._url;\r\n if (url) {\r\n const invertY = (this._sourceTexture as Texture).invertY ?? this.invertY;\r\n const tex = new Texture(url, state.scene, undefined, invertY);\r\n this._copyTextureProperties(this._sourceTexture, tex);\r\n this._clonedTextures.push(tex);\r\n this.texture._storedValue = tex;\r\n return;\r\n }\r\n // No URL available - use the source texture directly as fallback\r\n // This may not render correctly but avoids breaking completely\r\n this.texture._storedValue = this._sourceTexture;\r\n return;\r\n }\r\n\r\n // Same engine: clone works correctly and preserves all properties\r\n const cloned = this._sourceTexture.clone();\r\n if (cloned) {\r\n this._clonedTextures.push(cloned);\r\n this.texture._storedValue = cloned;\r\n } else {\r\n this.texture._storedValue = this._sourceTexture;\r\n }\r\n return;\r\n }\r\n\r\n if (!this._textureDataUrl && !this._url) {\r\n this.texture._storedValue = null;\r\n return;\r\n }\r\n\r\n if (this._textureDataUrl) {\r\n const tex = new Texture(this._textureDataUrl, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.texture._storedValue = tex;\r\n return;\r\n }\r\n\r\n const tex = new Texture(this._url, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.texture._storedValue = tex;\r\n }\r\n\r\n /**\r\n * Serializes this block\r\n * @returns the serialization object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.url = this.url;\r\n serializationObject.serializedCachedData = this.serializedCachedData;\r\n serializationObject.invertY = this.invertY;\r\n\r\n if (this.serializedCachedData) {\r\n serializationObject.textureDataUrl = this.textureDataUrl;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes this block from a serialization object\r\n * @param serializationObject the serialization object\r\n */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.url = serializationObject.url;\r\n this.serializedCachedData = !!serializationObject.serializedCachedData;\r\n this.invertY = !!serializationObject.invertY;\r\n\r\n if (serializationObject.textureDataUrl) {\r\n this.textureDataUrl = serializationObject.textureDataUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the block and its associated resources\r\n */\r\n public override dispose(): void {\r\n // Dispose all cloned textures we created\r\n for (const tex of this._clonedTextures) {\r\n tex.dispose();\r\n }\r\n this._clonedTextures = [];\r\n this.texture._storedValue = null;\r\n // Never dispose _sourceTexture - it's owned by the caller\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Copies texture properties from source to target texture\r\n * @param source - The source texture to copy properties from\r\n * @param target - The target texture to copy properties to\r\n */\r\n private _copyTextureProperties(source: BaseTexture, target: BaseTexture): void {\r\n // BaseTexture properties\r\n target.hasAlpha = source.hasAlpha;\r\n target.level = source.level;\r\n target.coordinatesIndex = source.coordinatesIndex;\r\n target.coordinatesMode = source.coordinatesMode;\r\n target.wrapU = source.wrapU;\r\n target.wrapV = source.wrapV;\r\n target.wrapR = source.wrapR;\r\n target.anisotropicFilteringLevel = source.anisotropicFilteringLevel;\r\n\r\n // Texture-specific properties (if both are Texture instances)\r\n const sourceTexture = source as Texture;\r\n const targetTexture = target as Texture;\r\n if (sourceTexture.uOffset !== undefined && targetTexture.uOffset !== undefined) {\r\n targetTexture.uOffset = sourceTexture.uOffset;\r\n targetTexture.vOffset = sourceTexture.vOffset;\r\n targetTexture.uScale = sourceTexture.uScale;\r\n targetTexture.vScale = sourceTexture.vScale;\r\n targetTexture.uAng = sourceTexture.uAng;\r\n targetTexture.vAng = sourceTexture.vAng;\r\n targetTexture.wAng = sourceTexture.wAng;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleTextureSourceBlock\", ParticleTextureSourceBlock);\r\n"]}
1
+ {"version":3,"file":"particleSourceTextureBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/particleSourceTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeParticleConnectionPoint } from \"../nodeParticleBlockConnectionPoint\";\r\nimport type { NodeParticleBuildState } from \"../nodeParticleBuildState\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { BaseTexture } from \"../../../Materials/Textures/baseTexture\";\r\nimport type { ProceduralTexture } from \"../../../Materials/Textures/Procedurals/proceduralTexture\";\r\n\r\nimport { Texture } from \"core/Materials/Textures/texture\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"../Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { NodeParticleBlock } from \"../nodeParticleBlock\";\r\nimport { TextureTools } from \"core/Misc/textureTools\";\r\n\r\n/**\r\n * Interface used to define texture data\r\n */\r\nexport interface INodeParticleTextureData {\r\n /** Width of the texture in pixels */\r\n width: number;\r\n /** Height of the texture in pixels */\r\n height: number;\r\n /** RGBA pixel data */\r\n data: Uint8ClampedArray;\r\n}\r\n\r\n/**\r\n * Block used to provide a texture for particles in a particle system\r\n */\r\nexport class ParticleTextureSourceBlock extends NodeParticleBlock {\r\n private _url: string = \"\";\r\n private _textureDataUrl: string = \"\";\r\n private _sourceTexture: Nullable<BaseTexture> = null;\r\n private _cachedData: Nullable<INodeParticleTextureData> = null;\r\n private _clonedTextures: BaseTexture[] = [];\r\n\r\n /**\r\n * Gets or sets the strenght of the flow map effect\r\n */\r\n public invertY = true;\r\n\r\n /**\r\n * Indicates if the texture data should be serialized as a base64 string.\r\n */\r\n public serializedCachedData: boolean = false;\r\n\r\n /**\r\n * Gets or sets the URL of the texture to be used by this block.\r\n */\r\n public get url(): string {\r\n return this._url;\r\n }\r\n\r\n public set url(value: string) {\r\n if (this._url === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._url = value;\r\n this._textureDataUrl = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets or sets the data URL of the texture to be used by this block.\r\n * This is a base64 encoded string representing the texture data.\r\n */\r\n public get textureDataUrl(): string {\r\n return this._textureDataUrl;\r\n }\r\n\r\n public set textureDataUrl(value: string) {\r\n if (this._textureDataUrl === value) {\r\n return;\r\n }\r\n\r\n this._cachedData = null;\r\n this._textureDataUrl = value;\r\n this._url = \"\";\r\n this._sourceTexture = null;\r\n }\r\n\r\n /**\r\n * Gets the texture directly set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get sourceTexture(): Nullable<BaseTexture> {\r\n return this._sourceTexture;\r\n }\r\n\r\n /**\r\n * Directly sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set sourceTexture(value: Nullable<BaseTexture>) {\r\n if (this._sourceTexture === value) {\r\n return;\r\n }\r\n this._cachedData = null;\r\n this._sourceTexture = value;\r\n this._url = (value as Texture).url || \"\";\r\n this._textureDataUrl = \"\";\r\n }\r\n\r\n /**\r\n * Gets the texture set on this block.\r\n * This value will not be serialized.\r\n */\r\n public get texture(): Nullable<BaseTexture> {\r\n return this.sourceTexture;\r\n }\r\n\r\n /**\r\n * Sets the texture to be used by this block.\r\n * This value will not be serialized.\r\n */\r\n public set texture(value: Nullable<BaseTexture>) {\r\n this.sourceTexture = value;\r\n }\r\n\r\n /**\r\n * Create a new ParticleTextureSourceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this.registerOutput(\"texture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"ParticleTextureSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the texture output component\r\n */\r\n public get textureOutput(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the texture content as a promise\r\n * @returns a promise that resolves to the texture content, including width, height, and pixel data\r\n */\r\n async extractTextureContentAsync() {\r\n if (!this.textureOutput._storedValue && !this._sourceTexture) {\r\n return null;\r\n }\r\n\r\n if (this._cachedData) {\r\n return this._cachedData;\r\n }\r\n\r\n const texture = this.textureOutput._storedValue || this._sourceTexture;\r\n return await new Promise<\r\n Nullable<{\r\n width: number;\r\n height: number;\r\n data: Uint8ClampedArray;\r\n }>\r\n >((resolve, reject) => {\r\n if (!texture.isReady()) {\r\n texture.onLoadObservable.addOnce(async () => {\r\n try {\r\n this._cachedData = await this.extractTextureContentAsync();\r\n resolve(this._cachedData);\r\n } catch (e) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(e);\r\n }\r\n });\r\n return;\r\n }\r\n const size = texture.getSize();\r\n if (texture.getContent) {\r\n const proceduralTexture = texture as ProceduralTexture;\r\n proceduralTexture\r\n .getContent()\r\n // eslint-disable-next-line github/no-then\r\n ?.then((data) => {\r\n this._cachedData = {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)),\r\n };\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n } else {\r\n TextureTools.GetTextureDataAsync(texture, size.width, size.height)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n this._cachedData = {\r\n width: size.width,\r\n height: size.height,\r\n data: new Uint8ClampedArray(data),\r\n };\r\n texture.dispose();\r\n resolve(this._cachedData);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Builds the block\r\n * @param state defines the current build state\r\n */\r\n public override _build(state: NodeParticleBuildState) {\r\n if (this._sourceTexture) {\r\n // The same NodeParticleSystemSet can be built into multiple scenes/engines\r\n // (original system scene, editor preview scene).\r\n // Textures are engine-specific, so we need to handle cross-engine cases.\r\n const sourceScene = this._sourceTexture.getScene?.();\r\n const sourceEngine = sourceScene?.getEngine?.();\r\n const targetEngine = state.scene.getEngine();\r\n\r\n if (sourceEngine && sourceEngine !== targetEngine) {\r\n // Cross-engine: recreate texture from URL if available, preserving invertY\r\n const url = (this._sourceTexture as Texture).url || this._url;\r\n if (url) {\r\n const invertY = (this._sourceTexture as Texture).invertY ?? this.invertY;\r\n const tex = new Texture(url, state.scene, undefined, invertY);\r\n this._copyTextureProperties(this._sourceTexture, tex);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n return;\r\n }\r\n // No URL available - use the source texture directly as fallback\r\n // This may not render correctly but avoids breaking completely\r\n this.textureOutput._storedValue = this._sourceTexture;\r\n return;\r\n }\r\n\r\n // Same engine: clone works correctly and preserves all properties\r\n const cloned = this._sourceTexture.clone();\r\n if (cloned) {\r\n this._clonedTextures.push(cloned);\r\n this.textureOutput._storedValue = cloned;\r\n } else {\r\n this.textureOutput._storedValue = this._sourceTexture;\r\n }\r\n return;\r\n }\r\n\r\n if (!this._textureDataUrl && !this._url) {\r\n this.textureOutput._storedValue = null;\r\n return;\r\n }\r\n\r\n if (this._textureDataUrl) {\r\n const tex = new Texture(this._textureDataUrl, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n return;\r\n }\r\n\r\n const tex = new Texture(this._url, state.scene, undefined, this.invertY);\r\n this._clonedTextures.push(tex);\r\n this.textureOutput._storedValue = tex;\r\n }\r\n\r\n /**\r\n * Serializes this block\r\n * @returns the serialization object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.url = this.url;\r\n serializationObject.serializedCachedData = this.serializedCachedData;\r\n serializationObject.invertY = this.invertY;\r\n\r\n if (this.serializedCachedData) {\r\n serializationObject.textureDataUrl = this.textureDataUrl;\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes this block from a serialization object\r\n * @param serializationObject the serialization object\r\n */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.url = serializationObject.url;\r\n this.serializedCachedData = !!serializationObject.serializedCachedData;\r\n this.invertY = !!serializationObject.invertY;\r\n\r\n if (serializationObject.textureDataUrl) {\r\n this.textureDataUrl = serializationObject.textureDataUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the block and its associated resources\r\n */\r\n public override dispose(): void {\r\n // Dispose all cloned textures we created\r\n for (const tex of this._clonedTextures) {\r\n tex.dispose();\r\n }\r\n this._clonedTextures = [];\r\n this.textureOutput._storedValue = null;\r\n // Never dispose _sourceTexture - it's owned by the caller\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Copies texture properties from source to target texture\r\n * @param source - The source texture to copy properties from\r\n * @param target - The target texture to copy properties to\r\n */\r\n private _copyTextureProperties(source: BaseTexture, target: BaseTexture): void {\r\n // BaseTexture properties\r\n target.hasAlpha = source.hasAlpha;\r\n target.level = source.level;\r\n target.coordinatesIndex = source.coordinatesIndex;\r\n target.coordinatesMode = source.coordinatesMode;\r\n target.wrapU = source.wrapU;\r\n target.wrapV = source.wrapV;\r\n target.wrapR = source.wrapR;\r\n target.anisotropicFilteringLevel = source.anisotropicFilteringLevel;\r\n\r\n // Texture-specific properties (if both are Texture instances)\r\n const sourceTexture = source as Texture;\r\n const targetTexture = target as Texture;\r\n if (sourceTexture.uOffset !== undefined && targetTexture.uOffset !== undefined) {\r\n targetTexture.uOffset = sourceTexture.uOffset;\r\n targetTexture.vOffset = sourceTexture.vOffset;\r\n targetTexture.uScale = sourceTexture.uScale;\r\n targetTexture.vScale = sourceTexture.vScale;\r\n targetTexture.uAng = sourceTexture.uAng;\r\n targetTexture.vAng = sourceTexture.vAng;\r\n targetTexture.wAng = sourceTexture.wAng;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleTextureSourceBlock\", ParticleTextureSourceBlock);\r\n"]}
@@ -403,7 +403,7 @@ function _UpdateParticleBlockGroup(inputParticle, oldSystem, context) {
403
403
  * @returns The output of the group of blocks that represent the particle color update
404
404
  */
405
405
  function _UpdateParticleColorBlockGroup(inputParticle, colorGradients, context) {
406
- let colorCalculation = undefined;
406
+ let colorCalculation;
407
407
  if (colorGradients && colorGradients.length > 0) {
408
408
  if (context.colorGradientValue0Output === undefined) {
409
409
  throw new Error("Initial color gradient values not found in context.");
@@ -625,7 +625,7 @@ function _UpdateParticleFlowMapBlockGroup(inputParticle, flowMap, flowMapStrengt
625
625
  const flowMapTextureBlock = new ParticleTextureSourceBlock("Flow Map Texture");
626
626
  flowMapTextureBlock.serializedCachedData = true;
627
627
  flowMapTextureBlock.textureDataUrl = GenerateBase64StringFromPixelData(flowMap.data, { width: flowMap.width, height: flowMap.height }, true) ?? "";
628
- flowMapTextureBlock.texture.connectTo(updateFlowMapBlock.flowMap);
628
+ flowMapTextureBlock.textureOutput.connectTo(updateFlowMapBlock.flowMap);
629
629
  _CreateAndConnectInput("Flow Map Strength", flowMapStrength, updateFlowMapBlock.strength);
630
630
  return updateFlowMapBlock.output;
631
631
  }
@@ -968,6 +968,6 @@ function _CreateTextureBlock(texture) {
968
968
  // Texture - always use sourceTexture to preserve all texture options
969
969
  const textureBlock = new ParticleTextureSourceBlock("Texture");
970
970
  textureBlock.sourceTexture = texture;
971
- return textureBlock.texture;
971
+ return textureBlock.textureOutput;
972
972
  }
973
973
  //# sourceMappingURL=nodeParticleSystemSet.helper.js.map