@babylonjs/core 8.8.0 → 8.8.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 (409) hide show
  1. package/Actions/actionManager.js +2 -0
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Animations/animatable.core.js +1 -1
  4. package/Animations/animatable.core.js.map +1 -1
  5. package/Animations/animation.js +4 -2
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/audioEngine.d.ts +1 -1
  8. package/Audio/audioEngine.js +20 -10
  9. package/Audio/audioEngine.js.map +1 -1
  10. package/Audio/audioSceneComponent.js +2 -0
  11. package/Audio/audioSceneComponent.js.map +1 -1
  12. package/Audio/sound.js +2 -0
  13. package/Audio/sound.js.map +1 -1
  14. package/AudioV2/abstractAudio/audioEngineV2.js +8 -1
  15. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  16. package/AudioV2/abstractAudio/streamingSound.js +3 -1
  17. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  18. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +6 -2
  19. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  20. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +3 -0
  21. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
  22. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +1 -0
  23. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
  24. package/AudioV2/webAudio/webAudioEngine.js +5 -1
  25. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  26. package/AudioV2/webAudio/webAudioStaticSound.js +2 -0
  27. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  28. package/AudioV2/webAudio/webAudioStreamingSound.js +3 -0
  29. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  30. package/AudioV2/webAudio/webAudioUnmuteUI.js +1 -0
  31. package/AudioV2/webAudio/webAudioUnmuteUI.js.map +1 -1
  32. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +1 -0
  33. package/BakedVertexAnimation/vertexAnimationBaker.js +3 -1
  34. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  35. package/Buffers/buffer.nonFloatVertexBuffers.js +1 -0
  36. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  37. package/Buffers/storageBuffer.js +1 -1
  38. package/Buffers/storageBuffer.js.map +1 -1
  39. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +2 -0
  40. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +6 -1
  42. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
  43. package/Cameras/VR/vrExperienceHelper.js +2 -0
  44. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  45. package/Collisions/gpuPicker.js +9 -6
  46. package/Collisions/gpuPicker.js.map +1 -1
  47. package/Compute/computeShader.js +1 -1
  48. package/Compute/computeShader.js.map +1 -1
  49. package/Culling/Helper/boundingInfoHelper.js +3 -3
  50. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  51. package/Culling/Helper/computeShaderBoundingHelper.js +3 -1
  52. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  53. package/Culling/Helper/transformFeedbackBoundingHelper.js +3 -0
  54. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  55. package/Debug/debugLayer.js +1 -1
  56. package/Debug/debugLayer.js.map +1 -1
  57. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -0
  58. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  59. package/Engines/Extensions/engine.prefilteredCubeTexture.js +1 -0
  60. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  61. package/Engines/Extensions/engine.readTexture.js +1 -0
  62. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -0
  64. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.readTexture.js +1 -0
  66. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  67. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -0
  68. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  69. package/Engines/WebGPU/webgpuBufferManager.js +3 -1
  70. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -0
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuQuerySet.js +15 -9
  74. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  75. package/Engines/WebGPU/webgpuTextureManager.js +1 -0
  76. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  77. package/Engines/WebGPU/webgpuTimestampQuery.js +4 -2
  78. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTintWASM.js +1 -0
  80. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  81. package/Engines/abstractEngine.js +5 -2
  82. package/Engines/abstractEngine.js.map +1 -1
  83. package/Engines/constants.d.ts +23 -0
  84. package/Engines/constants.js +23 -0
  85. package/Engines/constants.js.map +1 -1
  86. package/Engines/engine.common.js +7 -1
  87. package/Engines/engine.common.js.map +1 -1
  88. package/Engines/engine.js +5 -3
  89. package/Engines/engine.js.map +1 -1
  90. package/Engines/engineFactory.js +1 -1
  91. package/Engines/engineFactory.js.map +1 -1
  92. package/Engines/nativeEngine.js +19 -11
  93. package/Engines/nativeEngine.js.map +1 -1
  94. package/Engines/thinEngine.d.ts +1 -0
  95. package/Engines/thinEngine.js +22 -18
  96. package/Engines/thinEngine.js.map +1 -1
  97. package/Engines/webgpuEngine.js +30 -11
  98. package/Engines/webgpuEngine.js.map +1 -1
  99. package/FlowGraph/flowGraphParser.js +2 -2
  100. package/FlowGraph/flowGraphParser.js.map +1 -1
  101. package/FrameGraph/Node/nodeRenderGraph.js +5 -1
  102. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  103. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -1
  104. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  105. package/FrameGraph/frameGraph.js +1 -1
  106. package/FrameGraph/frameGraph.js.map +1 -1
  107. package/Helpers/sceneHelpers.js +1 -3
  108. package/Helpers/sceneHelpers.js.map +1 -1
  109. package/Helpers/videoDome.js +1 -0
  110. package/Helpers/videoDome.js.map +1 -1
  111. package/Layers/thinEffectLayer.js +1 -0
  112. package/Layers/thinEffectLayer.js.map +1 -1
  113. package/LensFlares/lensFlareSystem.js +1 -0
  114. package/LensFlares/lensFlareSystem.js.map +1 -1
  115. package/Lights/Shadows/shadowGenerator.js +3 -2
  116. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  117. package/Lights/areaLight.js +2 -0
  118. package/Lights/areaLight.js.map +1 -1
  119. package/Loading/sceneLoader.js +56 -22
  120. package/Loading/sceneLoader.js.map +1 -1
  121. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +15 -1
  122. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +34 -7
  123. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  124. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +1 -0
  125. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -0
  127. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  128. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -0
  129. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -0
  131. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +1 -0
  133. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +1 -0
  135. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +1 -0
  137. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +9 -11
  139. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  140. package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -1
  141. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +6 -2
  143. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/Vertex/bonesBlock.js +1 -0
  145. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -0
  147. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  148. package/Materials/Node/nodeMaterial.js +11 -3
  149. package/Materials/Node/nodeMaterial.js.map +1 -1
  150. package/Materials/Node/nodeMaterialBuildState.js +1 -0
  151. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  152. package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -0
  153. package/Materials/PBR/pbrBRDFConfiguration.js +16 -0
  154. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  155. package/Materials/PBR/pbrBaseMaterial.d.ts +4 -0
  156. package/Materials/PBR/pbrBaseMaterial.js +12 -8
  157. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  158. package/Materials/PBR/pbrMaterial.d.ts +8 -0
  159. package/Materials/PBR/pbrMaterial.js +16 -0
  160. package/Materials/PBR/pbrMaterial.js.map +1 -1
  161. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +1 -0
  162. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  163. package/Materials/Textures/Loaders/basisTextureLoader.js +4 -0
  164. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  165. package/Materials/Textures/Loaders/envTextureLoader.js +1 -0
  166. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  167. package/Materials/Textures/Loaders/exrTextureLoader.js +2 -0
  168. package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -1
  169. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -0
  170. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  171. package/Materials/Textures/Loaders/textureLoaderManager.js +9 -9
  172. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
  173. package/Materials/Textures/Packer/packer.js +3 -1
  174. package/Materials/Textures/Packer/packer.js.map +1 -1
  175. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -0
  176. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  177. package/Materials/Textures/baseTexture.polynomial.js +1 -0
  178. package/Materials/Textures/baseTexture.polynomial.js.map +1 -1
  179. package/Materials/Textures/hdrCubeTexture.js +1 -0
  180. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  181. package/Materials/Textures/internalTexture.js +1 -0
  182. package/Materials/Textures/internalTexture.js.map +1 -1
  183. package/Materials/Textures/rawCubeTexture.js +3 -0
  184. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  185. package/Materials/Textures/renderTargetTexture.js +2 -0
  186. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  187. package/Materials/Textures/videoTexture.js +6 -0
  188. package/Materials/Textures/videoTexture.js.map +1 -1
  189. package/Materials/effect.js +2 -1
  190. package/Materials/effect.js.map +1 -1
  191. package/Materials/effect.webgl.functions.js +3 -1
  192. package/Materials/effect.webgl.functions.js.map +1 -1
  193. package/Materials/effectRenderer.js +1 -0
  194. package/Materials/effectRenderer.js.map +1 -1
  195. package/Materials/material.js +2 -1
  196. package/Materials/material.js.map +1 -1
  197. package/Materials/shaderMaterial.js +4 -2
  198. package/Materials/shaderMaterial.js.map +1 -1
  199. package/Meshes/Compression/dracoCodec.js +5 -1
  200. package/Meshes/Compression/dracoCodec.js.map +1 -1
  201. package/Meshes/Compression/dracoCompression.js +4 -3
  202. package/Meshes/Compression/dracoCompression.js.map +1 -1
  203. package/Meshes/Compression/dracoCompressionWorker.js +5 -2
  204. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  205. package/Meshes/Compression/dracoDecoder.js +5 -1
  206. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  207. package/Meshes/Compression/dracoEncoder.js +3 -2
  208. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  209. package/Meshes/Compression/meshoptCompression.js +18 -18
  210. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  211. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +14 -15
  212. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  213. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +20 -10
  214. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  215. package/Meshes/Node/Blocks/booleanGeometryBlock.js +1 -0
  216. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  217. package/Meshes/Node/nodeGeometry.js +5 -1
  218. package/Meshes/Node/nodeGeometry.js.map +1 -1
  219. package/Meshes/mesh.js +2 -2
  220. package/Meshes/mesh.js.map +1 -1
  221. package/Meshes/meshUVSpaceRenderer.js +1 -0
  222. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  223. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -0
  224. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  225. package/Misc/assetsManager.js +2 -1
  226. package/Misc/assetsManager.js.map +1 -1
  227. package/Misc/asyncLock.js +5 -2
  228. package/Misc/asyncLock.js.map +1 -1
  229. package/Misc/basis.js +9 -2
  230. package/Misc/basis.js.map +1 -1
  231. package/Misc/basisWorker.js +3 -1
  232. package/Misc/basisWorker.js.map +1 -1
  233. package/Misc/copyTextureToTexture.js +1 -0
  234. package/Misc/copyTextureToTexture.js.map +1 -1
  235. package/Misc/coroutine.js +2 -1
  236. package/Misc/coroutine.js.map +1 -1
  237. package/Misc/dataReader.js +3 -4
  238. package/Misc/dataReader.js.map +1 -1
  239. package/Misc/dumpTools.js +7 -1
  240. package/Misc/dumpTools.js.map +1 -1
  241. package/Misc/environmentTextureTools.d.ts +0 -2
  242. package/Misc/environmentTextureTools.js +20 -7
  243. package/Misc/environmentTextureTools.js.map +1 -1
  244. package/Misc/equirectangularCapture.js +2 -1
  245. package/Misc/equirectangularCapture.js.map +1 -1
  246. package/Misc/fileTools.js +2 -0
  247. package/Misc/fileTools.js.map +1 -1
  248. package/Misc/filesInput.js +5 -1
  249. package/Misc/filesInput.js.map +1 -1
  250. package/Misc/khronosTextureContainer2.js +10 -3
  251. package/Misc/khronosTextureContainer2.js.map +1 -1
  252. package/Misc/khronosTextureContainer2Worker.js +4 -1
  253. package/Misc/khronosTextureContainer2Worker.js.map +1 -1
  254. package/Misc/minMaxReducer.js +1 -0
  255. package/Misc/minMaxReducer.js.map +1 -1
  256. package/Misc/observable.extensions.js +3 -1
  257. package/Misc/observable.extensions.js.map +1 -1
  258. package/Misc/observable.js +2 -0
  259. package/Misc/observable.js.map +1 -1
  260. package/Misc/observableCoroutine.js +1 -0
  261. package/Misc/observableCoroutine.js.map +1 -1
  262. package/Misc/reflector.js +1 -0
  263. package/Misc/reflector.js.map +1 -1
  264. package/Misc/rgbdTextureTools.js +2 -1
  265. package/Misc/rgbdTextureTools.js.map +1 -1
  266. package/Misc/sceneSerializer.js +2 -2
  267. package/Misc/sceneSerializer.js.map +1 -1
  268. package/Misc/screenshotTools.js +9 -4
  269. package/Misc/screenshotTools.js.map +1 -1
  270. package/Misc/textureTools.js +2 -0
  271. package/Misc/textureTools.js.map +1 -1
  272. package/Misc/tools.internals.js +2 -1
  273. package/Misc/tools.internals.js.map +1 -1
  274. package/Misc/tools.js +9 -3
  275. package/Misc/tools.js.map +1 -1
  276. package/Misc/videoRecorder.js +1 -0
  277. package/Misc/videoRecorder.js.map +1 -1
  278. package/Misc/webRequest.fetch.js +2 -1
  279. package/Misc/webRequest.fetch.js.map +1 -1
  280. package/Misc/workerPool.js +3 -0
  281. package/Misc/workerPool.js.map +1 -1
  282. package/Particles/flowMap.js +1 -1
  283. package/Particles/flowMap.js.map +1 -1
  284. package/Particles/particleHelper.js +7 -0
  285. package/Particles/particleHelper.js.map +1 -1
  286. package/Particles/pointsCloudSystem.js +7 -7
  287. package/Particles/pointsCloudSystem.js.map +1 -1
  288. package/Particles/thinParticleSystem.js +2 -0
  289. package/Particles/thinParticleSystem.js.map +1 -1
  290. package/Physics/physicsHelper.js +2 -2
  291. package/Physics/physicsHelper.js.map +1 -1
  292. package/Physics/v1/Plugins/oimoJSPlugin.js +1 -1
  293. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  294. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  295. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  296. package/Rendering/GlobalIllumination/giRSMManager.js +1 -0
  297. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  298. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +1 -0
  299. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  300. package/Rendering/depthRenderer.js +1 -0
  301. package/Rendering/depthRenderer.js.map +1 -1
  302. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -1
  303. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  304. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  305. package/Rendering/geometryBufferRenderer.js +1 -0
  306. package/Rendering/geometryBufferRenderer.js.map +1 -1
  307. package/Rendering/iblCdfGenerator.js +4 -1
  308. package/Rendering/iblCdfGenerator.js.map +1 -1
  309. package/Shaders/ShadersInclude/lightFragment.js +5 -1
  310. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  311. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +12 -5
  312. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  313. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +3 -0
  314. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  315. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +21 -8
  316. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  317. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -0
  318. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  319. package/Shaders/ShadersInclude/pbrBlockReflectance.js +6 -6
  320. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  321. package/Shaders/ShadersInclude/pbrBlockReflectance0.js +2 -7
  322. package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  323. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +20 -16
  324. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  325. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +6 -8
  326. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  327. package/Shaders/ShadersInclude/pbrDebug.js +2 -2
  328. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  329. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -5
  330. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  331. package/Shaders/pbr.fragment.js +7 -3
  332. package/Shaders/pbr.fragment.js.map +1 -1
  333. package/ShadersWGSL/ShadersInclude/lightFragment.js +5 -1
  334. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  335. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +5 -5
  336. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  337. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +3 -0
  338. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  339. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +21 -8
  340. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  341. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -0
  342. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  343. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +6 -6
  344. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  345. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +2 -7
  346. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  347. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +22 -15
  348. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  349. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +6 -8
  350. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  351. package/ShadersWGSL/ShadersInclude/pbrDebug.js +2 -2
  352. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  353. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -7
  354. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  355. package/ShadersWGSL/pbr.fragment.js +7 -3
  356. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  357. package/Sprites/spriteManager.js +5 -1
  358. package/Sprites/spriteManager.js.map +1 -1
  359. package/Sprites/spriteRenderer.js +1 -0
  360. package/Sprites/spriteRenderer.js.map +1 -1
  361. package/XR/features/WebXRAnchorSystem.js +4 -3
  362. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  363. package/XR/features/WebXRDepthSensing.js +1 -1
  364. package/XR/features/WebXRDepthSensing.js.map +1 -1
  365. package/XR/features/WebXRHandTracking.js +4 -1
  366. package/XR/features/WebXRHandTracking.js.map +1 -1
  367. package/XR/features/WebXRHitTest.js +4 -1
  368. package/XR/features/WebXRHitTest.js.map +1 -1
  369. package/XR/features/WebXRHitTestLegacy.js +6 -5
  370. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  371. package/XR/features/WebXRImageTracking.js +2 -1
  372. package/XR/features/WebXRImageTracking.js.map +1 -1
  373. package/XR/features/WebXRLightEstimation.js +3 -0
  374. package/XR/features/WebXRLightEstimation.js.map +1 -1
  375. package/XR/features/WebXRNearInteraction.js +2 -0
  376. package/XR/features/WebXRNearInteraction.js.map +1 -1
  377. package/XR/features/WebXRPlaneDetector.js +2 -2
  378. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  379. package/XR/motionController/webXRAbstractMotionController.js +3 -2
  380. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  381. package/XR/motionController/webXRMicrosoftMixedRealityController.js +6 -6
  382. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  383. package/XR/motionController/webXRMotionControllerManager.js +15 -9
  384. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  385. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  386. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  387. package/XR/native/nativeXRFrame.js +1 -0
  388. package/XR/native/nativeXRFrame.js.map +1 -1
  389. package/XR/webXRDefaultExperience.js +10 -12
  390. package/XR/webXRDefaultExperience.js.map +1 -1
  391. package/XR/webXREnterExitUI.js +2 -1
  392. package/XR/webXREnterExitUI.js.map +1 -1
  393. package/XR/webXRExperienceHelper.js +5 -2
  394. package/XR/webXRExperienceHelper.js.map +1 -1
  395. package/XR/webXRFeaturesManager.js +1 -0
  396. package/XR/webXRFeaturesManager.js.map +1 -1
  397. package/XR/webXRInput.js +1 -0
  398. package/XR/webXRInput.js.map +1 -1
  399. package/XR/webXRInputSource.js +2 -0
  400. package/XR/webXRInputSource.js.map +1 -1
  401. package/XR/webXRManagedOutputCanvas.js +5 -1
  402. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  403. package/XR/webXRSessionManager.js +56 -60
  404. package/XR/webXRSessionManager.js.map +1 -1
  405. package/assetContainer.js +28 -28
  406. package/assetContainer.js.map +1 -1
  407. package/package.json +1 -1
  408. package/scene.js +5 -4
  409. package/scene.js.map +1 -1
@@ -52,8 +52,8 @@ export class GeometryTextureBlock extends NodeGeometryBlock {
52
52
  get texture() {
53
53
  return this._outputs[0];
54
54
  }
55
- _prepareImgToLoadAsync(url) {
56
- return new Promise((resolve, reject) => {
55
+ async _prepareImgToLoadAsync(url) {
56
+ return await new Promise((resolve, reject) => {
57
57
  const img = new Image();
58
58
  const canvas = document.createElement("canvas");
59
59
  const ctx = canvas.getContext("2d");
@@ -74,7 +74,7 @@ export class GeometryTextureBlock extends NodeGeometryBlock {
74
74
  };
75
75
  img.onerror = () => {
76
76
  this._data = null;
77
- reject();
77
+ reject(new Error("Failed to load image"));
78
78
  };
79
79
  img.src = url;
80
80
  });
@@ -90,32 +90,41 @@ export class GeometryTextureBlock extends NodeGeometryBlock {
90
90
  * @param imageFile defines the file to load data from
91
91
  * @returns a promise fulfilled when image data is loaded
92
92
  */
93
- loadTextureFromFileAsync(imageFile) {
94
- return this._prepareImgToLoadAsync(URL.createObjectURL(imageFile));
93
+ async loadTextureFromFileAsync(imageFile) {
94
+ return await this._prepareImgToLoadAsync(URL.createObjectURL(imageFile));
95
95
  }
96
96
  /**
97
97
  * Load the texture data
98
98
  * @param url defines the url to load data from
99
99
  * @returns a promise fulfilled when image data is loaded
100
100
  */
101
- loadTextureFromUrlAsync(url) {
102
- return this._prepareImgToLoadAsync(url);
101
+ async loadTextureFromUrlAsync(url) {
102
+ return await this._prepareImgToLoadAsync(url);
103
103
  }
104
104
  /**
105
105
  * Load the texture data
106
106
  * @param texture defines the source texture
107
107
  * @returns a promise fulfilled when image data is loaded
108
108
  */
109
- extractFromTextureAsync(texture) {
110
- return new Promise((resolve, reject) => {
109
+ async extractFromTextureAsync(texture) {
110
+ return await new Promise((resolve, reject) => {
111
111
  if (!texture.isReady()) {
112
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
112
113
  texture.onLoadObservable.addOnce(async () => {
113
- return this.extractFromTextureAsync(texture).then(resolve).catch(reject);
114
+ try {
115
+ await this.extractFromTextureAsync(texture);
116
+ resolve();
117
+ }
118
+ catch (e) {
119
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
120
+ reject(e);
121
+ }
114
122
  });
115
123
  return;
116
124
  }
117
125
  const size = texture.getSize();
118
126
  TextureTools.GetTextureDataAsync(texture, size.width, size.height)
127
+ // eslint-disable-next-line github/no-then
119
128
  .then((data) => {
120
129
  const floatArray = new Float32Array(data.length);
121
130
  for (let i = 0; i < data.length; i++) {
@@ -126,6 +135,7 @@ export class GeometryTextureBlock extends NodeGeometryBlock {
126
135
  this._height = size.height;
127
136
  resolve();
128
137
  })
138
+ // eslint-disable-next-line github/no-then
129
139
  .catch(reject);
130
140
  });
131
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"geometryTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Meshes/Node/Blocks/Textures/geometryTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../../Enums/nodeGeometryConnectionPointTypes\";\r\nimport type { INodeGeometryTextureData } from \"../../Interfaces/nodeGeometryTextureData\";\r\nimport { NodeGeometryBlock } from \"../../nodeGeometryBlock\";\r\nimport type { NodeGeometryConnectionPoint } from \"../../nodeGeometryBlockConnectionPoint\";\r\nimport type { Texture } from \"core/Materials/Textures/texture\";\r\nimport { TextureTools } from \"core/Misc/textureTools\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"core/Decorators/nodeDecorator\";\r\n/**\r\n * Block used to load texture data\r\n */\r\nexport class GeometryTextureBlock extends NodeGeometryBlock {\r\n private _data: Nullable<Float32Array> = null;\r\n private _width: number;\r\n private _height: number;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this block should serialize its cached data\r\n */\r\n @editableInPropertyPage(\"Serialize cached data\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public serializedCachedData = false;\r\n\r\n /**\r\n * Gets the texture data\r\n */\r\n public get textureData(): Nullable<Float32Array> {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Gets the texture width\r\n */\r\n public get textureWidth() {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Gets the texture height\r\n */\r\n public get textureHeight() {\r\n return this._height;\r\n }\r\n\r\n /**\r\n * Creates a new GeometryTextureBlock\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\", NodeGeometryBlockConnectionPointTypes.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 \"GeometryTextureBlock\";\r\n }\r\n\r\n /**\r\n * Gets the texture component\r\n */\r\n public get texture(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _prepareImgToLoadAsync(url: string) {\r\n return new Promise<void>((resolve, reject) => {\r\n const img = new Image();\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n img.onload = () => {\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n ctx!.drawImage(img, 0, 0);\r\n\r\n const imageData = ctx!.getImageData(0, 0, img.width, img.height);\r\n const pixels = imageData.data;\r\n const floatArray = new Float32Array(pixels.length);\r\n\r\n for (let i = 0; i < pixels.length; i++) {\r\n floatArray[i] = pixels[i] / 255.0;\r\n }\r\n\r\n this._data = floatArray;\r\n this._width = img.width;\r\n this._height = img.height;\r\n resolve();\r\n };\r\n\r\n img.onerror = () => {\r\n this._data = null;\r\n reject();\r\n };\r\n\r\n img.src = url;\r\n });\r\n }\r\n\r\n /**\r\n * Remove stored data\r\n */\r\n public cleanData() {\r\n this._data = null;\r\n }\r\n\r\n /**\r\n * Load the texture data\r\n * @param imageFile defines the file to load data from\r\n * @returns a promise fulfilled when image data is loaded\r\n */\r\n public loadTextureFromFileAsync(imageFile: File) {\r\n return this._prepareImgToLoadAsync(URL.createObjectURL(imageFile));\r\n }\r\n\r\n /**\r\n * Load the texture data\r\n * @param url defines the url to load data from\r\n * @returns a promise fulfilled when image data is loaded\r\n */\r\n public loadTextureFromUrlAsync(url: string) {\r\n return this._prepareImgToLoadAsync(url);\r\n }\r\n\r\n /**\r\n * Load the texture data\r\n * @param texture defines the source texture\r\n * @returns a promise fulfilled when image data is loaded\r\n */\r\n public extractFromTextureAsync(texture: Texture) {\r\n return new Promise<void>((resolve, reject) => {\r\n if (!texture.isReady()) {\r\n texture.onLoadObservable.addOnce(async () => {\r\n return this.extractFromTextureAsync(texture).then(resolve).catch(reject);\r\n });\r\n return;\r\n }\r\n const size = texture.getSize();\r\n TextureTools.GetTextureDataAsync(texture, size.width, size.height)\r\n .then((data) => {\r\n const floatArray = new Float32Array(data.length);\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n floatArray[i] = data[i] / 255.0;\r\n }\r\n this._data = floatArray;\r\n this._width = size.width;\r\n this._height = size.height;\r\n resolve();\r\n })\r\n .catch(reject);\r\n });\r\n }\r\n\r\n protected override _buildBlock() {\r\n if (!this._data) {\r\n this.texture._storedValue = null;\r\n return;\r\n }\r\n\r\n const textureData: INodeGeometryTextureData = {\r\n data: this._data,\r\n width: this._width,\r\n height: this._height,\r\n };\r\n\r\n this.texture._storedValue = textureData;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.width = this._width;\r\n serializationObject.height = this._height;\r\n serializationObject.serializedCachedData = this.serializedCachedData;\r\n if (this._data && this.serializedCachedData) {\r\n serializationObject.data = Array.from(this._data);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this._width = serializationObject.width;\r\n this._height = serializationObject.height;\r\n if (serializationObject.data) {\r\n this._data = new Float32Array(serializationObject.data);\r\n this.serializedCachedData = true;\r\n } else {\r\n this.serializedCachedData = !!serializationObject.serializedCachedData;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GeometryTextureBlock\", GeometryTextureBlock);\r\n"]}
1
+ {"version":3,"file":"geometryTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Meshes/Node/Blocks/Textures/geometryTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../../Enums/nodeGeometryConnectionPointTypes\";\r\nimport type { INodeGeometryTextureData } from \"../../Interfaces/nodeGeometryTextureData\";\r\nimport { NodeGeometryBlock } from \"../../nodeGeometryBlock\";\r\nimport type { NodeGeometryConnectionPoint } from \"../../nodeGeometryBlockConnectionPoint\";\r\nimport type { Texture } from \"core/Materials/Textures/texture\";\r\nimport { TextureTools } from \"core/Misc/textureTools\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"core/Decorators/nodeDecorator\";\r\n/**\r\n * Block used to load texture data\r\n */\r\nexport class GeometryTextureBlock extends NodeGeometryBlock {\r\n private _data: Nullable<Float32Array> = null;\r\n private _width: number;\r\n private _height: number;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this block should serialize its cached data\r\n */\r\n @editableInPropertyPage(\"Serialize cached data\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public serializedCachedData = false;\r\n\r\n /**\r\n * Gets the texture data\r\n */\r\n public get textureData(): Nullable<Float32Array> {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Gets the texture width\r\n */\r\n public get textureWidth() {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Gets the texture height\r\n */\r\n public get textureHeight() {\r\n return this._height;\r\n }\r\n\r\n /**\r\n * Creates a new GeometryTextureBlock\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\", NodeGeometryBlockConnectionPointTypes.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 \"GeometryTextureBlock\";\r\n }\r\n\r\n /**\r\n * Gets the texture component\r\n */\r\n public get texture(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private async _prepareImgToLoadAsync(url: string) {\r\n return await new Promise<void>((resolve, reject) => {\r\n const img = new Image();\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n img.onload = () => {\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n ctx!.drawImage(img, 0, 0);\r\n\r\n const imageData = ctx!.getImageData(0, 0, img.width, img.height);\r\n const pixels = imageData.data;\r\n const floatArray = new Float32Array(pixels.length);\r\n\r\n for (let i = 0; i < pixels.length; i++) {\r\n floatArray[i] = pixels[i] / 255.0;\r\n }\r\n\r\n this._data = floatArray;\r\n this._width = img.width;\r\n this._height = img.height;\r\n resolve();\r\n };\r\n\r\n img.onerror = () => {\r\n this._data = null;\r\n reject(new Error(\"Failed to load image\"));\r\n };\r\n\r\n img.src = url;\r\n });\r\n }\r\n\r\n /**\r\n * Remove stored data\r\n */\r\n public cleanData() {\r\n this._data = null;\r\n }\r\n\r\n /**\r\n * Load the texture data\r\n * @param imageFile defines the file to load data from\r\n * @returns a promise fulfilled when image data is loaded\r\n */\r\n public async loadTextureFromFileAsync(imageFile: File) {\r\n return await this._prepareImgToLoadAsync(URL.createObjectURL(imageFile));\r\n }\r\n\r\n /**\r\n * Load the texture data\r\n * @param url defines the url to load data from\r\n * @returns a promise fulfilled when image data is loaded\r\n */\r\n public async loadTextureFromUrlAsync(url: string) {\r\n return await this._prepareImgToLoadAsync(url);\r\n }\r\n\r\n /**\r\n * Load the texture data\r\n * @param texture defines the source texture\r\n * @returns a promise fulfilled when image data is loaded\r\n */\r\n public async extractFromTextureAsync(texture: Texture) {\r\n return await new Promise<void>((resolve, reject) => {\r\n if (!texture.isReady()) {\r\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n texture.onLoadObservable.addOnce(async () => {\r\n try {\r\n await this.extractFromTextureAsync(texture);\r\n resolve();\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 TextureTools.GetTextureDataAsync(texture, size.width, size.height)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n const floatArray = new Float32Array(data.length);\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n floatArray[i] = data[i] / 255.0;\r\n }\r\n this._data = floatArray;\r\n this._width = size.width;\r\n this._height = size.height;\r\n resolve();\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n });\r\n }\r\n\r\n protected override _buildBlock() {\r\n if (!this._data) {\r\n this.texture._storedValue = null;\r\n return;\r\n }\r\n\r\n const textureData: INodeGeometryTextureData = {\r\n data: this._data,\r\n width: this._width,\r\n height: this._height,\r\n };\r\n\r\n this.texture._storedValue = textureData;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.width = this._width;\r\n serializationObject.height = this._height;\r\n serializationObject.serializedCachedData = this.serializedCachedData;\r\n if (this._data && this.serializedCachedData) {\r\n serializationObject.data = Array.from(this._data);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this._width = serializationObject.width;\r\n this._height = serializationObject.height;\r\n if (serializationObject.data) {\r\n this._data = new Float32Array(serializationObject.data);\r\n this.serializedCachedData = true;\r\n } else {\r\n this.serializedCachedData = !!serializationObject.serializedCachedData;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GeometryTextureBlock\", GeometryTextureBlock);\r\n"]}
@@ -28,6 +28,7 @@ export class BooleanGeometryBlock extends NodeGeometryBlock {
28
28
  if (IsCSG2Ready()) {
29
29
  return null;
30
30
  }
31
+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
31
32
  if (!this._csg2LoadingPromise) {
32
33
  this._csg2LoadingPromise = InitializeCSG2Async();
33
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"booleanGeometryBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Meshes/Node/Blocks/booleanGeometryBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeGeometryBlock } from \"../nodeGeometryBlock\";\r\nimport type { NodeGeometryConnectionPoint } from \"../nodeGeometryBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes\";\r\nimport type { VertexData } from \"../../mesh.vertexData\";\r\nimport type { NodeGeometryBuildState } from \"../nodeGeometryBuildState\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"../../../Decorators/nodeDecorator\";\r\nimport { CSG2, InitializeCSG2Async, IsCSG2Ready } from \"core/Meshes/csg2\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { CSG } from \"core/Meshes/csg\";\r\n\r\n/**\r\n * Operations supported by the boolean block\r\n */\r\nexport enum BooleanGeometryOperations {\r\n /** Intersect */\r\n Intersect,\r\n /** Subtract */\r\n Subtract,\r\n /** Union */\r\n Union,\r\n}\r\n\r\n/**\r\n * Block used to apply a boolean operation between 2 geometries\r\n */\r\nexport class BooleanGeometryBlock extends NodeGeometryBlock {\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\r\n */\r\n @editableInPropertyPage(\"Evaluate context\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public evaluateContext = false;\r\n\r\n /**\r\n * Gets or sets the operation applied by the block\r\n */\r\n @editableInPropertyPage(\"Operation\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"Intersect\", value: BooleanGeometryOperations.Intersect },\r\n { label: \"Subtract\", value: BooleanGeometryOperations.Subtract },\r\n { label: \"Union\", value: BooleanGeometryOperations.Union },\r\n ],\r\n })\r\n public operation = BooleanGeometryOperations.Intersect;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\r\n */\r\n @editableInPropertyPage(\"Use old CSG engine\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public useOldCSGEngine = false;\r\n\r\n private _csg2LoadingPromise: Promise<void>;\r\n /**\r\n * @internal\r\n */\r\n public override get _isReadyState(): Nullable<Promise<void>> {\r\n if (IsCSG2Ready()) {\r\n return null;\r\n }\r\n\r\n if (!this._csg2LoadingPromise) {\r\n this._csg2LoadingPromise = InitializeCSG2Async();\r\n }\r\n\r\n return this._csg2LoadingPromise;\r\n }\r\n\r\n /**\r\n * Create a new BooleanGeometryBlock\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.registerInput(\"geometry0\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n this.registerInput(\"geometry1\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n\r\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\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 \"BooleanGeometryBlock\";\r\n }\r\n\r\n /**\r\n * Gets the geometry0 input component\r\n */\r\n public get geometry0(): NodeGeometryConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the geometry1 input component\r\n */\r\n public get geometry1(): NodeGeometryConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component\r\n */\r\n public get output(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeGeometryBuildState) {\r\n const func = (state: NodeGeometryBuildState) => {\r\n const vertexData0 = this.geometry0.getConnectedValue(state) as VertexData;\r\n const vertexData1 = this.geometry1.getConnectedValue(state) as VertexData;\r\n\r\n if (!vertexData0 || !vertexData1) {\r\n return null;\r\n }\r\n\r\n const vertexCount = vertexData0.positions!.length / 3;\r\n // Ensure that all the fields are filled to avoid problems later on in the graph\r\n if (!vertexData0.normals && vertexData1.normals) {\r\n vertexData0.normals = new Array<number>(vertexData0.positions!.length);\r\n }\r\n if (!vertexData1.normals && vertexData0.normals) {\r\n vertexData1.normals = new Array<number>(vertexData1.positions!.length);\r\n }\r\n if (!vertexData0.uvs && vertexData1.uvs) {\r\n vertexData0.uvs = new Array<number>(vertexCount * 2);\r\n }\r\n if (!vertexData1.uvs && vertexData0.uvs) {\r\n vertexData1.uvs = new Array<number>(vertexCount * 2);\r\n }\r\n if (!vertexData0.colors && vertexData1.colors) {\r\n vertexData0.colors = new Array<number>(vertexCount * 4);\r\n }\r\n if (!vertexData1.colors && vertexData0.colors) {\r\n vertexData1.colors = new Array<number>(vertexCount * 4);\r\n }\r\n\r\n let boolCSG: CSG | CSG2;\r\n\r\n if (this.useOldCSGEngine) {\r\n const csg0 = CSG.FromVertexData(vertexData0);\r\n const csg1 = CSG.FromVertexData(vertexData1);\r\n switch (this.operation) {\r\n case BooleanGeometryOperations.Intersect:\r\n boolCSG = csg0.intersect(csg1);\r\n break;\r\n case BooleanGeometryOperations.Subtract:\r\n boolCSG = csg0.subtract(csg1);\r\n break;\r\n case BooleanGeometryOperations.Union:\r\n boolCSG = csg0.union(csg1);\r\n break;\r\n }\r\n } else {\r\n const csg0 = CSG2.FromVertexData(vertexData0);\r\n const csg1 = CSG2.FromVertexData(vertexData1);\r\n switch (this.operation) {\r\n case BooleanGeometryOperations.Intersect:\r\n boolCSG = csg0.intersect(csg1);\r\n break;\r\n case BooleanGeometryOperations.Subtract:\r\n boolCSG = csg0.subtract(csg1);\r\n break;\r\n case BooleanGeometryOperations.Union:\r\n boolCSG = csg0.add(csg1);\r\n break;\r\n }\r\n }\r\n\r\n return boolCSG.toVertexData();\r\n };\r\n\r\n if (this.evaluateContext) {\r\n this.output._storedFunction = func;\r\n } else {\r\n this.output._storedFunction = null;\r\n this.output._storedValue = func(state);\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\r\n codeString += `${this._codeVariableName}.operation = BABYLON.BooleanGeometryOperations.${BooleanGeometryOperations[this.operation]};\\n`;\r\n codeString += `${this._codeVariableName}.useOldCSGEngine = ${this.useOldCSGEngine ? \"true\" : \"false\"};\\n`;\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.evaluateContext = this.evaluateContext;\r\n serializationObject.operation = this.operation;\r\n serializationObject.useOldCSGEngine = this.useOldCSGEngine;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.evaluateContext = serializationObject.evaluateContext;\r\n if (serializationObject.operation) {\r\n this.operation = serializationObject.operation;\r\n }\r\n\r\n this.useOldCSGEngine = !!serializationObject.useOldCSGEngine;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.BooleanGeometryBlock\", BooleanGeometryBlock);\r\n"]}
1
+ {"version":3,"file":"booleanGeometryBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Meshes/Node/Blocks/booleanGeometryBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeGeometryBlock } from \"../nodeGeometryBlock\";\r\nimport type { NodeGeometryConnectionPoint } from \"../nodeGeometryBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { NodeGeometryBlockConnectionPointTypes } from \"../Enums/nodeGeometryConnectionPointTypes\";\r\nimport type { VertexData } from \"../../mesh.vertexData\";\r\nimport type { NodeGeometryBuildState } from \"../nodeGeometryBuildState\";\r\nimport { PropertyTypeForEdition, editableInPropertyPage } from \"../../../Decorators/nodeDecorator\";\r\nimport { CSG2, InitializeCSG2Async, IsCSG2Ready } from \"core/Meshes/csg2\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { CSG } from \"core/Meshes/csg\";\r\n\r\n/**\r\n * Operations supported by the boolean block\r\n */\r\nexport enum BooleanGeometryOperations {\r\n /** Intersect */\r\n Intersect,\r\n /** Subtract */\r\n Subtract,\r\n /** Union */\r\n Union,\r\n}\r\n\r\n/**\r\n * Block used to apply a boolean operation between 2 geometries\r\n */\r\nexport class BooleanGeometryBlock extends NodeGeometryBlock {\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\r\n */\r\n @editableInPropertyPage(\"Evaluate context\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public evaluateContext = false;\r\n\r\n /**\r\n * Gets or sets the operation applied by the block\r\n */\r\n @editableInPropertyPage(\"Operation\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"Intersect\", value: BooleanGeometryOperations.Intersect },\r\n { label: \"Subtract\", value: BooleanGeometryOperations.Subtract },\r\n { label: \"Union\", value: BooleanGeometryOperations.Union },\r\n ],\r\n })\r\n public operation = BooleanGeometryOperations.Intersect;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that this block can evaluate context\r\n * Build performance is improved when this value is set to false as the system will cache values instead of reevaluating everything per context change\r\n */\r\n @editableInPropertyPage(\"Use old CSG engine\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public useOldCSGEngine = false;\r\n\r\n private _csg2LoadingPromise: Promise<void>;\r\n /**\r\n * @internal\r\n */\r\n public override get _isReadyState(): Nullable<Promise<void>> {\r\n if (IsCSG2Ready()) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n if (!this._csg2LoadingPromise) {\r\n this._csg2LoadingPromise = InitializeCSG2Async();\r\n }\r\n\r\n return this._csg2LoadingPromise;\r\n }\r\n\r\n /**\r\n * Create a new BooleanGeometryBlock\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.registerInput(\"geometry0\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n this.registerInput(\"geometry1\", NodeGeometryBlockConnectionPointTypes.Geometry);\r\n\r\n this.registerOutput(\"output\", NodeGeometryBlockConnectionPointTypes.Geometry);\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 \"BooleanGeometryBlock\";\r\n }\r\n\r\n /**\r\n * Gets the geometry0 input component\r\n */\r\n public get geometry0(): NodeGeometryConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the geometry1 input component\r\n */\r\n public get geometry1(): NodeGeometryConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the geometry output component\r\n */\r\n public get output(): NodeGeometryConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeGeometryBuildState) {\r\n const func = (state: NodeGeometryBuildState) => {\r\n const vertexData0 = this.geometry0.getConnectedValue(state) as VertexData;\r\n const vertexData1 = this.geometry1.getConnectedValue(state) as VertexData;\r\n\r\n if (!vertexData0 || !vertexData1) {\r\n return null;\r\n }\r\n\r\n const vertexCount = vertexData0.positions!.length / 3;\r\n // Ensure that all the fields are filled to avoid problems later on in the graph\r\n if (!vertexData0.normals && vertexData1.normals) {\r\n vertexData0.normals = new Array<number>(vertexData0.positions!.length);\r\n }\r\n if (!vertexData1.normals && vertexData0.normals) {\r\n vertexData1.normals = new Array<number>(vertexData1.positions!.length);\r\n }\r\n if (!vertexData0.uvs && vertexData1.uvs) {\r\n vertexData0.uvs = new Array<number>(vertexCount * 2);\r\n }\r\n if (!vertexData1.uvs && vertexData0.uvs) {\r\n vertexData1.uvs = new Array<number>(vertexCount * 2);\r\n }\r\n if (!vertexData0.colors && vertexData1.colors) {\r\n vertexData0.colors = new Array<number>(vertexCount * 4);\r\n }\r\n if (!vertexData1.colors && vertexData0.colors) {\r\n vertexData1.colors = new Array<number>(vertexCount * 4);\r\n }\r\n\r\n let boolCSG: CSG | CSG2;\r\n\r\n if (this.useOldCSGEngine) {\r\n const csg0 = CSG.FromVertexData(vertexData0);\r\n const csg1 = CSG.FromVertexData(vertexData1);\r\n switch (this.operation) {\r\n case BooleanGeometryOperations.Intersect:\r\n boolCSG = csg0.intersect(csg1);\r\n break;\r\n case BooleanGeometryOperations.Subtract:\r\n boolCSG = csg0.subtract(csg1);\r\n break;\r\n case BooleanGeometryOperations.Union:\r\n boolCSG = csg0.union(csg1);\r\n break;\r\n }\r\n } else {\r\n const csg0 = CSG2.FromVertexData(vertexData0);\r\n const csg1 = CSG2.FromVertexData(vertexData1);\r\n switch (this.operation) {\r\n case BooleanGeometryOperations.Intersect:\r\n boolCSG = csg0.intersect(csg1);\r\n break;\r\n case BooleanGeometryOperations.Subtract:\r\n boolCSG = csg0.subtract(csg1);\r\n break;\r\n case BooleanGeometryOperations.Union:\r\n boolCSG = csg0.add(csg1);\r\n break;\r\n }\r\n }\r\n\r\n return boolCSG.toVertexData();\r\n };\r\n\r\n if (this.evaluateContext) {\r\n this.output._storedFunction = func;\r\n } else {\r\n this.output._storedFunction = null;\r\n this.output._storedValue = func(state);\r\n }\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.evaluateContext = ${this.evaluateContext ? \"true\" : \"false\"};\\n`;\r\n codeString += `${this._codeVariableName}.operation = BABYLON.BooleanGeometryOperations.${BooleanGeometryOperations[this.operation]};\\n`;\r\n codeString += `${this._codeVariableName}.useOldCSGEngine = ${this.useOldCSGEngine ? \"true\" : \"false\"};\\n`;\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes this block in a JSON representation\r\n * @returns the serialized block object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.evaluateContext = this.evaluateContext;\r\n serializationObject.operation = this.operation;\r\n serializationObject.useOldCSGEngine = this.useOldCSGEngine;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.evaluateContext = serializationObject.evaluateContext;\r\n if (serializationObject.operation) {\r\n this.operation = serializationObject.operation;\r\n }\r\n\r\n this.useOldCSGEngine = !!serializationObject.useOldCSGEngine;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.BooleanGeometryBlock\", BooleanGeometryBlock);\r\n"]}
@@ -130,7 +130,7 @@ export class NodeGeometry {
130
130
  */
131
131
  // eslint-disable-next-line @typescript-eslint/naming-convention
132
132
  async edit(config) {
133
- return new Promise((resolve) => {
133
+ return await new Promise((resolve) => {
134
134
  this.BJSNODEGEOMETRYEDITOR = this.BJSNODEGEOMETRYEDITOR || this._getGlobalNodeGeometryEditor();
135
135
  if (typeof this.BJSNODEGEOMETRYEDITOR == "undefined") {
136
136
  const editorUrl = config && config.editorURL ? config.editorURL : NodeGeometry.EditorURL;
@@ -182,6 +182,7 @@ export class NodeGeometry {
182
182
  }
183
183
  }
184
184
  if (promises.length) {
185
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
185
186
  Promise.all(promises).then(() => {
186
187
  this.build(verbose, updateBuildId, autoConfigure);
187
188
  });
@@ -532,6 +533,7 @@ export class NodeGeometry {
532
533
  * @param skipBuild defines whether to build the node geometry
533
534
  * @returns a promise that will resolve to the new node geometry
534
535
  */
536
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
535
537
  static ParseFromSnippetAsync(snippetId, nodeGeometry, skipBuild = false) {
536
538
  if (snippetId === "_BLANK") {
537
539
  return Promise.resolve(NodeGeometry.CreateDefault("blank"));
@@ -555,10 +557,12 @@ export class NodeGeometry {
555
557
  resolve(nodeGeometry);
556
558
  }
557
559
  catch (err) {
560
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
558
561
  reject(err);
559
562
  }
560
563
  }
561
564
  else {
565
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
562
566
  reject("Unable to load the snippet " + snippetId);
563
567
  }
564
568
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nodeGeometry.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Node/nodeGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Mesh } from \"../mesh\";\r\nimport type { VertexData } from \"../mesh.vertexData\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { GeometryOutputBlock } from \"./Blocks/geometryOutputBlock\";\r\nimport type { NodeGeometryBlock } from \"./nodeGeometryBlock\";\r\nimport { NodeGeometryBuildState } from \"./nodeGeometryBuildState\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { WebRequest } from \"../../Misc/webRequest\";\r\nimport { BoxBlock } from \"./Blocks/Sources/boxBlock\";\r\nimport type { GeometryInputBlock } from \"./Blocks/geometryInputBlock\";\r\nimport { PrecisionDate } from \"../../Misc/precisionDate\";\r\nimport type { TeleportOutBlock } from \"./Blocks/Teleport/teleportOutBlock\";\r\nimport type { TeleportInBlock } from \"./Blocks/Teleport/teleportInBlock\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\n\r\n// declare NODEGEOMETRYEDITOR namespace for compilation issue\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let NODEGEOMETRYEDITOR: any;\r\ndeclare let BABYLON: any;\r\n\r\n/**\r\n * Interface used to configure the node geometry editor\r\n */\r\nexport interface INodeGeometryEditorOptions {\r\n /** Define the URL to load node editor script from */\r\n editorURL?: string;\r\n /** Additional configuration for the NGE */\r\n nodeGeometryEditorConfig?: {\r\n backgroundColor?: Color4;\r\n hostScene?: Scene;\r\n hostMesh?: Mesh;\r\n };\r\n}\r\n\r\n/**\r\n * Defines a node based geometry\r\n * @see demo at https://playground.babylonjs.com#PYY6XE#69\r\n */\r\nexport class NodeGeometry {\r\n private static _BuildIdGenerator: number = 0;\r\n private _buildId: number = NodeGeometry._BuildIdGenerator++;\r\n private _buildWasSuccessful = false;\r\n private _vertexData: Nullable<VertexData> = null;\r\n private _buildExecutionTime: number = 0;\r\n\r\n /** Define the Url to load node editor script */\r\n public static EditorURL = `${Tools._DefaultCdnUrl}/v${AbstractEngine.Version}/nodeGeometryEditor/babylon.nodeGeometryEditor.js`;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private BJSNODEGEOMETRYEDITOR = this._getGlobalNodeGeometryEditor();\r\n\r\n /** @returns the inspector from bundle or global */\r\n private _getGlobalNodeGeometryEditor(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof NODEGEOMETRYEDITOR !== \"undefined\") {\r\n return NODEGEOMETRYEDITOR;\r\n }\r\n\r\n // In case of module let's check the global emitted from the editor entry point.\r\n if (typeof BABYLON !== \"undefined\" && typeof BABYLON.NodeGeometryEditor !== \"undefined\") {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the time spent to build this block (in ms)\r\n */\r\n public get buildExecutionTime() {\r\n return this._buildExecutionTime;\r\n }\r\n\r\n /**\r\n * Gets or sets data used by visual editor\r\n * @see https://nge.babylonjs.com\r\n */\r\n public editorData: any = null;\r\n\r\n /**\r\n * Gets an array of blocks that needs to be serialized even if they are not yet connected\r\n */\r\n public attachedBlocks: NodeGeometryBlock[] = [];\r\n\r\n /**\r\n * Observable raised when the geometry is built\r\n */\r\n public onBuildObservable = new Observable<NodeGeometry>();\r\n\r\n /** Gets or sets the GeometryOutputBlock used to gather the final geometry data */\r\n public outputBlock: Nullable<GeometryOutputBlock> = null;\r\n\r\n /**\r\n * Snippet ID if the material was created from the snippet server\r\n */\r\n public snippetId: string;\r\n\r\n /**\r\n * The name of the geometry\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * A free comment about the geometry\r\n */\r\n @serialize(\"comment\")\r\n public comment: string;\r\n\r\n /**\r\n * Creates a new geometry\r\n * @param name defines the name of the geometry\r\n */\r\n public constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the geometry e.g. \"NodeGeometry\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeGeometry\";\r\n }\r\n\r\n /**\r\n * Gets the vertex data. This needs to be done after build() was called.\r\n * This is used to access vertexData when creating a mesh is not required.\r\n */\r\n public get vertexData() {\r\n return this._vertexData;\r\n }\r\n\r\n /**\r\n * Get a block by its name\r\n * @param name defines the name of the block to retrieve\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByName(name: string) {\r\n let result = null;\r\n for (const block of this.attachedBlocks) {\r\n if (block.name === name) {\r\n if (!result) {\r\n result = block;\r\n } else {\r\n Tools.Warn(\"More than one block was found with the name `\" + name + \"`\");\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a block using a predicate\r\n * @param predicate defines the predicate used to find the good candidate\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByPredicate(predicate: (block: NodeGeometryBlock) => boolean) {\r\n for (const block of this.attachedBlocks) {\r\n if (predicate(block)) {\r\n return block;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the list of input blocks attached to this material\r\n * @returns an array of InputBlocks\r\n */\r\n public getInputBlocks() {\r\n const blocks: GeometryInputBlock[] = [];\r\n for (const block of this.attachedBlocks) {\r\n if (block.isInput) {\r\n blocks.push(block as GeometryInputBlock);\r\n }\r\n }\r\n\r\n return blocks;\r\n }\r\n\r\n /**\r\n * Launch the node geometry editor\r\n * @param config Define the configuration of the editor\r\n * @returns a promise fulfilled when the node editor is visible\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async edit(config?: INodeGeometryEditorOptions): Promise<void> {\r\n return new Promise((resolve) => {\r\n this.BJSNODEGEOMETRYEDITOR = this.BJSNODEGEOMETRYEDITOR || this._getGlobalNodeGeometryEditor();\r\n if (typeof this.BJSNODEGEOMETRYEDITOR == \"undefined\") {\r\n const editorUrl = config && config.editorURL ? config.editorURL : NodeGeometry.EditorURL;\r\n\r\n // Load editor and add it to the DOM\r\n Tools.LoadBabylonScript(editorUrl, () => {\r\n this.BJSNODEGEOMETRYEDITOR = this.BJSNODEGEOMETRYEDITOR || this._getGlobalNodeGeometryEditor();\r\n this._createNodeEditor(config?.nodeGeometryEditorConfig);\r\n resolve();\r\n });\r\n } else {\r\n // Otherwise creates the editor\r\n this._createNodeEditor(config?.nodeGeometryEditorConfig);\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the node editor window.\r\n * @param additionalConfig Additional configuration for the NGE\r\n */\r\n private _createNodeEditor(additionalConfig?: any) {\r\n const nodeEditorConfig: any = {\r\n nodeGeometry: this,\r\n ...additionalConfig,\r\n };\r\n this.BJSNODEGEOMETRYEDITOR.NodeGeometryEditor.Show(nodeEditorConfig);\r\n }\r\n\r\n /**\r\n * Build the final geometry. Please note that the geometry MAY not be ready until the onBuildObservable is raised.\r\n * @param verbose defines if the build should log activity\r\n * @param updateBuildId defines if the internal build Id should be updated (default is true)\r\n * @param autoConfigure defines if the autoConfigure method should be called when initializing blocks (default is false)\r\n */\r\n public build(verbose: boolean = false, updateBuildId = true, autoConfigure = false) {\r\n this._buildWasSuccessful = false;\r\n\r\n if (!this.outputBlock) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"You must define the outputBlock property before building the geometry\";\r\n }\r\n const now = PrecisionDate.Now;\r\n // Initialize blocks\r\n this._initializeBlock(this.outputBlock, autoConfigure);\r\n\r\n // Check async states\r\n const promises: Promise<void>[] = [];\r\n for (const block of this.attachedBlocks) {\r\n if (block._isReadyState) {\r\n promises.push(block._isReadyState);\r\n }\r\n }\r\n\r\n if (promises.length) {\r\n Promise.all(promises).then(() => {\r\n this.build(verbose, updateBuildId, autoConfigure);\r\n });\r\n return;\r\n }\r\n\r\n // Build\r\n const state = new NodeGeometryBuildState();\r\n\r\n state.buildId = this._buildId;\r\n state.verbose = verbose;\r\n\r\n try {\r\n this.outputBlock.build(state);\r\n } finally {\r\n if (updateBuildId) {\r\n this._buildId = NodeGeometry._BuildIdGenerator++;\r\n }\r\n }\r\n\r\n this._buildExecutionTime = PrecisionDate.Now - now;\r\n\r\n // Errors\r\n state.emitErrors();\r\n\r\n this._buildWasSuccessful = true;\r\n this._vertexData = state.vertexData;\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Creates a mesh from the geometry blocks\r\n * @param name defines the name of the mesh\r\n * @param scene The scene the mesh is scoped to\r\n * @returns The new mesh\r\n */\r\n public createMesh(name: string, scene: Nullable<Scene> = null): Nullable<Mesh> {\r\n if (!this._buildWasSuccessful) {\r\n this.build();\r\n }\r\n\r\n if (!this._vertexData) {\r\n return null;\r\n }\r\n\r\n const mesh = new Mesh(name, scene);\r\n this._vertexData.applyToMesh(mesh);\r\n\r\n mesh._internalMetadata = mesh._internalMetadata || {};\r\n mesh._internalMetadata.nodeGeometry = this;\r\n\r\n return mesh;\r\n }\r\n\r\n /**\r\n * Creates a mesh from the geometry blocks\r\n * @param mesh the mesh to update\r\n * @returns True if successfully updated\r\n */\r\n public updateMesh(mesh: Mesh) {\r\n if (!this._buildWasSuccessful) {\r\n this.build();\r\n }\r\n\r\n if (!this._vertexData) {\r\n return false;\r\n }\r\n\r\n this._vertexData.applyToMesh(mesh);\r\n\r\n mesh._internalMetadata = mesh._internalMetadata || {};\r\n mesh._internalMetadata.nodeGeometry = this;\r\n\r\n return mesh;\r\n }\r\n\r\n private _initializeBlock(node: NodeGeometryBlock, autoConfigure = true) {\r\n node.initialize();\r\n if (autoConfigure) {\r\n node.autoConfigure(this);\r\n }\r\n node._preparationId = this._buildId;\r\n\r\n if (this.attachedBlocks.indexOf(node) === -1) {\r\n this.attachedBlocks.push(node);\r\n }\r\n\r\n for (const input of node.inputs) {\r\n const connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n const block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n this._initializeBlock(block, autoConfigure);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current geometry\r\n */\r\n public clear() {\r\n this.outputBlock = null;\r\n this.attachedBlocks.length = 0;\r\n }\r\n\r\n /**\r\n * Remove a block from the current geometry\r\n * @param block defines the block to remove\r\n */\r\n public removeBlock(block: NodeGeometryBlock) {\r\n const attachedBlockIndex = this.attachedBlocks.indexOf(block);\r\n if (attachedBlockIndex > -1) {\r\n this.attachedBlocks.splice(attachedBlockIndex, 1);\r\n }\r\n\r\n if (block === this.outputBlock) {\r\n this.outputBlock = null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current graph and load a new one from a serialization object\r\n * @param source defines the JSON representation of the geometry\r\n * @param merge defines whether or not the source must be merged or replace the current content\r\n */\r\n public parseSerializedObject(source: any, merge = false) {\r\n if (!merge) {\r\n this.clear();\r\n }\r\n\r\n const map: { [key: number]: NodeGeometryBlock } = {};\r\n\r\n // Create blocks\r\n for (const parsedBlock of source.blocks) {\r\n const blockType = GetClass(parsedBlock.customType);\r\n if (blockType) {\r\n const block: NodeGeometryBlock = new blockType();\r\n block._deserialize(parsedBlock);\r\n map[parsedBlock.id] = block;\r\n\r\n this.attachedBlocks.push(block);\r\n }\r\n }\r\n\r\n // Reconnect teleportation\r\n for (const block of this.attachedBlocks) {\r\n if (block.isTeleportOut) {\r\n const teleportOut = block as TeleportOutBlock;\r\n const id = teleportOut._tempEntryPointUniqueId;\r\n if (id) {\r\n const source = map[id] as TeleportInBlock;\r\n if (source) {\r\n source.attachToEndpoint(teleportOut);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections - Starts with input blocks only (except if in \"merge\" mode where we scan all blocks)\r\n for (let blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {\r\n const parsedBlock = source.blocks[blockIndex];\r\n const block = map[parsedBlock.id];\r\n\r\n if (!block) {\r\n continue;\r\n }\r\n\r\n if (block.inputs.length && parsedBlock.inputs.some((i: any) => i.targetConnectionName) && !merge) {\r\n continue;\r\n }\r\n this._restoreConnections(block, source, map);\r\n }\r\n\r\n // Outputs\r\n if (source.outputNodeId) {\r\n this.outputBlock = map[source.outputNodeId] as GeometryOutputBlock;\r\n }\r\n\r\n // UI related info\r\n if (source.locations || (source.editorData && source.editorData.locations)) {\r\n const locations: {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n isCollapsed: boolean;\r\n }[] = source.locations || source.editorData.locations;\r\n\r\n for (const location of locations) {\r\n if (map[location.blockId]) {\r\n location.blockId = map[location.blockId].uniqueId;\r\n }\r\n }\r\n\r\n if (merge && this.editorData && this.editorData.locations) {\r\n locations.concat(this.editorData.locations);\r\n }\r\n\r\n if (source.locations) {\r\n this.editorData = {\r\n locations: locations,\r\n };\r\n } else {\r\n this.editorData = source.editorData;\r\n this.editorData.locations = locations;\r\n }\r\n\r\n const blockMap: number[] = [];\r\n\r\n for (const key in map) {\r\n blockMap[key] = map[key].uniqueId;\r\n }\r\n\r\n this.editorData.map = blockMap;\r\n }\r\n\r\n this.comment = source.comment;\r\n }\r\n\r\n private _restoreConnections(block: NodeGeometryBlock, source: any, map: { [key: number]: NodeGeometryBlock }) {\r\n for (const outputPoint of block.outputs) {\r\n for (const candidate of source.blocks) {\r\n const target = map[candidate.id];\r\n\r\n if (!target) {\r\n continue;\r\n }\r\n\r\n for (const input of candidate.inputs) {\r\n if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {\r\n const inputPoint = target.getInputByName(input.inputName);\r\n if (!inputPoint || inputPoint.isConnected) {\r\n continue;\r\n }\r\n\r\n outputPoint.connectTo(inputPoint, true);\r\n this._restoreConnections(target, source, map);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Generate a string containing the code declaration required to create an equivalent of this geometry\r\n * @returns a string\r\n */\r\n public generateCode() {\r\n let alreadyDumped: NodeGeometryBlock[] = [];\r\n const blocks: NodeGeometryBlock[] = [];\r\n const uniqueNames: string[] = [\"const\", \"var\", \"let\"];\r\n // Gets active blocks\r\n if (this.outputBlock) {\r\n this._gatherBlocks(this.outputBlock, blocks);\r\n }\r\n\r\n // Generate\r\n let codeString = `let nodeGeometry = new BABYLON.NodeGeometry(\"${this.name || \"node geometry\"}\");\\n`;\r\n for (const node of blocks) {\r\n if (node.isInput && alreadyDumped.indexOf(node) === -1) {\r\n codeString += node._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n if (this.outputBlock) {\r\n // Connections\r\n alreadyDumped = [];\r\n codeString += \"// Connections\\n\";\r\n codeString += this.outputBlock._dumpCodeForOutputConnections(alreadyDumped);\r\n\r\n // Output nodes\r\n codeString += \"// Output nodes\\n\";\r\n codeString += `nodeGeometry.outputBlock = ${this.outputBlock._codeVariableName};\\n`;\r\n codeString += `nodeGeometry.build();\\n`;\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n private _gatherBlocks(rootNode: NodeGeometryBlock, list: NodeGeometryBlock[]) {\r\n if (list.indexOf(rootNode) !== -1) {\r\n return;\r\n }\r\n list.push(rootNode);\r\n\r\n for (const input of rootNode.inputs) {\r\n const connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n const block = connectedPoint.ownerBlock;\r\n if (block !== rootNode) {\r\n this._gatherBlocks(block, list);\r\n }\r\n }\r\n }\r\n\r\n // Teleportation\r\n if (rootNode.isTeleportOut) {\r\n const block = rootNode as TeleportOutBlock;\r\n if (block.entryPoint) {\r\n this._gatherBlocks(block.entryPoint, list);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current geometry and set it to a default state\r\n */\r\n public setToDefault() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n // Source\r\n const dataBlock = new BoxBlock(\"Box\");\r\n dataBlock.autoConfigure();\r\n\r\n // Final output\r\n const output = new GeometryOutputBlock(\"Geometry Output\");\r\n dataBlock.geometry.connectTo(output.geometry);\r\n\r\n this.outputBlock = output;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current geometry.\r\n * @param name defines the name to use for the new geometry\r\n * @returns the new geometry\r\n */\r\n public clone(name: string): NodeGeometry {\r\n const serializationObject = this.serialize();\r\n\r\n const clone = SerializationHelper.Clone(() => new NodeGeometry(name), this);\r\n clone.name = name;\r\n\r\n clone.parseSerializedObject(serializationObject);\r\n clone._buildId = this._buildId;\r\n clone.build(false);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Serializes this geometry in a JSON representation\r\n * @param selectedBlocks defines the list of blocks to save (if null the whole geometry will be saved)\r\n * @returns the serialized geometry object\r\n */\r\n public serialize(selectedBlocks?: NodeGeometryBlock[]): any {\r\n const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);\r\n serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy\r\n\r\n let blocks: NodeGeometryBlock[] = [];\r\n\r\n if (selectedBlocks) {\r\n blocks = selectedBlocks;\r\n } else {\r\n serializationObject.customType = \"BABYLON.NodeGeometry\";\r\n if (this.outputBlock) {\r\n serializationObject.outputNodeId = this.outputBlock.uniqueId;\r\n }\r\n }\r\n\r\n // Blocks\r\n serializationObject.blocks = [];\r\n\r\n for (const block of blocks) {\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n\r\n if (!selectedBlocks) {\r\n for (const block of this.attachedBlocks) {\r\n if (blocks.indexOf(block) !== -1) {\r\n continue;\r\n }\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Disposes the ressources\r\n */\r\n public dispose(): void {\r\n for (const block of this.attachedBlocks) {\r\n block.dispose();\r\n }\r\n\r\n this.attachedBlocks.length = 0;\r\n this.onBuildObservable.clear();\r\n }\r\n\r\n /**\r\n * Creates a new node geometry set to default basic configuration\r\n * @param name defines the name of the geometry\r\n * @returns a new NodeGeometry\r\n */\r\n public static CreateDefault(name: string) {\r\n const nodeGeometry = new NodeGeometry(name);\r\n\r\n nodeGeometry.setToDefault();\r\n nodeGeometry.build();\r\n\r\n return nodeGeometry;\r\n }\r\n\r\n /**\r\n * Creates a node geometry from parsed geometry data\r\n * @param source defines the JSON representation of the geometry\r\n * @returns a new node geometry\r\n */\r\n public static Parse(source: any): NodeGeometry {\r\n const nodeGeometry = SerializationHelper.Parse(() => new NodeGeometry(source.name), source, null);\r\n\r\n nodeGeometry.parseSerializedObject(source);\r\n nodeGeometry.build();\r\n\r\n return nodeGeometry;\r\n }\r\n\r\n /**\r\n * Creates a node geometry from a snippet saved by the node geometry editor\r\n * @param snippetId defines the snippet to load\r\n * @param nodeGeometry defines a node geometry to update (instead of creating a new one)\r\n * @param skipBuild defines whether to build the node geometry\r\n * @returns a promise that will resolve to the new node geometry\r\n */\r\n public static ParseFromSnippetAsync(snippetId: string, nodeGeometry?: NodeGeometry, skipBuild: boolean = false): Promise<NodeGeometry> {\r\n if (snippetId === \"_BLANK\") {\r\n return Promise.resolve(NodeGeometry.CreateDefault(\"blank\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.nodeGeometry);\r\n\r\n if (!nodeGeometry) {\r\n nodeGeometry = SerializationHelper.Parse(() => new NodeGeometry(snippetId), serializationObject, null);\r\n }\r\n\r\n nodeGeometry.parseSerializedObject(serializationObject);\r\n nodeGeometry.snippetId = snippetId;\r\n\r\n try {\r\n if (!skipBuild) {\r\n nodeGeometry.build();\r\n }\r\n resolve(nodeGeometry);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n } else {\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"nodeGeometry.js","sourceRoot":"","sources":["../../../../../dev/core/src/Meshes/Node/nodeGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Mesh } from \"../mesh\";\r\nimport type { VertexData } from \"../mesh.vertexData\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { GeometryOutputBlock } from \"./Blocks/geometryOutputBlock\";\r\nimport type { NodeGeometryBlock } from \"./nodeGeometryBlock\";\r\nimport { NodeGeometryBuildState } from \"./nodeGeometryBuildState\";\r\nimport { GetClass } from \"../../Misc/typeStore\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { WebRequest } from \"../../Misc/webRequest\";\r\nimport { BoxBlock } from \"./Blocks/Sources/boxBlock\";\r\nimport type { GeometryInputBlock } from \"./Blocks/geometryInputBlock\";\r\nimport { PrecisionDate } from \"../../Misc/precisionDate\";\r\nimport type { TeleportOutBlock } from \"./Blocks/Teleport/teleportOutBlock\";\r\nimport type { TeleportInBlock } from \"./Blocks/Teleport/teleportInBlock\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\r\n\r\n// declare NODEGEOMETRYEDITOR namespace for compilation issue\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let NODEGEOMETRYEDITOR: any;\r\ndeclare let BABYLON: any;\r\n\r\n/**\r\n * Interface used to configure the node geometry editor\r\n */\r\nexport interface INodeGeometryEditorOptions {\r\n /** Define the URL to load node editor script from */\r\n editorURL?: string;\r\n /** Additional configuration for the NGE */\r\n nodeGeometryEditorConfig?: {\r\n backgroundColor?: Color4;\r\n hostScene?: Scene;\r\n hostMesh?: Mesh;\r\n };\r\n}\r\n\r\n/**\r\n * Defines a node based geometry\r\n * @see demo at https://playground.babylonjs.com#PYY6XE#69\r\n */\r\nexport class NodeGeometry {\r\n private static _BuildIdGenerator: number = 0;\r\n private _buildId: number = NodeGeometry._BuildIdGenerator++;\r\n private _buildWasSuccessful = false;\r\n private _vertexData: Nullable<VertexData> = null;\r\n private _buildExecutionTime: number = 0;\r\n\r\n /** Define the Url to load node editor script */\r\n public static EditorURL = `${Tools._DefaultCdnUrl}/v${AbstractEngine.Version}/nodeGeometryEditor/babylon.nodeGeometryEditor.js`;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private BJSNODEGEOMETRYEDITOR = this._getGlobalNodeGeometryEditor();\r\n\r\n /** @returns the inspector from bundle or global */\r\n private _getGlobalNodeGeometryEditor(): any {\r\n // UMD Global name detection from Webpack Bundle UMD Name.\r\n if (typeof NODEGEOMETRYEDITOR !== \"undefined\") {\r\n return NODEGEOMETRYEDITOR;\r\n }\r\n\r\n // In case of module let's check the global emitted from the editor entry point.\r\n if (typeof BABYLON !== \"undefined\" && typeof BABYLON.NodeGeometryEditor !== \"undefined\") {\r\n return BABYLON;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the time spent to build this block (in ms)\r\n */\r\n public get buildExecutionTime() {\r\n return this._buildExecutionTime;\r\n }\r\n\r\n /**\r\n * Gets or sets data used by visual editor\r\n * @see https://nge.babylonjs.com\r\n */\r\n public editorData: any = null;\r\n\r\n /**\r\n * Gets an array of blocks that needs to be serialized even if they are not yet connected\r\n */\r\n public attachedBlocks: NodeGeometryBlock[] = [];\r\n\r\n /**\r\n * Observable raised when the geometry is built\r\n */\r\n public onBuildObservable = new Observable<NodeGeometry>();\r\n\r\n /** Gets or sets the GeometryOutputBlock used to gather the final geometry data */\r\n public outputBlock: Nullable<GeometryOutputBlock> = null;\r\n\r\n /**\r\n * Snippet ID if the material was created from the snippet server\r\n */\r\n public snippetId: string;\r\n\r\n /**\r\n * The name of the geometry\r\n */\r\n @serialize()\r\n public name: string;\r\n\r\n /**\r\n * A free comment about the geometry\r\n */\r\n @serialize(\"comment\")\r\n public comment: string;\r\n\r\n /**\r\n * Creates a new geometry\r\n * @param name defines the name of the geometry\r\n */\r\n public constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Gets the current class name of the geometry e.g. \"NodeGeometry\"\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"NodeGeometry\";\r\n }\r\n\r\n /**\r\n * Gets the vertex data. This needs to be done after build() was called.\r\n * This is used to access vertexData when creating a mesh is not required.\r\n */\r\n public get vertexData() {\r\n return this._vertexData;\r\n }\r\n\r\n /**\r\n * Get a block by its name\r\n * @param name defines the name of the block to retrieve\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByName(name: string) {\r\n let result = null;\r\n for (const block of this.attachedBlocks) {\r\n if (block.name === name) {\r\n if (!result) {\r\n result = block;\r\n } else {\r\n Tools.Warn(\"More than one block was found with the name `\" + name + \"`\");\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a block using a predicate\r\n * @param predicate defines the predicate used to find the good candidate\r\n * @returns the required block or null if not found\r\n */\r\n public getBlockByPredicate(predicate: (block: NodeGeometryBlock) => boolean) {\r\n for (const block of this.attachedBlocks) {\r\n if (predicate(block)) {\r\n return block;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the list of input blocks attached to this material\r\n * @returns an array of InputBlocks\r\n */\r\n public getInputBlocks() {\r\n const blocks: GeometryInputBlock[] = [];\r\n for (const block of this.attachedBlocks) {\r\n if (block.isInput) {\r\n blocks.push(block as GeometryInputBlock);\r\n }\r\n }\r\n\r\n return blocks;\r\n }\r\n\r\n /**\r\n * Launch the node geometry editor\r\n * @param config Define the configuration of the editor\r\n * @returns a promise fulfilled when the node editor is visible\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async edit(config?: INodeGeometryEditorOptions): Promise<void> {\r\n return await new Promise((resolve) => {\r\n this.BJSNODEGEOMETRYEDITOR = this.BJSNODEGEOMETRYEDITOR || this._getGlobalNodeGeometryEditor();\r\n if (typeof this.BJSNODEGEOMETRYEDITOR == \"undefined\") {\r\n const editorUrl = config && config.editorURL ? config.editorURL : NodeGeometry.EditorURL;\r\n\r\n // Load editor and add it to the DOM\r\n Tools.LoadBabylonScript(editorUrl, () => {\r\n this.BJSNODEGEOMETRYEDITOR = this.BJSNODEGEOMETRYEDITOR || this._getGlobalNodeGeometryEditor();\r\n this._createNodeEditor(config?.nodeGeometryEditorConfig);\r\n resolve();\r\n });\r\n } else {\r\n // Otherwise creates the editor\r\n this._createNodeEditor(config?.nodeGeometryEditorConfig);\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the node editor window.\r\n * @param additionalConfig Additional configuration for the NGE\r\n */\r\n private _createNodeEditor(additionalConfig?: any) {\r\n const nodeEditorConfig: any = {\r\n nodeGeometry: this,\r\n ...additionalConfig,\r\n };\r\n this.BJSNODEGEOMETRYEDITOR.NodeGeometryEditor.Show(nodeEditorConfig);\r\n }\r\n\r\n /**\r\n * Build the final geometry. Please note that the geometry MAY not be ready until the onBuildObservable is raised.\r\n * @param verbose defines if the build should log activity\r\n * @param updateBuildId defines if the internal build Id should be updated (default is true)\r\n * @param autoConfigure defines if the autoConfigure method should be called when initializing blocks (default is false)\r\n */\r\n public build(verbose: boolean = false, updateBuildId = true, autoConfigure = false) {\r\n this._buildWasSuccessful = false;\r\n\r\n if (!this.outputBlock) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"You must define the outputBlock property before building the geometry\";\r\n }\r\n const now = PrecisionDate.Now;\r\n // Initialize blocks\r\n this._initializeBlock(this.outputBlock, autoConfigure);\r\n\r\n // Check async states\r\n const promises: Promise<void>[] = [];\r\n for (const block of this.attachedBlocks) {\r\n if (block._isReadyState) {\r\n promises.push(block._isReadyState);\r\n }\r\n }\r\n\r\n if (promises.length) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n Promise.all(promises).then(() => {\r\n this.build(verbose, updateBuildId, autoConfigure);\r\n });\r\n return;\r\n }\r\n\r\n // Build\r\n const state = new NodeGeometryBuildState();\r\n\r\n state.buildId = this._buildId;\r\n state.verbose = verbose;\r\n\r\n try {\r\n this.outputBlock.build(state);\r\n } finally {\r\n if (updateBuildId) {\r\n this._buildId = NodeGeometry._BuildIdGenerator++;\r\n }\r\n }\r\n\r\n this._buildExecutionTime = PrecisionDate.Now - now;\r\n\r\n // Errors\r\n state.emitErrors();\r\n\r\n this._buildWasSuccessful = true;\r\n this._vertexData = state.vertexData;\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Creates a mesh from the geometry blocks\r\n * @param name defines the name of the mesh\r\n * @param scene The scene the mesh is scoped to\r\n * @returns The new mesh\r\n */\r\n public createMesh(name: string, scene: Nullable<Scene> = null): Nullable<Mesh> {\r\n if (!this._buildWasSuccessful) {\r\n this.build();\r\n }\r\n\r\n if (!this._vertexData) {\r\n return null;\r\n }\r\n\r\n const mesh = new Mesh(name, scene);\r\n this._vertexData.applyToMesh(mesh);\r\n\r\n mesh._internalMetadata = mesh._internalMetadata || {};\r\n mesh._internalMetadata.nodeGeometry = this;\r\n\r\n return mesh;\r\n }\r\n\r\n /**\r\n * Creates a mesh from the geometry blocks\r\n * @param mesh the mesh to update\r\n * @returns True if successfully updated\r\n */\r\n public updateMesh(mesh: Mesh) {\r\n if (!this._buildWasSuccessful) {\r\n this.build();\r\n }\r\n\r\n if (!this._vertexData) {\r\n return false;\r\n }\r\n\r\n this._vertexData.applyToMesh(mesh);\r\n\r\n mesh._internalMetadata = mesh._internalMetadata || {};\r\n mesh._internalMetadata.nodeGeometry = this;\r\n\r\n return mesh;\r\n }\r\n\r\n private _initializeBlock(node: NodeGeometryBlock, autoConfigure = true) {\r\n node.initialize();\r\n if (autoConfigure) {\r\n node.autoConfigure(this);\r\n }\r\n node._preparationId = this._buildId;\r\n\r\n if (this.attachedBlocks.indexOf(node) === -1) {\r\n this.attachedBlocks.push(node);\r\n }\r\n\r\n for (const input of node.inputs) {\r\n const connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n const block = connectedPoint.ownerBlock;\r\n if (block !== node) {\r\n this._initializeBlock(block, autoConfigure);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current geometry\r\n */\r\n public clear() {\r\n this.outputBlock = null;\r\n this.attachedBlocks.length = 0;\r\n }\r\n\r\n /**\r\n * Remove a block from the current geometry\r\n * @param block defines the block to remove\r\n */\r\n public removeBlock(block: NodeGeometryBlock) {\r\n const attachedBlockIndex = this.attachedBlocks.indexOf(block);\r\n if (attachedBlockIndex > -1) {\r\n this.attachedBlocks.splice(attachedBlockIndex, 1);\r\n }\r\n\r\n if (block === this.outputBlock) {\r\n this.outputBlock = null;\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current graph and load a new one from a serialization object\r\n * @param source defines the JSON representation of the geometry\r\n * @param merge defines whether or not the source must be merged or replace the current content\r\n */\r\n public parseSerializedObject(source: any, merge = false) {\r\n if (!merge) {\r\n this.clear();\r\n }\r\n\r\n const map: { [key: number]: NodeGeometryBlock } = {};\r\n\r\n // Create blocks\r\n for (const parsedBlock of source.blocks) {\r\n const blockType = GetClass(parsedBlock.customType);\r\n if (blockType) {\r\n const block: NodeGeometryBlock = new blockType();\r\n block._deserialize(parsedBlock);\r\n map[parsedBlock.id] = block;\r\n\r\n this.attachedBlocks.push(block);\r\n }\r\n }\r\n\r\n // Reconnect teleportation\r\n for (const block of this.attachedBlocks) {\r\n if (block.isTeleportOut) {\r\n const teleportOut = block as TeleportOutBlock;\r\n const id = teleportOut._tempEntryPointUniqueId;\r\n if (id) {\r\n const source = map[id] as TeleportInBlock;\r\n if (source) {\r\n source.attachToEndpoint(teleportOut);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Connections - Starts with input blocks only (except if in \"merge\" mode where we scan all blocks)\r\n for (let blockIndex = 0; blockIndex < source.blocks.length; blockIndex++) {\r\n const parsedBlock = source.blocks[blockIndex];\r\n const block = map[parsedBlock.id];\r\n\r\n if (!block) {\r\n continue;\r\n }\r\n\r\n if (block.inputs.length && parsedBlock.inputs.some((i: any) => i.targetConnectionName) && !merge) {\r\n continue;\r\n }\r\n this._restoreConnections(block, source, map);\r\n }\r\n\r\n // Outputs\r\n if (source.outputNodeId) {\r\n this.outputBlock = map[source.outputNodeId] as GeometryOutputBlock;\r\n }\r\n\r\n // UI related info\r\n if (source.locations || (source.editorData && source.editorData.locations)) {\r\n const locations: {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n isCollapsed: boolean;\r\n }[] = source.locations || source.editorData.locations;\r\n\r\n for (const location of locations) {\r\n if (map[location.blockId]) {\r\n location.blockId = map[location.blockId].uniqueId;\r\n }\r\n }\r\n\r\n if (merge && this.editorData && this.editorData.locations) {\r\n locations.concat(this.editorData.locations);\r\n }\r\n\r\n if (source.locations) {\r\n this.editorData = {\r\n locations: locations,\r\n };\r\n } else {\r\n this.editorData = source.editorData;\r\n this.editorData.locations = locations;\r\n }\r\n\r\n const blockMap: number[] = [];\r\n\r\n for (const key in map) {\r\n blockMap[key] = map[key].uniqueId;\r\n }\r\n\r\n this.editorData.map = blockMap;\r\n }\r\n\r\n this.comment = source.comment;\r\n }\r\n\r\n private _restoreConnections(block: NodeGeometryBlock, source: any, map: { [key: number]: NodeGeometryBlock }) {\r\n for (const outputPoint of block.outputs) {\r\n for (const candidate of source.blocks) {\r\n const target = map[candidate.id];\r\n\r\n if (!target) {\r\n continue;\r\n }\r\n\r\n for (const input of candidate.inputs) {\r\n if (map[input.targetBlockId] === block && input.targetConnectionName === outputPoint.name) {\r\n const inputPoint = target.getInputByName(input.inputName);\r\n if (!inputPoint || inputPoint.isConnected) {\r\n continue;\r\n }\r\n\r\n outputPoint.connectTo(inputPoint, true);\r\n this._restoreConnections(target, source, map);\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Generate a string containing the code declaration required to create an equivalent of this geometry\r\n * @returns a string\r\n */\r\n public generateCode() {\r\n let alreadyDumped: NodeGeometryBlock[] = [];\r\n const blocks: NodeGeometryBlock[] = [];\r\n const uniqueNames: string[] = [\"const\", \"var\", \"let\"];\r\n // Gets active blocks\r\n if (this.outputBlock) {\r\n this._gatherBlocks(this.outputBlock, blocks);\r\n }\r\n\r\n // Generate\r\n let codeString = `let nodeGeometry = new BABYLON.NodeGeometry(\"${this.name || \"node geometry\"}\");\\n`;\r\n for (const node of blocks) {\r\n if (node.isInput && alreadyDumped.indexOf(node) === -1) {\r\n codeString += node._dumpCode(uniqueNames, alreadyDumped);\r\n }\r\n }\r\n\r\n if (this.outputBlock) {\r\n // Connections\r\n alreadyDumped = [];\r\n codeString += \"// Connections\\n\";\r\n codeString += this.outputBlock._dumpCodeForOutputConnections(alreadyDumped);\r\n\r\n // Output nodes\r\n codeString += \"// Output nodes\\n\";\r\n codeString += `nodeGeometry.outputBlock = ${this.outputBlock._codeVariableName};\\n`;\r\n codeString += `nodeGeometry.build();\\n`;\r\n }\r\n\r\n return codeString;\r\n }\r\n\r\n private _gatherBlocks(rootNode: NodeGeometryBlock, list: NodeGeometryBlock[]) {\r\n if (list.indexOf(rootNode) !== -1) {\r\n return;\r\n }\r\n list.push(rootNode);\r\n\r\n for (const input of rootNode.inputs) {\r\n const connectedPoint = input.connectedPoint;\r\n if (connectedPoint) {\r\n const block = connectedPoint.ownerBlock;\r\n if (block !== rootNode) {\r\n this._gatherBlocks(block, list);\r\n }\r\n }\r\n }\r\n\r\n // Teleportation\r\n if (rootNode.isTeleportOut) {\r\n const block = rootNode as TeleportOutBlock;\r\n if (block.entryPoint) {\r\n this._gatherBlocks(block.entryPoint, list);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear the current geometry and set it to a default state\r\n */\r\n public setToDefault() {\r\n this.clear();\r\n\r\n this.editorData = null;\r\n\r\n // Source\r\n const dataBlock = new BoxBlock(\"Box\");\r\n dataBlock.autoConfigure();\r\n\r\n // Final output\r\n const output = new GeometryOutputBlock(\"Geometry Output\");\r\n dataBlock.geometry.connectTo(output.geometry);\r\n\r\n this.outputBlock = output;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current geometry.\r\n * @param name defines the name to use for the new geometry\r\n * @returns the new geometry\r\n */\r\n public clone(name: string): NodeGeometry {\r\n const serializationObject = this.serialize();\r\n\r\n const clone = SerializationHelper.Clone(() => new NodeGeometry(name), this);\r\n clone.name = name;\r\n\r\n clone.parseSerializedObject(serializationObject);\r\n clone._buildId = this._buildId;\r\n clone.build(false);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Serializes this geometry in a JSON representation\r\n * @param selectedBlocks defines the list of blocks to save (if null the whole geometry will be saved)\r\n * @returns the serialized geometry object\r\n */\r\n public serialize(selectedBlocks?: NodeGeometryBlock[]): any {\r\n const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);\r\n serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy\r\n\r\n let blocks: NodeGeometryBlock[] = [];\r\n\r\n if (selectedBlocks) {\r\n blocks = selectedBlocks;\r\n } else {\r\n serializationObject.customType = \"BABYLON.NodeGeometry\";\r\n if (this.outputBlock) {\r\n serializationObject.outputNodeId = this.outputBlock.uniqueId;\r\n }\r\n }\r\n\r\n // Blocks\r\n serializationObject.blocks = [];\r\n\r\n for (const block of blocks) {\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n\r\n if (!selectedBlocks) {\r\n for (const block of this.attachedBlocks) {\r\n if (blocks.indexOf(block) !== -1) {\r\n continue;\r\n }\r\n serializationObject.blocks.push(block.serialize());\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Disposes the ressources\r\n */\r\n public dispose(): void {\r\n for (const block of this.attachedBlocks) {\r\n block.dispose();\r\n }\r\n\r\n this.attachedBlocks.length = 0;\r\n this.onBuildObservable.clear();\r\n }\r\n\r\n /**\r\n * Creates a new node geometry set to default basic configuration\r\n * @param name defines the name of the geometry\r\n * @returns a new NodeGeometry\r\n */\r\n public static CreateDefault(name: string) {\r\n const nodeGeometry = new NodeGeometry(name);\r\n\r\n nodeGeometry.setToDefault();\r\n nodeGeometry.build();\r\n\r\n return nodeGeometry;\r\n }\r\n\r\n /**\r\n * Creates a node geometry from parsed geometry data\r\n * @param source defines the JSON representation of the geometry\r\n * @returns a new node geometry\r\n */\r\n public static Parse(source: any): NodeGeometry {\r\n const nodeGeometry = SerializationHelper.Parse(() => new NodeGeometry(source.name), source, null);\r\n\r\n nodeGeometry.parseSerializedObject(source);\r\n nodeGeometry.build();\r\n\r\n return nodeGeometry;\r\n }\r\n\r\n /**\r\n * Creates a node geometry from a snippet saved by the node geometry editor\r\n * @param snippetId defines the snippet to load\r\n * @param nodeGeometry defines a node geometry to update (instead of creating a new one)\r\n * @param skipBuild defines whether to build the node geometry\r\n * @returns a promise that will resolve to the new node geometry\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public static ParseFromSnippetAsync(snippetId: string, nodeGeometry?: NodeGeometry, skipBuild: boolean = false): Promise<NodeGeometry> {\r\n if (snippetId === \"_BLANK\") {\r\n return Promise.resolve(NodeGeometry.CreateDefault(\"blank\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.nodeGeometry);\r\n\r\n if (!nodeGeometry) {\r\n nodeGeometry = SerializationHelper.Parse(() => new NodeGeometry(snippetId), serializationObject, null);\r\n }\r\n\r\n nodeGeometry.parseSerializedObject(serializationObject);\r\n nodeGeometry.snippetId = snippetId;\r\n\r\n try {\r\n if (!skipBuild) {\r\n nodeGeometry.build();\r\n }\r\n resolve(nodeGeometry);\r\n } catch (err) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(err);\r\n }\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n}\r\n"]}
package/Meshes/mesh.js CHANGED
@@ -3906,8 +3906,8 @@ export class Mesh extends AbstractMesh {
3906
3906
  * @param multiMultiMaterials when true (false default), subdivide mesh into subMeshes with multiple materials, ignores subdivideWithSubMeshes.
3907
3907
  * @returns a new mesh
3908
3908
  */
3909
- static MergeMeshesAsync(meshes, disposeSource = true, allow32BitsIndices, meshSubclass, subdivideWithSubMeshes, multiMultiMaterials) {
3910
- return runCoroutineAsync(Mesh._MergeMeshesCoroutine(meshes, disposeSource, allow32BitsIndices, meshSubclass, subdivideWithSubMeshes, multiMultiMaterials, true), createYieldingScheduler());
3909
+ static async MergeMeshesAsync(meshes, disposeSource = true, allow32BitsIndices, meshSubclass, subdivideWithSubMeshes, multiMultiMaterials) {
3910
+ return await runCoroutineAsync(Mesh._MergeMeshesCoroutine(meshes, disposeSource, allow32BitsIndices, meshSubclass, subdivideWithSubMeshes, multiMultiMaterials, true), createYieldingScheduler());
3911
3911
  }
3912
3912
  static *_MergeMeshesCoroutine(meshes, disposeSource = true, allow32BitsIndices, meshSubclass, subdivideWithSubMeshes, multiMultiMaterials, isAsync) {
3913
3913
  // Remove any null/undefined entries from the mesh array