@onerjs/core 8.53.5 → 8.53.6

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 (841) hide show
  1. package/Animations/animationGroup.d.ts +0 -1
  2. package/Animations/animationGroup.js +0 -1
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Animations/animationGroup.pure.js +2 -0
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/runtimeAnimation.js +11 -0
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/Audio/audioSceneComponent.pure.js +1 -1
  9. package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
  10. package/AudioV2/abstractAudio/abstractSound.js +7 -2
  11. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  12. package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +3 -1
  13. package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
  14. package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
  15. package/AudioV2/abstractAudio/staticSound.js +17 -1
  16. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  17. package/AudioV2/abstractAudio/staticSoundInstance.d.ts +4 -2
  18. package/AudioV2/abstractAudio/staticSoundInstance.js.map +1 -1
  19. package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
  20. package/AudioV2/abstractAudio/streamingSound.js +9 -1
  21. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  22. package/AudioV2/webAudio/webAudioStaticSound.d.ts +7 -1
  23. package/AudioV2/webAudio/webAudioStaticSound.js +56 -8
  24. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  25. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -1
  26. package/AudioV2/webAudio/webAudioStreamingSound.js +16 -4
  27. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  28. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +2 -2
  29. package/BakedVertexAnimation/bakedVertexAnimationManager.js +151 -121
  30. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  31. package/Behaviors/Cameras/interpolatingBehavior.d.ts +17 -2
  32. package/Behaviors/Cameras/interpolatingBehavior.js +53 -23
  33. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  34. package/Bones/bone.pure.js +3 -3
  35. package/Buffers/buffer.pure.js +0 -12
  36. package/Buffers/buffer.pure.js.map +1 -1
  37. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +141 -126
  38. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  39. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +2 -1
  40. package/Cameras/Inputs/BaseCameraPointersInput.js +290 -277
  41. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  42. package/Cameras/Inputs/arcRotateCameraGamepadInput.js +115 -102
  43. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  44. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +3 -0
  45. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +334 -273
  46. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  47. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +273 -258
  48. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  49. package/Cameras/Inputs/arcRotateCameraPointersInput.js +237 -213
  50. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  51. package/Cameras/Inputs/flyCameraKeyboardInput.js +199 -168
  52. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  53. package/Cameras/Inputs/flyCameraMouseInput.js +243 -229
  54. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  55. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +311 -266
  56. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  57. package/Cameras/Inputs/followCameraMouseWheelInput.js +139 -119
  58. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  59. package/Cameras/Inputs/followCameraPointersInput.js +239 -203
  60. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  61. package/Cameras/Inputs/freeCameraGamepadInput.js +127 -114
  62. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  63. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +278 -244
  64. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  65. package/Cameras/Inputs/freeCameraMouseInput.js +216 -202
  66. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  67. package/Cameras/Inputs/freeCameraMouseWheelInput.js +368 -353
  68. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  69. package/Cameras/Inputs/freeCameraTouchInput.js +185 -172
  70. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  71. package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +2 -0
  72. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +291 -246
  73. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  74. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +11 -1
  75. package/Cameras/Inputs/geospatialCameraPointersInput.js +18 -2
  76. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  77. package/Cameras/Inputs/orbitCameraPointersInput.js +112 -96
  78. package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -1
  79. package/Cameras/VR/vrExperienceHelper.d.ts +0 -2
  80. package/Cameras/VR/vrExperienceHelper.js +0 -2
  81. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  82. package/Cameras/VR/vrExperienceHelper.pure.js +5 -0
  83. package/Cameras/VR/vrExperienceHelper.pure.js.map +1 -1
  84. package/Cameras/arcRotateCamera.pure.js +1559 -1479
  85. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  86. package/Cameras/camera.pure.js +1225 -1178
  87. package/Cameras/camera.pure.js.map +1 -1
  88. package/Cameras/flyCamera.pure.js +369 -351
  89. package/Cameras/flyCamera.pure.js.map +1 -1
  90. package/Cameras/followCamera.pure.js +229 -192
  91. package/Cameras/followCamera.pure.js.map +1 -1
  92. package/Cameras/freeCamera.pure.js +373 -351
  93. package/Cameras/freeCamera.pure.js.map +1 -1
  94. package/Cameras/geospatialCamera.pure.d.ts +30 -7
  95. package/Cameras/geospatialCamera.pure.js +502 -457
  96. package/Cameras/geospatialCamera.pure.js.map +1 -1
  97. package/Cameras/geospatialCameraMovement.js +2 -2
  98. package/Cameras/geospatialCameraMovement.js.map +1 -1
  99. package/Cameras/targetCamera.pure.d.ts +7 -0
  100. package/Cameras/targetCamera.pure.js +550 -509
  101. package/Cameras/targetCamera.pure.js.map +1 -1
  102. package/Cameras/universalCamera.pure.js +98 -85
  103. package/Cameras/universalCamera.pure.js.map +1 -1
  104. package/Collisions/gpuPicker.d.ts +111 -4
  105. package/Collisions/gpuPicker.js +696 -119
  106. package/Collisions/gpuPicker.js.map +1 -1
  107. package/Compute/computeShader.pure.js +372 -355
  108. package/Compute/computeShader.pure.js.map +1 -1
  109. package/Culling/Helper/transformFeedbackBoundingHelper.pure.js +2 -2
  110. package/Decorators/nodeDecorator.d.ts +11 -1
  111. package/Decorators/nodeDecorator.js +43 -6
  112. package/Decorators/nodeDecorator.js.map +1 -1
  113. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js +8 -0
  114. package/Engines/AbstractEngine/abstractEngine.loadFile.pure.js.map +1 -1
  115. package/Engines/Native/nativeHelpers.js +15 -0
  116. package/Engines/Native/nativeHelpers.js.map +1 -1
  117. package/Engines/Native/nativeInterfaces.d.ts +7 -2
  118. package/Engines/Native/nativeInterfaces.js.map +1 -1
  119. package/Engines/Native/nativeRenderTargetWrapper.d.ts +5 -0
  120. package/Engines/Native/nativeRenderTargetWrapper.js +35 -1
  121. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  122. package/Engines/Processors/shaderProcessor.js +5 -3
  123. package/Engines/Processors/shaderProcessor.js.map +1 -1
  124. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
  125. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
  126. package/Engines/WebGPU/webgpuClearQuad.pure.js +7 -1
  127. package/Engines/WebGPU/webgpuClearQuad.pure.js.map +1 -1
  128. package/Engines/abstractEngine.functions.d.ts +8 -2
  129. package/Engines/abstractEngine.functions.js +12 -4
  130. package/Engines/abstractEngine.functions.js.map +1 -1
  131. package/Engines/abstractEngine.pure.d.ts +20 -1
  132. package/Engines/abstractEngine.pure.js +21 -134
  133. package/Engines/abstractEngine.pure.js.map +1 -1
  134. package/Engines/engine.d.ts +208 -0
  135. package/Engines/engine.pure.js +0 -15
  136. package/Engines/engine.pure.js.map +1 -1
  137. package/Engines/nullEngine.pure.d.ts +66 -0
  138. package/Engines/nullEngine.pure.js +97 -0
  139. package/Engines/nullEngine.pure.js.map +1 -1
  140. package/Engines/thinEngine.pure.d.ts +0 -13
  141. package/Engines/thinEngine.pure.js +4 -23
  142. package/Engines/thinEngine.pure.js.map +1 -1
  143. package/Engines/thinNativeEngine.d.ts +0 -1
  144. package/Engines/thinNativeEngine.js +0 -1
  145. package/Engines/thinNativeEngine.js.map +1 -1
  146. package/Engines/thinNativeEngine.pure.d.ts +27 -0
  147. package/Engines/thinNativeEngine.pure.js +383 -17
  148. package/Engines/thinNativeEngine.pure.js.map +1 -1
  149. package/Engines/webgpuEngine.d.ts +1 -0
  150. package/Engines/webgpuEngine.js +1 -0
  151. package/Engines/webgpuEngine.js.map +1 -1
  152. package/Engines/webgpuEngine.pure.d.ts +9 -0
  153. package/Engines/webgpuEngine.pure.js +7 -0
  154. package/Engines/webgpuEngine.pure.js.map +1 -1
  155. package/FlowGraph/flowGraph.js +9 -0
  156. package/FlowGraph/flowGraph.js.map +1 -1
  157. package/FlowGraph/flowGraphContext.js +597 -584
  158. package/FlowGraph/flowGraphContext.js.map +1 -1
  159. package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
  160. package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
  161. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  162. package/FlowGraph/serialization.d.ts +11 -0
  163. package/FlowGraph/serialization.js +11 -1
  164. package/FlowGraph/serialization.js.map +1 -1
  165. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js +182 -170
  166. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.pure.js.map +1 -1
  167. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js +196 -184
  168. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.pure.js.map +1 -1
  169. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js +222 -210
  170. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.pure.js.map +1 -1
  171. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +123 -111
  172. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +158 -146
  174. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -1
  175. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js +63 -51
  176. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.pure.js.map +1 -1
  177. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js +122 -110
  178. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.pure.js.map +1 -1
  179. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js +76 -64
  180. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.pure.js.map +1 -1
  181. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js +89 -77
  182. package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.pure.js.map +1 -1
  183. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js +134 -122
  184. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.pure.js.map +1 -1
  185. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js +58 -46
  186. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.pure.js.map +1 -1
  187. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js +107 -95
  188. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.pure.js.map +1 -1
  189. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js +181 -169
  190. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.pure.js.map +1 -1
  191. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js +63 -51
  192. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.pure.js.map +1 -1
  193. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js +63 -51
  194. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.pure.js.map +1 -1
  195. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js +76 -64
  196. package/FrameGraph/Node/Blocks/PostProcesses/grainPostProcessBlock.pure.js.map +1 -1
  197. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js +246 -234
  198. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.pure.js.map +1 -1
  199. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js +108 -96
  200. package/FrameGraph/Node/Blocks/PostProcesses/motionBlurPostProcessBlock.pure.js.map +1 -1
  201. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js +87 -75
  202. package/FrameGraph/Node/Blocks/PostProcesses/screenSpaceCurvaturePostProcessBlock.pure.js.map +1 -1
  203. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js +76 -64
  204. package/FrameGraph/Node/Blocks/PostProcesses/sharpenPostProcessBlock.pure.js.map +1 -1
  205. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js +313 -301
  206. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.pure.js.map +1 -1
  207. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js +502 -490
  208. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.pure.js.map +1 -1
  209. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js +147 -135
  210. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.pure.js.map +1 -1
  211. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js +90 -78
  212. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.pure.js.map +1 -1
  213. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js +179 -167
  214. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.pure.js.map +1 -1
  215. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +462 -451
  216. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  217. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +265 -253
  218. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  219. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js +204 -192
  220. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.pure.js.map +1 -1
  221. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +611 -550
  222. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  223. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js +320 -308
  224. package/FrameGraph/Node/Blocks/Rendering/iblShadowsRendererBlock.pure.js.map +1 -1
  225. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js +87 -75
  226. package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.pure.js.map +1 -1
  227. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js +154 -142
  228. package/FrameGraph/Node/Blocks/Textures/clearBlock.pure.js.map +1 -1
  229. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js +150 -138
  230. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.pure.js.map +1 -1
  231. package/FrameGraph/Node/Blocks/inputBlock.pure.js +270 -256
  232. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  233. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js +95 -83
  234. package/FrameGraph/Node/Blocks/lightingVolumeBlock.pure.js.map +1 -1
  235. package/FrameGraph/Node/nodeRenderGraph.js +715 -693
  236. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  237. package/FrameGraph/Node/nodeRenderGraphBlock.js +548 -533
  238. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  239. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
  240. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
  241. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  242. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +0 -1
  243. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +0 -1
  244. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -1
  245. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
  246. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +66 -35
  247. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  248. package/Helpers/environmentHelper.js +2 -2
  249. package/Helpers/environmentHelper.js.map +1 -1
  250. package/Layers/effectLayer.js +529 -519
  251. package/Layers/effectLayer.js.map +1 -1
  252. package/Layers/glowLayer.pure.js +428 -413
  253. package/Layers/glowLayer.pure.js.map +1 -1
  254. package/Layers/highlightLayer.pure.js +473 -458
  255. package/Layers/highlightLayer.pure.js.map +1 -1
  256. package/Layers/selectionOutlineLayer.pure.js +360 -345
  257. package/Layers/selectionOutlineLayer.pure.js.map +1 -1
  258. package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
  259. package/Lights/Clustered/clusteredLightContainer.pure.js +583 -558
  260. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  261. package/Lights/Shadows/shadowGenerator.js +6 -1
  262. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  263. package/Lights/areaLight.pure.js +61 -39
  264. package/Lights/areaLight.pure.js.map +1 -1
  265. package/Lights/directionalLight.pure.js +308 -284
  266. package/Lights/directionalLight.pure.js.map +1 -1
  267. package/Lights/hemisphericLight.pure.js +123 -104
  268. package/Lights/hemisphericLight.pure.js.map +1 -1
  269. package/Lights/light.d.ts +5 -3
  270. package/Lights/light.js +869 -827
  271. package/Lights/light.js.map +1 -1
  272. package/Lights/pointLight.pure.js +185 -174
  273. package/Lights/pointLight.pure.js.map +1 -1
  274. package/Lights/rectAreaLight.pure.d.ts +17 -0
  275. package/Lights/rectAreaLight.pure.js +238 -159
  276. package/Lights/rectAreaLight.pure.js.map +1 -1
  277. package/Lights/shadowLight.js +280 -268
  278. package/Lights/shadowLight.js.map +1 -1
  279. package/Lights/spotLight.pure.js +460 -427
  280. package/Lights/spotLight.pure.js.map +1 -1
  281. package/Loading/Plugins/babylonFileLoader.pure.js +17 -5
  282. package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
  283. package/Loading/sceneLoader.d.ts +5 -1
  284. package/Loading/sceneLoader.js +299 -402
  285. package/Loading/sceneLoader.js.map +1 -1
  286. package/Materials/Background/backgroundMaterial.pure.d.ts +18 -18
  287. package/Materials/Background/backgroundMaterial.pure.js +949 -794
  288. package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
  289. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.d.ts +15 -0
  290. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +34 -1
  291. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  292. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +9 -0
  293. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +26 -2
  294. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  295. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.d.ts +2 -1
  296. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +169 -149
  297. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  298. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +1 -1
  299. package/Materials/Node/Blocks/Dual/lightBlock.pure.js +442 -429
  300. package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
  301. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js +396 -383
  302. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js.map +1 -1
  303. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js +237 -220
  304. package/Materials/Node/Blocks/Dual/sceneDepthBlock.pure.js.map +1 -1
  305. package/Materials/Node/Blocks/Dual/textureBlock.pure.js +1 -1
  306. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js +150 -133
  307. package/Materials/Node/Blocks/Fragment/ambientOcclusionBlock.pure.js.map +1 -1
  308. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +265 -250
  309. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  310. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js +159 -142
  311. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.pure.js.map +1 -1
  312. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +214 -201
  313. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  314. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js +419 -400
  315. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.pure.js.map +1 -1
  316. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +3 -1
  317. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  318. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js +302 -289
  319. package/Materials/Node/Blocks/PBR/clearCoatBlock.pure.js.map +1 -1
  320. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1327 -1272
  321. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  322. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js +352 -337
  323. package/Materials/Node/Blocks/PBR/reflectionBlock.pure.js.map +1 -1
  324. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js +297 -277
  325. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js.map +1 -1
  326. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js +146 -131
  327. package/Materials/Node/Blocks/PBR/sheenBlock.pure.js.map +1 -1
  328. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js +158 -145
  329. package/Materials/Node/Blocks/PBR/subSurfaceBlock.pure.js.map +1 -1
  330. package/Materials/Node/Blocks/clampBlock.pure.js +92 -77
  331. package/Materials/Node/Blocks/clampBlock.pure.js.map +1 -1
  332. package/Materials/Node/Blocks/cloudBlock.pure.js +145 -132
  333. package/Materials/Node/Blocks/cloudBlock.pure.js.map +1 -1
  334. package/Materials/Node/Blocks/conditionalBlock.pure.js +182 -169
  335. package/Materials/Node/Blocks/conditionalBlock.pure.js.map +1 -1
  336. package/Materials/Node/Blocks/curveBlock.pure.js +259 -246
  337. package/Materials/Node/Blocks/curveBlock.pure.js.map +1 -1
  338. package/Materials/Node/Blocks/debugBlock.pure.js +119 -106
  339. package/Materials/Node/Blocks/debugBlock.pure.js.map +1 -1
  340. package/Materials/Node/Blocks/loopBlock.pure.js +123 -110
  341. package/Materials/Node/Blocks/loopBlock.pure.js.map +1 -1
  342. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js +185 -172
  343. package/Materials/Node/Blocks/meshAttributeExistsBlock.pure.js.map +1 -1
  344. package/Materials/Node/Blocks/remapBlock.pure.js +127 -112
  345. package/Materials/Node/Blocks/remapBlock.pure.js.map +1 -1
  346. package/Materials/Node/Blocks/transformBlock.pure.js +196 -185
  347. package/Materials/Node/Blocks/transformBlock.pure.js.map +1 -1
  348. package/Materials/Node/Blocks/triPlanarBlock.pure.js +451 -438
  349. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  350. package/Materials/Node/Blocks/trigonometryBlock.pure.js +184 -171
  351. package/Materials/Node/Blocks/trigonometryBlock.pure.js.map +1 -1
  352. package/Materials/Node/Blocks/waveBlock.pure.js +97 -84
  353. package/Materials/Node/Blocks/waveBlock.pure.js.map +1 -1
  354. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js +276 -263
  355. package/Materials/Node/Blocks/worleyNoise3DBlock.pure.js.map +1 -1
  356. package/Materials/Node/nodeMaterial.pure.js +1765 -1737
  357. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  358. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  359. package/Materials/PBR/openpbrMaterial.pure.d.ts +102 -102
  360. package/Materials/PBR/openpbrMaterial.pure.js +3115 -2243
  361. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  362. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
  363. package/Materials/PBR/pbrAnisotropicConfiguration.js +255 -227
  364. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  365. package/Materials/PBR/pbrBRDFConfiguration.d.ts +9 -9
  366. package/Materials/PBR/pbrBRDFConfiguration.js +203 -155
  367. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  368. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -1
  369. package/Materials/PBR/pbrBaseMaterial.pure.js +1751 -1736
  370. package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
  371. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +13 -13
  372. package/Materials/PBR/pbrBaseSimpleMaterial.js +205 -117
  373. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  374. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +9 -9
  375. package/Materials/PBR/pbrClearCoatConfiguration.js +464 -406
  376. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  377. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -3
  378. package/Materials/PBR/pbrIridescenceConfiguration.js +271 -239
  379. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  380. package/Materials/PBR/pbrMaterial.pure.d.ts +66 -66
  381. package/Materials/PBR/pbrMaterial.pure.js +1041 -685
  382. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  383. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.d.ts +5 -5
  384. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js +176 -115
  385. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js.map +1 -1
  386. package/Materials/PBR/pbrSheenConfiguration.d.ts +7 -7
  387. package/Materials/PBR/pbrSheenConfiguration.js +314 -270
  388. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  389. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.d.ts +5 -5
  390. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js +172 -117
  391. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js.map +1 -1
  392. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +16 -16
  393. package/Materials/PBR/pbrSubSurfaceConfiguration.js +864 -764
  394. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  395. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
  396. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
  397. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
  398. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
  399. package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
  400. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
  401. package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
  402. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
  403. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
  404. package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
  405. package/Materials/Textures/HTML/htmlTexture.js +455 -0
  406. package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
  407. package/Materials/Textures/HTML/index.d.ts +4 -0
  408. package/Materials/Textures/HTML/index.js +5 -0
  409. package/Materials/Textures/HTML/index.js.map +1 -0
  410. package/Materials/Textures/HTML/pure.d.ts +5 -0
  411. package/Materials/Textures/HTML/pure.js +6 -0
  412. package/Materials/Textures/HTML/pure.js.map +1 -0
  413. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +671 -643
  414. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  415. package/Materials/Textures/baseTexture.pure.js +880 -825
  416. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  417. package/Materials/Textures/cubeTexture.d.ts +0 -1
  418. package/Materials/Textures/cubeTexture.js +0 -1
  419. package/Materials/Textures/cubeTexture.js.map +1 -1
  420. package/Materials/Textures/cubeTexture.pure.js +368 -333
  421. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  422. package/Materials/Textures/dynamicTexture.d.ts +0 -1
  423. package/Materials/Textures/dynamicTexture.js +0 -1
  424. package/Materials/Textures/dynamicTexture.js.map +1 -1
  425. package/Materials/Textures/dynamicTexture.pure.js +2 -0
  426. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  427. package/Materials/Textures/htmlElementTexture.d.ts +0 -2
  428. package/Materials/Textures/htmlElementTexture.js +0 -2
  429. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  430. package/Materials/Textures/htmlElementTexture.pure.js +4 -0
  431. package/Materials/Textures/htmlElementTexture.pure.js.map +1 -1
  432. package/Materials/Textures/index.d.ts +1 -0
  433. package/Materials/Textures/index.js +1 -1
  434. package/Materials/Textures/index.js.map +1 -1
  435. package/Materials/Textures/multiRenderTarget.d.ts +0 -1
  436. package/Materials/Textures/multiRenderTarget.js +0 -1
  437. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  438. package/Materials/Textures/multiRenderTarget.pure.js +2 -0
  439. package/Materials/Textures/multiRenderTarget.pure.js.map +1 -1
  440. package/Materials/Textures/pure.d.ts +1 -0
  441. package/Materials/Textures/pure.js +1 -0
  442. package/Materials/Textures/pure.js.map +1 -1
  443. package/Materials/Textures/texture.pure.js +961 -923
  444. package/Materials/Textures/texture.pure.js.map +1 -1
  445. package/Materials/Textures/videoTexture.pure.d.ts +3 -0
  446. package/Materials/Textures/videoTexture.pure.js +450 -401
  447. package/Materials/Textures/videoTexture.pure.js.map +1 -1
  448. package/Materials/colorCurves.pure.js +510 -477
  449. package/Materials/colorCurves.pure.js.map +1 -1
  450. package/Materials/effect.pure.js +0 -7
  451. package/Materials/effect.pure.js.map +1 -1
  452. package/Materials/imageProcessing.js +12 -4
  453. package/Materials/imageProcessing.js.map +1 -1
  454. package/Materials/imageProcessingConfiguration.pure.js +647 -587
  455. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  456. package/Materials/material.decalMapConfiguration.pure.d.ts +2 -2
  457. package/Materials/material.decalMapConfiguration.pure.js +149 -130
  458. package/Materials/material.decalMapConfiguration.pure.js.map +1 -1
  459. package/Materials/material.detailMapConfiguration.d.ts +3 -3
  460. package/Materials/material.detailMapConfiguration.js +213 -175
  461. package/Materials/material.detailMapConfiguration.js.map +1 -1
  462. package/Materials/material.pure.js +1815 -1721
  463. package/Materials/material.pure.js.map +1 -1
  464. package/Materials/materialPluginBase.pure.js +270 -249
  465. package/Materials/materialPluginBase.pure.js.map +1 -1
  466. package/Materials/materialPluginManager.pure.js +18 -8
  467. package/Materials/materialPluginManager.pure.js.map +1 -1
  468. package/Materials/materialStencilState.js +211 -200
  469. package/Materials/materialStencilState.js.map +1 -1
  470. package/Materials/meshDebugPluginMaterial.pure.d.ts +2 -2
  471. package/Materials/meshDebugPluginMaterial.pure.js +397 -275
  472. package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
  473. package/Materials/standardMaterial.pure.d.ts +32 -32
  474. package/Materials/standardMaterial.pure.js +1804 -1394
  475. package/Materials/standardMaterial.pure.js.map +1 -1
  476. package/Maths/math.color.pure.js +5 -5
  477. package/Maths/math.functions.js +38 -30
  478. package/Maths/math.functions.js.map +1 -1
  479. package/Maths/math.vector.pure.js +25 -25
  480. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +18 -8
  481. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  482. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +86 -1
  483. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +255 -104
  484. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  485. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +39 -0
  486. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +322 -0
  487. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -0
  488. package/Meshes/GreasedLine/greasedLineMesh.pure.js +4 -4
  489. package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
  490. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +107 -94
  491. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  492. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js +276 -263
  493. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.pure.js.map +1 -1
  494. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js +247 -232
  495. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.pure.js.map +1 -1
  496. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +299 -284
  497. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
  498. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js +196 -181
  499. package/Meshes/Node/Blocks/Set/aggregatorBlock.pure.js.map +1 -1
  500. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js +198 -179
  501. package/Meshes/Node/Blocks/Set/latticeBlock.pure.js.map +1 -1
  502. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js +151 -138
  503. package/Meshes/Node/Blocks/Set/setColorsBlock.pure.js.map +1 -1
  504. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js +107 -94
  505. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.pure.js.map +1 -1
  506. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js +138 -125
  507. package/Meshes/Node/Blocks/Set/setNormalsBlock.pure.js.map +1 -1
  508. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js +213 -200
  509. package/Meshes/Node/Blocks/Set/setPositionsBlock.pure.js.map +1 -1
  510. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js +138 -125
  511. package/Meshes/Node/Blocks/Set/setTangentsBlock.pure.js.map +1 -1
  512. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js +179 -164
  513. package/Meshes/Node/Blocks/Set/setUVsBlock.pure.js.map +1 -1
  514. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js +183 -170
  515. package/Meshes/Node/Blocks/Sources/boxBlock.pure.js.map +1 -1
  516. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js +125 -112
  517. package/Meshes/Node/Blocks/Sources/capsuleBlock.pure.js.map +1 -1
  518. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js +153 -140
  519. package/Meshes/Node/Blocks/Sources/cylinderBlock.pure.js.map +1 -1
  520. package/Meshes/Node/Blocks/Sources/discBlock.pure.js +112 -99
  521. package/Meshes/Node/Blocks/Sources/discBlock.pure.js.map +1 -1
  522. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js +133 -120
  523. package/Meshes/Node/Blocks/Sources/gridBlock.pure.js.map +1 -1
  524. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js +128 -115
  525. package/Meshes/Node/Blocks/Sources/icoSphereBlock.pure.js.map +1 -1
  526. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js +116 -103
  527. package/Meshes/Node/Blocks/Sources/meshBlock.pure.js.map +1 -1
  528. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js +160 -147
  529. package/Meshes/Node/Blocks/Sources/planeBlock.pure.js.map +1 -1
  530. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js +144 -131
  531. package/Meshes/Node/Blocks/Sources/sphereBlock.pure.js.map +1 -1
  532. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js +112 -99
  533. package/Meshes/Node/Blocks/Sources/torusBlock.pure.js.map +1 -1
  534. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js +200 -185
  535. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.pure.js.map +1 -1
  536. package/Meshes/Node/Blocks/bevelBlock.pure.js +111 -98
  537. package/Meshes/Node/Blocks/bevelBlock.pure.js.map +1 -1
  538. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +182 -165
  539. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
  540. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js +89 -76
  541. package/Meshes/Node/Blocks/cleanGeometryBlock.pure.js.map +1 -1
  542. package/Meshes/Node/Blocks/conditionBlock.pure.js +184 -169
  543. package/Meshes/Node/Blocks/conditionBlock.pure.js.map +1 -1
  544. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js +270 -255
  545. package/Meshes/Node/Blocks/extrudeGeometryBlock.pure.js.map +1 -1
  546. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js +172 -159
  547. package/Meshes/Node/Blocks/geometryCollectionBlock.pure.js.map +1 -1
  548. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js +230 -217
  549. package/Meshes/Node/Blocks/geometryCurveBlock.pure.js.map +1 -1
  550. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js +256 -245
  551. package/Meshes/Node/Blocks/geometryEaseBlock.pure.js.map +1 -1
  552. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +206 -189
  553. package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
  554. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js +166 -153
  555. package/Meshes/Node/Blocks/geometryTransformBlock.pure.js.map +1 -1
  556. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js +221 -208
  557. package/Meshes/Node/Blocks/geometryTrigonometryBlock.pure.js.map +1 -1
  558. package/Meshes/Node/Blocks/mappingBlock.pure.js +150 -137
  559. package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
  560. package/Meshes/Node/Blocks/mathBlock.pure.js +269 -256
  561. package/Meshes/Node/Blocks/mathBlock.pure.js.map +1 -1
  562. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js +141 -128
  563. package/Meshes/Node/Blocks/mergeGeometryBlock.pure.js.map +1 -1
  564. package/Meshes/Node/Blocks/randomBlock.pure.js +161 -148
  565. package/Meshes/Node/Blocks/randomBlock.pure.js.map +1 -1
  566. package/Meshes/Node/Blocks/subdivideBlock.pure.js +102 -87
  567. package/Meshes/Node/Blocks/subdivideBlock.pure.js.map +1 -1
  568. package/Meshes/Node/nodeGeometry.js +560 -538
  569. package/Meshes/Node/nodeGeometry.js.map +1 -1
  570. package/Meshes/Node/nodeGeometryBlock.js +473 -458
  571. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  572. package/Meshes/abstractMesh.pure.js +2218 -2207
  573. package/Meshes/abstractMesh.pure.js.map +1 -1
  574. package/Meshes/geometry.js +30 -15
  575. package/Meshes/geometry.js.map +1 -1
  576. package/Meshes/mesh.pure.js +26 -14
  577. package/Meshes/mesh.pure.js.map +1 -1
  578. package/Meshes/mesh.vertexData.js +1665 -1655
  579. package/Meshes/mesh.vertexData.js.map +1 -1
  580. package/Meshes/transformNode.pure.js +1400 -1372
  581. package/Meshes/transformNode.pure.js.map +1 -1
  582. package/Misc/decorators.d.ts +34 -19
  583. package/Misc/decorators.functions.d.ts +33 -2
  584. package/Misc/decorators.functions.js +114 -35
  585. package/Misc/decorators.functions.js.map +1 -1
  586. package/Misc/decorators.js +96 -68
  587. package/Misc/decorators.js.map +1 -1
  588. package/Misc/decorators.serialization.js +47 -40
  589. package/Misc/decorators.serialization.js.map +1 -1
  590. package/Misc/decorators.serializationUtilities.d.ts +24 -0
  591. package/Misc/decorators.serializationUtilities.js +20 -0
  592. package/Misc/decorators.serializationUtilities.js.map +1 -0
  593. package/Misc/dumpTools.pure.js +43 -33
  594. package/Misc/dumpTools.pure.js.map +1 -1
  595. package/Misc/fileTools.pure.js +8 -0
  596. package/Misc/fileTools.pure.js.map +1 -1
  597. package/Misc/observable.pure.js +0 -7
  598. package/Misc/observable.pure.js.map +1 -1
  599. package/Misc/snapshotRenderingHelper.d.ts +4 -1
  600. package/Misc/snapshotRenderingHelper.js.map +1 -1
  601. package/Misc/symbolMetadataPolyfill.d.ts +11 -0
  602. package/Misc/symbolMetadataPolyfill.js +22 -0
  603. package/Misc/symbolMetadataPolyfill.js.map +1 -0
  604. package/Misc/tools.pure.js +2 -2
  605. package/Misc/tools.pure.js.map +1 -1
  606. package/Morph/morphTarget.js +382 -365
  607. package/Morph/morphTarget.js.map +1 -1
  608. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js +160 -145
  609. package/Particles/Node/Blocks/Conditions/particleConditionBlock.pure.js.map +1 -1
  610. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js +187 -174
  611. package/Particles/Node/Blocks/Emitters/coneShapeBlock.pure.js.map +1 -1
  612. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js +238 -219
  613. package/Particles/Node/Blocks/Emitters/meshShapeBlock.pure.js.map +1 -1
  614. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js +140 -115
  615. package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.pure.js.map +1 -1
  616. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js +157 -144
  617. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.pure.js.map +1 -1
  618. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js +133 -119
  619. package/Particles/Node/Blocks/Triggers/particleTriggerBlock.pure.js.map +1 -1
  620. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js +93 -80
  621. package/Particles/Node/Blocks/Update/alignAngleBlock.pure.js.map +1 -1
  622. package/Particles/Node/Blocks/particleDebugBlock.pure.js +117 -105
  623. package/Particles/Node/Blocks/particleDebugBlock.pure.js.map +1 -1
  624. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js +105 -92
  625. package/Particles/Node/Blocks/particleFloatToIntBlock.pure.js.map +1 -1
  626. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js +82 -69
  627. package/Particles/Node/Blocks/particleGradientValueBlock.pure.js.map +1 -1
  628. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js +113 -101
  629. package/Particles/Node/Blocks/particleLocalVariableBlock.pure.js.map +1 -1
  630. package/Particles/Node/Blocks/particleMathBlock.pure.js +278 -265
  631. package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
  632. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js +155 -142
  633. package/Particles/Node/Blocks/particleNumberMathBlock.pure.js.map +1 -1
  634. package/Particles/Node/Blocks/particleRandomBlock.pure.js +156 -143
  635. package/Particles/Node/Blocks/particleRandomBlock.pure.js.map +1 -1
  636. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js +217 -204
  637. package/Particles/Node/Blocks/particleTrigonometryBlock.pure.js.map +1 -1
  638. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js +106 -93
  639. package/Particles/Node/Blocks/particleVectorMathBlock.pure.js.map +1 -1
  640. package/Particles/Node/Blocks/systemBlock.pure.js +366 -330
  641. package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
  642. package/Particles/Node/nodeParticleBlock.js +339 -324
  643. package/Particles/Node/nodeParticleBlock.js.map +1 -1
  644. package/Particles/Node/nodeParticleSystemSet.js +494 -473
  645. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  646. package/Particles/gpuParticleSystem.d.ts +0 -1
  647. package/Particles/gpuParticleSystem.js +0 -1
  648. package/Particles/gpuParticleSystem.js.map +1 -1
  649. package/Particles/gpuParticleSystem.pure.d.ts +4 -3
  650. package/Particles/gpuParticleSystem.pure.js +27 -16
  651. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  652. package/Particles/particleSystem.pure.js +57 -2
  653. package/Particles/particleSystem.pure.js.map +1 -1
  654. package/Particles/thinParticleSystem.d.ts +0 -1
  655. package/Particles/thinParticleSystem.js +0 -1
  656. package/Particles/thinParticleSystem.js.map +1 -1
  657. package/Particles/thinParticleSystem.pure.js +2 -0
  658. package/Particles/thinParticleSystem.pure.js.map +1 -1
  659. package/Particles/webgl2ParticleSystem.pure.js +2 -0
  660. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  661. package/Physics/v1/physicsImpostor.pure.js +4 -4
  662. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +675 -656
  663. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
  664. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +0 -1
  665. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +0 -1
  666. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  667. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +521 -486
  668. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  669. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +0 -1
  670. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +0 -1
  671. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  672. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js +241 -220
  673. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.pure.js.map +1 -1
  674. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js +852 -835
  675. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.pure.js.map +1 -1
  676. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js +1135 -1073
  677. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.pure.js.map +1 -1
  678. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js +319 -303
  679. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.pure.js.map +1 -1
  680. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +212 -199
  681. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  682. package/PostProcesses/blackAndWhitePostProcess.pure.js +67 -55
  683. package/PostProcesses/blackAndWhitePostProcess.pure.js.map +1 -1
  684. package/PostProcesses/bloomMergePostProcess.pure.js +74 -62
  685. package/PostProcesses/bloomMergePostProcess.pure.js.map +1 -1
  686. package/PostProcesses/blurPostProcess.pure.js +127 -115
  687. package/PostProcesses/blurPostProcess.pure.js.map +1 -1
  688. package/PostProcesses/chromaticAberrationPostProcess.pure.js +130 -118
  689. package/PostProcesses/chromaticAberrationPostProcess.pure.js.map +1 -1
  690. package/PostProcesses/circleOfConfusionPostProcess.pure.js +115 -104
  691. package/PostProcesses/circleOfConfusionPostProcess.pure.js.map +1 -1
  692. package/PostProcesses/colorCorrectionPostProcess.pure.js +55 -43
  693. package/PostProcesses/colorCorrectionPostProcess.pure.js.map +1 -1
  694. package/PostProcesses/convolutionPostProcess.pure.js +96 -84
  695. package/PostProcesses/convolutionPostProcess.pure.js.map +1 -1
  696. package/PostProcesses/extractHighlightsPostProcess.pure.js +68 -57
  697. package/PostProcesses/extractHighlightsPostProcess.pure.js.map +1 -1
  698. package/PostProcesses/filterPostProcess.pure.js +66 -54
  699. package/PostProcesses/filterPostProcess.pure.js.map +1 -1
  700. package/PostProcesses/fxaaPostProcess.pure.js.map +1 -1
  701. package/PostProcesses/grainPostProcess.pure.js +82 -70
  702. package/PostProcesses/grainPostProcess.pure.js.map +1 -1
  703. package/PostProcesses/imageProcessingPostProcess.js +334 -322
  704. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  705. package/PostProcesses/motionBlurPostProcess.pure.js +246 -235
  706. package/PostProcesses/motionBlurPostProcess.pure.js.map +1 -1
  707. package/PostProcesses/passPostProcess.pure.js +75 -63
  708. package/PostProcesses/passPostProcess.pure.js.map +1 -1
  709. package/PostProcesses/postProcess.pure.js +899 -835
  710. package/PostProcesses/postProcess.pure.js.map +1 -1
  711. package/PostProcesses/refractionPostProcess.pure.js +114 -87
  712. package/PostProcesses/refractionPostProcess.pure.js.map +1 -1
  713. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +108 -96
  714. package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
  715. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js +241 -220
  716. package/PostProcesses/screenSpaceReflectionPostProcess.pure.js.map +1 -1
  717. package/PostProcesses/sharpenPostProcess.pure.js +86 -74
  718. package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
  719. package/PostProcesses/tonemapPostProcess.pure.js +82 -70
  720. package/PostProcesses/tonemapPostProcess.pure.js.map +1 -1
  721. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +500 -465
  722. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  723. package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +0 -1
  724. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +0 -1
  725. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  726. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js +2 -0
  727. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js.map +1 -1
  728. package/Probes/reflectionProbe.pure.js +238 -224
  729. package/Probes/reflectionProbe.pure.js.map +1 -1
  730. package/Rendering/GlobalIllumination/giRSMManager.pure.d.ts +1 -1
  731. package/Rendering/GlobalIllumination/giRSMManager.pure.js +138 -105
  732. package/Rendering/GlobalIllumination/giRSMManager.pure.js.map +1 -1
  733. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -1
  734. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +155 -138
  735. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  736. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -2
  737. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -2
  738. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  739. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +5 -0
  740. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  741. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +0 -1
  742. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +0 -1
  743. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  744. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
  745. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
  746. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  747. package/Rendering/edgesRenderer.pure.js.map +1 -1
  748. package/Rendering/prePassRenderer.d.ts +0 -2
  749. package/Rendering/prePassRenderer.js +0 -2
  750. package/Rendering/prePassRenderer.js.map +1 -1
  751. package/Rendering/prePassRenderer.pure.js +2 -0
  752. package/Rendering/prePassRenderer.pure.js.map +1 -1
  753. package/Rendering/reflectiveShadowMap.pure.d.ts +1 -1
  754. package/Rendering/reflectiveShadowMap.pure.js +151 -130
  755. package/Rendering/reflectiveShadowMap.pure.js.map +1 -1
  756. package/Rendering/thinDepthPeelingRenderer.d.ts +0 -1
  757. package/Rendering/thinDepthPeelingRenderer.js +0 -1
  758. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  759. package/Shaders/ShadersInclude/gaussianSplatting.js +1 -0
  760. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  761. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +35 -5
  762. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  763. package/Shaders/gaussianSplatting.fragment.js +17 -1
  764. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  765. package/Shaders/gaussianSplatting.vertex.js +1 -1
  766. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  767. package/Shaders/gaussianSplattingDepth.vertex.js +1 -1
  768. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
  769. package/Shaders/picking.fragment.js +39 -3
  770. package/Shaders/picking.fragment.js.map +1 -1
  771. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +3 -1
  772. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  773. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  774. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  775. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -7
  776. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  777. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
  778. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  779. package/ShadersWGSL/gaussianSplatting.fragment.js +14 -1
  780. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  781. package/ShadersWGSL/gaussianSplatting.vertex.js +2 -2
  782. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  783. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
  784. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  785. package/ShadersWGSL/lightingVolume.compute.js +2 -2
  786. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  787. package/ShadersWGSL/picking.fragment.js +22 -1
  788. package/ShadersWGSL/picking.fragment.js.map +1 -1
  789. package/XR/features/Layers/WebXRCompositionLayer.d.ts +3 -2
  790. package/XR/features/Layers/WebXRCompositionLayer.js +2 -2
  791. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  792. package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +59 -0
  793. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js +120 -0
  794. package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -0
  795. package/XR/features/Layers/WebXRWebGPUProjectionLayer.d.ts +25 -0
  796. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js +69 -0
  797. package/XR/features/Layers/WebXRWebGPUProjectionLayer.js.map +1 -0
  798. package/XR/features/WebXRLayers.pure.d.ts +8 -0
  799. package/XR/features/WebXRLayers.pure.js +43 -6
  800. package/XR/features/WebXRLayers.pure.js.map +1 -1
  801. package/XR/native/nativeXRRenderTarget.d.ts +2 -2
  802. package/XR/native/nativeXRRenderTarget.js +2 -2
  803. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  804. package/XR/webXRExperienceHelper.js +10 -1
  805. package/XR/webXRExperienceHelper.js.map +1 -1
  806. package/XR/webXRGraphicsBinding.d.ts +90 -0
  807. package/XR/webXRGraphicsBinding.js +85 -0
  808. package/XR/webXRGraphicsBinding.js.map +1 -0
  809. package/XR/webXRLayerRenderTargetTexture.d.ts +24 -0
  810. package/XR/webXRLayerRenderTargetTexture.js +30 -0
  811. package/XR/webXRLayerRenderTargetTexture.js.map +1 -0
  812. package/XR/webXRManagedOutputCanvas.d.ts +14 -0
  813. package/XR/webXRManagedOutputCanvas.js +24 -5
  814. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  815. package/XR/webXRRenderTargetTextureProvider.d.ts +25 -4
  816. package/XR/webXRRenderTargetTextureProvider.js +33 -35
  817. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  818. package/XR/webXRSessionManager.d.ts +11 -0
  819. package/XR/webXRSessionManager.js +37 -0
  820. package/XR/webXRSessionManager.js.map +1 -1
  821. package/XR/webXRTypes.d.ts +9 -6
  822. package/XR/webXRTypes.js.map +1 -1
  823. package/XR/webXRWebGLLayer.d.ts +2 -2
  824. package/XR/webXRWebGLLayer.js +2 -2
  825. package/XR/webXRWebGLLayer.js.map +1 -1
  826. package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +12 -0
  827. package/XR/webXRWebGLRenderTargetTextureProvider.js +58 -0
  828. package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -0
  829. package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +69 -0
  830. package/XR/webXRWebGPURenderTargetTextureProvider.js +148 -0
  831. package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -0
  832. package/index.d.ts +1 -0
  833. package/index.js +1 -0
  834. package/index.js.map +1 -1
  835. package/node.js +878 -845
  836. package/node.js.map +1 -1
  837. package/package.json +8 -14
  838. package/scene.pure.d.ts +12 -0
  839. package/scene.pure.js +36 -0
  840. package/scene.pure.js.map +1 -1
  841. package/tslib.es6.js +304 -150
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/geometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable, type FloatArray, type DataArray, type IndicesArray } from \"../types\";\r\nimport { type Scene } from \"../scene\";\r\nimport { type Vector2, Vector3 } from \"../Maths/math.vector.pure\";\r\nimport { Color4 } from \"../Maths/math.color.pure\";\r\nimport { type IGetSetVerticesData, VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { VertexBuffer, type Buffer } from \"../Buffers/buffer.pure\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { type AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { type Effect } from \"../Materials/effect\";\r\nimport { SceneLoaderFlags } from \"../Loading/sceneLoaderFlags\";\r\nimport { BoundingInfo } from \"../Culling/boundingInfo\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Tools } from \"../Misc/tools.pure\";\r\nimport { Tags } from \"../Misc/tags\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { extractMinAndMax } from \"../Maths/math.functions\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { useOpenGLOrientationForUV } from \"../Compat/compatibilityOptions\";\r\n\r\nimport { type Mesh } from \"../Meshes/mesh\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine\";\r\nimport { CopyFloatData, GetTypedArrayData } from \"../Buffers/bufferUtils\";\r\nimport { type IAssetContainer } from \"core/IAssetContainer\";\r\n\r\n/**\r\n * Class used to store geometry data (vertex buffers + index buffer)\r\n */\r\nexport class Geometry implements IGetSetVerticesData {\r\n // Members\r\n /**\r\n * Gets or sets the ID of the geometry\r\n */\r\n public id: string;\r\n /**\r\n * Gets or sets the unique ID of the geometry\r\n */\r\n public uniqueId: number;\r\n /**\r\n * Gets the delay loading state of the geometry (none by default which means not delayed)\r\n */\r\n public delayLoadState = Constants.DELAYLOADSTATE_NONE;\r\n /**\r\n * Gets the file containing the data to load when running in delay load state\r\n */\r\n public delayLoadingFile: Nullable<string>;\r\n /**\r\n * Callback called when the geometry is updated\r\n */\r\n public onGeometryUpdated: (geometry: Geometry, kind?: string) => void;\r\n\r\n // Private\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _meshes: Mesh[];\r\n private _totalVertices = 0;\r\n private _totalIndices?: number;\r\n /** @internal */\r\n public _loadedUniqueId: string;\r\n /** @internal */\r\n public _indices: IndicesArray;\r\n /** @internal */\r\n public _vertexBuffers: { [key: string]: VertexBuffer };\r\n private _isDisposed = false;\r\n private _extend: { minimum: Vector3; maximum: Vector3 } = {\r\n minimum: new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE),\r\n maximum: new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE),\r\n };\r\n private _boundingBias: Vector2;\r\n /** @internal */\r\n public _delayInfo: Array<string>;\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _indexBufferIsUpdatable = false;\r\n /** @internal */\r\n public _boundingInfo: Nullable<BoundingInfo>;\r\n /** @internal */\r\n public _delayLoadingFunction: Nullable<(any: any, geometry: Geometry) => void>;\r\n /** @internal */\r\n public _softwareSkinningFrameId: number;\r\n private _vertexArrayObjects: { [key: string]: WebGLVertexArrayObject };\r\n private _updatable: boolean;\r\n\r\n // Cache\r\n /** @internal */\r\n public _positions: Nullable<Vector3[]>;\r\n private _positionsCache: Vector3[] = [];\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<IAssetContainer> = null;\r\n\r\n /**\r\n * Gets or sets the Bias Vector to apply on the bounding elements (box/sphere), the max extend is computed as v += v * bias.x + bias.y, the min is computed as v -= v * bias.x + bias.y\r\n */\r\n public get boundingBias(): Vector2 {\r\n return this._boundingBias;\r\n }\r\n\r\n /**\r\n * Gets or sets the Bias Vector to apply on the bounding elements (box/sphere), the max extend is computed as v += v * bias.x + bias.y, the min is computed as v -= v * bias.x + bias.y\r\n */\r\n public set boundingBias(value: Vector2) {\r\n if (this._boundingBias) {\r\n this._boundingBias.copyFrom(value);\r\n } else {\r\n this._boundingBias = value.clone();\r\n }\r\n\r\n this._updateBoundingInfo(true, null);\r\n }\r\n\r\n /**\r\n * Static function used to attach a new empty geometry to a mesh\r\n * @param mesh defines the mesh to attach the geometry to\r\n * @returns the new Geometry\r\n */\r\n public static CreateGeometryForMesh(mesh: Mesh): Geometry {\r\n const geometry = new Geometry(Geometry.RandomId(), mesh.getScene());\r\n\r\n geometry.applyToMesh(mesh);\r\n\r\n return geometry;\r\n }\r\n\r\n /** Get the list of meshes using this geometry */\r\n public get meshes(): Mesh[] {\r\n return this._meshes;\r\n }\r\n\r\n /**\r\n * If set to true (false by default), the bounding info applied to the meshes sharing this geometry will be the bounding info defined at the class level\r\n * and won't be computed based on the vertex positions (which is what we get when useBoundingInfoFromGeometry = false)\r\n */\r\n public useBoundingInfoFromGeometry = false;\r\n\r\n /**\r\n * Creates a new geometry\r\n * @param id defines the unique ID\r\n * @param scene defines the hosting scene\r\n * @param vertexData defines the VertexData used to get geometry data\r\n * @param updatable defines if geometry must be updatable (false by default)\r\n * @param mesh defines the mesh that will be associated with the geometry\r\n * @param totalVertices defines the total number of vertices (optional)\r\n */\r\n constructor(id: string, scene?: Scene, vertexData?: VertexData, updatable: boolean = false, mesh: Nullable<Mesh> = null, totalVertices: Nullable<number> = null) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n this.id = id;\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._engine = this._scene.getEngine();\r\n this._meshes = [];\r\n //Init vertex buffer cache\r\n this._vertexBuffers = {};\r\n this._indices = [];\r\n this._updatable = updatable;\r\n\r\n if (totalVertices !== null) {\r\n this._totalVertices = totalVertices;\r\n }\r\n\r\n // vertexData\r\n if (vertexData) {\r\n this.setAllVerticesData(vertexData, updatable);\r\n } else if (totalVertices === null) {\r\n this._totalVertices = 0;\r\n }\r\n\r\n if (this._engine.getCaps().vertexArrayObject) {\r\n this._vertexArrayObjects = {};\r\n }\r\n\r\n // applyToMesh\r\n if (mesh) {\r\n this.applyToMesh(mesh);\r\n mesh.computeWorldMatrix(true);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current extend of the geometry\r\n */\r\n public get extend(): { minimum: Vector3; maximum: Vector3 } {\r\n return this._extend;\r\n }\r\n\r\n /**\r\n * Gets the hosting scene\r\n * @returns the hosting Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the hosting engine\r\n * @returns the hosting Engine\r\n */\r\n public getEngine(): AbstractEngine {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Defines if the geometry is ready to use\r\n * @returns true if the geometry is ready to be used\r\n */\r\n public isReady(): boolean {\r\n return this.delayLoadState === Constants.DELAYLOADSTATE_LOADED || this.delayLoadState === Constants.DELAYLOADSTATE_NONE;\r\n }\r\n\r\n /**\r\n * Gets a value indicating that the geometry should not be serialized\r\n */\r\n public get doNotSerialize(): boolean {\r\n for (let index = 0; index < this._meshes.length; index++) {\r\n if (!this._meshes[index].doNotSerialize) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n if (this._vertexArrayObjects) {\r\n this._vertexArrayObjects = {};\r\n }\r\n\r\n // Index buffer\r\n if (this._meshes.length !== 0 && this._indices) {\r\n this._indexBuffer = this._engine.createIndexBuffer(this._indices, this._updatable, \"Geometry_\" + this.id + \"_IndexBuffer\");\r\n }\r\n\r\n // Vertex buffers\r\n const buffers = new Set<Buffer>();\r\n for (const key in this._vertexBuffers) {\r\n buffers.add(this._vertexBuffers[key].getWrapperBuffer());\r\n }\r\n\r\n buffers.forEach((buffer) => {\r\n buffer._rebuild();\r\n });\r\n }\r\n\r\n /**\r\n * Affects all geometry data in one call\r\n * @param vertexData defines the geometry data\r\n * @param updatable defines if the geometry must be flagged as updatable (false as default)\r\n */\r\n public setAllVerticesData(vertexData: VertexData, updatable?: boolean): void {\r\n vertexData.applyToGeometry(this, updatable);\r\n this._notifyUpdate();\r\n }\r\n\r\n /**\r\n * Set specific vertex data\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param data defines the vertex data to use\r\n * @param updatable defines if the vertex must be flagged as updatable (false as default)\r\n * @param stride defines the stride to use (0 by default). This value is deduced from the kind value if not specified\r\n */\r\n public setVerticesData(kind: string, data: FloatArray, updatable: boolean = false, stride?: number): void {\r\n if (updatable && Array.isArray(data)) {\r\n // to avoid converting to Float32Array at each draw call in engine.updateDynamicVertexBuffer, we make the conversion a single time here\r\n data = new Float32Array(data);\r\n }\r\n const buffer = new VertexBuffer(this._engine, data, kind, {\r\n updatable,\r\n postponeInternalCreation: this._meshes.length === 0,\r\n stride,\r\n label: \"Geometry_\" + this.id + \"_\" + kind,\r\n });\r\n this.setVerticesBuffer(buffer);\r\n }\r\n\r\n /**\r\n * Removes a specific vertex data\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n */\r\n public removeVerticesData(kind: string) {\r\n if (this._vertexBuffers[kind]) {\r\n this._vertexBuffers[kind].dispose();\r\n delete this._vertexBuffers[kind];\r\n }\r\n\r\n if (this._vertexArrayObjects) {\r\n this._disposeVertexArrayObjects();\r\n }\r\n }\r\n\r\n /**\r\n * Affect a vertex buffer to the geometry. the vertexBuffer.getKind() function is used to determine where to store the data\r\n * @param buffer defines the vertex buffer to use\r\n * @param totalVertices defines the total number of vertices for position kind (could be null)\r\n * @param disposeExistingBuffer disposes the existing buffer, if any (default: true)\r\n */\r\n public setVerticesBuffer(buffer: VertexBuffer, totalVertices: Nullable<number> = null, disposeExistingBuffer = true): void {\r\n const kind = buffer.getKind();\r\n if (this._vertexBuffers[kind] && disposeExistingBuffer) {\r\n this._vertexBuffers[kind].dispose();\r\n }\r\n\r\n if (buffer._buffer && buffer._ownsBuffer) {\r\n buffer._buffer._increaseReferences();\r\n }\r\n\r\n this._vertexBuffers[kind] = buffer;\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n\r\n if (kind === VertexBuffer.PositionKind) {\r\n this._totalVertices = totalVertices ?? buffer._maxVerticesCount;\r\n\r\n this._updateExtend(this.useBoundingInfoFromGeometry && this._boundingInfo ? null : buffer.getFloatData(this._totalVertices));\r\n this._resetPointsArrayCache();\r\n\r\n // this._extend can be empty if buffer.getFloatData(this._totalVertices) returned null\r\n const minimum = (this._extend && this._extend.minimum) || new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n const maximum = (this._extend && this._extend.maximum) || new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n\r\n for (let index = 0; index < numOfMeshes; index++) {\r\n const mesh = meshes[index];\r\n mesh.buildBoundingInfo(minimum, maximum);\r\n mesh._createGlobalSubMesh(mesh.isUnIndexed);\r\n mesh.computeWorldMatrix(true);\r\n mesh.synchronizeInstances();\r\n }\r\n }\r\n\r\n this._notifyUpdate(kind);\r\n }\r\n\r\n /**\r\n * Update a specific vertex buffer\r\n * This function will directly update the underlying DataBuffer according to the passed numeric array or Float32Array\r\n * It will do nothing if the buffer is not updatable\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param data defines the data to use\r\n * @param offset defines the offset in the target buffer where to store the data\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateVerticesDataDirectly(kind: string, data: DataArray, offset: number, useBytes: boolean = false): void {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n\r\n if (!vertexBuffer) {\r\n return;\r\n }\r\n\r\n vertexBuffer.updateDirectly(data, offset, useBytes);\r\n this._notifyUpdate(kind);\r\n }\r\n\r\n /**\r\n * Update a specific vertex buffer\r\n * This function will create a new buffer if the current one is not updatable\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param data defines the data to use\r\n * @param updateExtends defines if the geometry extends must be recomputed (false by default)\r\n */\r\n public updateVerticesData(kind: string, data: FloatArray, updateExtends: boolean = false): void {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n\r\n if (!vertexBuffer) {\r\n return;\r\n }\r\n\r\n vertexBuffer.update(data);\r\n\r\n if (kind === VertexBuffer.PositionKind) {\r\n this._updateBoundingInfo(updateExtends, data);\r\n }\r\n this._notifyUpdate(kind);\r\n }\r\n\r\n private _updateBoundingInfo(updateExtends: boolean, data: Nullable<FloatArray>) {\r\n if (updateExtends) {\r\n this._updateExtend(data);\r\n }\r\n\r\n this._resetPointsArrayCache();\r\n\r\n if (updateExtends) {\r\n const meshes = this._meshes;\r\n for (const mesh of meshes) {\r\n if (mesh.hasBoundingInfo) {\r\n mesh.getBoundingInfo().reConstruct(this._extend.minimum, this._extend.maximum);\r\n } else {\r\n mesh.buildBoundingInfo(this._extend.minimum, this._extend.maximum);\r\n }\r\n\r\n const subMeshes = mesh.subMeshes;\r\n for (const subMesh of subMeshes) {\r\n subMesh.refreshBoundingInfo();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _bind(\r\n effect: Nullable<Effect>,\r\n indexToBind?: Nullable<DataBuffer>,\r\n overrideVertexBuffers?: { [kind: string]: Nullable<VertexBuffer> },\r\n overrideVertexArrayObjects?: { [key: string]: WebGLVertexArrayObject }\r\n ): void {\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n if (indexToBind === undefined) {\r\n indexToBind = this._indexBuffer;\r\n }\r\n const vbs = this.getVertexBuffers();\r\n\r\n if (!vbs) {\r\n return;\r\n }\r\n\r\n if (indexToBind != this._indexBuffer || (!this._vertexArrayObjects && !overrideVertexArrayObjects)) {\r\n this._engine.bindBuffers(vbs, indexToBind, effect, overrideVertexBuffers);\r\n return;\r\n }\r\n\r\n const vaos = overrideVertexArrayObjects ? overrideVertexArrayObjects : this._vertexArrayObjects;\r\n const engine = this._engine as ThinEngine;\r\n\r\n // Using VAO\r\n if (!vaos[effect.key]) {\r\n vaos[effect.key] = engine.recordVertexArrayObject(vbs, indexToBind, effect, overrideVertexBuffers);\r\n }\r\n\r\n engine.bindVertexArrayObject(vaos[effect.key], indexToBind);\r\n }\r\n\r\n /**\r\n * Gets total number of vertices\r\n * @returns the total number of vertices\r\n */\r\n public getTotalVertices(): number {\r\n if (!this.isReady()) {\r\n return 0;\r\n }\r\n\r\n return this._totalVertices;\r\n }\r\n\r\n /**\r\n * Gets a specific vertex data attached to this geometry. Float data is constructed if the vertex buffer data cannot be returned directly.\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param copyWhenShared defines if the returned array must be cloned upon returning it if the current geometry is shared between multiple meshes\r\n * @param forceCopy defines a boolean indicating that the returned array must be cloned upon returning it\r\n * @returns a float array containing vertex data\r\n */\r\n public getVerticesData(kind: string, copyWhenShared?: boolean, forceCopy?: boolean): Nullable<FloatArray> {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n if (!vertexBuffer) {\r\n return null;\r\n }\r\n\r\n return vertexBuffer.getFloatData(this._totalVertices, forceCopy || (copyWhenShared && this._meshes.length !== 1));\r\n }\r\n\r\n /**\r\n * Copies the requested vertex data kind into the given vertex data map. Float data is constructed if the map doesn't have the data.\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param vertexData defines the map that stores the resulting data\r\n */\r\n public copyVerticesData(kind: string, vertexData: { [kind: string]: Float32Array }): void {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n if (!vertexBuffer) {\r\n return;\r\n }\r\n\r\n vertexData[kind] ||= new Float32Array(this._totalVertices * vertexBuffer.getSize());\r\n const data = vertexBuffer.getData();\r\n if (data) {\r\n CopyFloatData(\r\n data,\r\n vertexBuffer.getSize(),\r\n vertexBuffer.type,\r\n vertexBuffer.byteOffset,\r\n vertexBuffer.byteStride,\r\n vertexBuffer.normalized,\r\n this._totalVertices,\r\n vertexData[kind]\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Returns a boolean defining if the vertex data for the requested `kind` is updatable\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @returns true if the vertex buffer with the specified kind is updatable\r\n */\r\n public isVertexBufferUpdatable(kind: string): boolean {\r\n const vb = this._vertexBuffers[kind];\r\n\r\n if (!vb) {\r\n return false;\r\n }\r\n\r\n return vb.isUpdatable();\r\n }\r\n\r\n /**\r\n * Gets a specific vertex buffer\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @returns a VertexBuffer\r\n */\r\n public getVertexBuffer(kind: string): Nullable<VertexBuffer> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n return this._vertexBuffers[kind];\r\n }\r\n\r\n /**\r\n * Returns all vertex buffers\r\n * @returns an object holding all vertex buffers indexed by kind\r\n */\r\n public getVertexBuffers(): Nullable<{ [key: string]: VertexBuffer }> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n return this._vertexBuffers;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if specific vertex buffer is present\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @returns true if data is present\r\n */\r\n public isVerticesDataPresent(kind: string): boolean {\r\n if (!this._vertexBuffers) {\r\n if (this._delayInfo) {\r\n return this._delayInfo.indexOf(kind) !== -1;\r\n }\r\n return false;\r\n }\r\n return this._vertexBuffers[kind] !== undefined;\r\n }\r\n\r\n /**\r\n * Gets a list of all attached data kinds (Position, normal, etc...)\r\n * @returns a list of string containing all kinds\r\n */\r\n public getVerticesDataKinds(): string[] {\r\n const result = [];\r\n let kind;\r\n if (!this._vertexBuffers && this._delayInfo) {\r\n for (kind in this._delayInfo) {\r\n result.push(kind);\r\n }\r\n } else {\r\n for (kind in this._vertexBuffers) {\r\n result.push(kind);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Update index buffer\r\n * @param indices defines the indices to store in the index buffer\r\n * @param offset defines the offset in the target buffer where to store the data\r\n * @param gpuMemoryOnly defines a boolean indicating that only the GPU memory must be updated leaving the CPU version of the indices unchanged (false by default)\r\n */\r\n public updateIndices(indices: IndicesArray, offset?: number, gpuMemoryOnly = false): void {\r\n if (!this._indexBuffer) {\r\n return;\r\n }\r\n\r\n if (!this._indexBufferIsUpdatable) {\r\n this.setIndices(indices, null, true);\r\n } else {\r\n const needToUpdateSubMeshes = indices.length !== this._indices.length;\r\n\r\n if (!gpuMemoryOnly) {\r\n this._indices = indices.slice();\r\n }\r\n this._engine.updateDynamicIndexBuffer(this._indexBuffer, indices, offset);\r\n if (needToUpdateSubMeshes) {\r\n for (const mesh of this._meshes) {\r\n mesh._createGlobalSubMesh(true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the index buffer for this geometry.\r\n * @param indexBuffer Defines the index buffer to use for this geometry\r\n * @param totalVertices Defines the total number of vertices used by the buffer\r\n * @param totalIndices Defines the total number of indices in the index buffer\r\n * @param is32Bits Defines if the indices are 32 bits. If null (default), the value is guessed from the number of vertices\r\n */\r\n public setIndexBuffer(indexBuffer: DataBuffer, totalVertices: number, totalIndices: number, is32Bits: Nullable<boolean> = null): void {\r\n this._indices = [];\r\n this._indexBufferIsUpdatable = false;\r\n this._indexBuffer = indexBuffer;\r\n this._totalVertices = totalVertices;\r\n this._totalIndices = totalIndices;\r\n\r\n if (is32Bits === null) {\r\n indexBuffer.is32Bits = totalVertices > 65535;\r\n } else {\r\n indexBuffer.is32Bits = is32Bits;\r\n }\r\n\r\n for (const mesh of this._meshes) {\r\n mesh._createGlobalSubMesh(true);\r\n mesh.synchronizeInstances();\r\n }\r\n\r\n this._notifyUpdate();\r\n }\r\n\r\n /**\r\n * Creates a new index buffer\r\n * @param indices defines the indices to store in the index buffer\r\n * @param totalVertices defines the total number of vertices (could be null)\r\n * @param updatable defines if the index buffer must be flagged as updatable (false by default)\r\n * @param dontForceSubMeshRecreation defines a boolean indicating that we don't want to force the recreation of sub-meshes if we don't have to (false by default)\r\n */\r\n public setIndices(indices: IndicesArray, totalVertices: Nullable<number> = null, updatable: boolean = false, dontForceSubMeshRecreation = false): void {\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n }\r\n\r\n this._indices = indices;\r\n this._indexBufferIsUpdatable = updatable;\r\n if (this._meshes.length !== 0 && this._indices) {\r\n this._indexBuffer = this._engine.createIndexBuffer(this._indices, updatable, \"Geometry_\" + this.id + \"_IndexBuffer\");\r\n }\r\n\r\n if (totalVertices != undefined) {\r\n // including null and undefined\r\n this._totalVertices = totalVertices;\r\n }\r\n\r\n for (const mesh of this._meshes) {\r\n mesh._createGlobalSubMesh(!dontForceSubMeshRecreation);\r\n mesh.synchronizeInstances();\r\n }\r\n\r\n this._notifyUpdate();\r\n }\r\n\r\n /**\r\n * Return the total number of indices\r\n * @returns the total number of indices\r\n */\r\n public getTotalIndices(): number {\r\n if (!this.isReady()) {\r\n return 0;\r\n }\r\n return this._totalIndices !== undefined ? this._totalIndices : this._indices.length;\r\n }\r\n\r\n /**\r\n * Gets the index buffer array\r\n * @param copyWhenShared defines if the returned array must be cloned upon returning it if the current geometry is shared between multiple meshes\r\n * @param forceCopy defines a boolean indicating that the returned array must be cloned upon returning it\r\n * @returns the index buffer array\r\n */\r\n public getIndices(copyWhenShared?: boolean, forceCopy?: boolean): Nullable<IndicesArray> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n const orig = this._indices;\r\n if (!forceCopy && (!copyWhenShared || this._meshes.length === 1)) {\r\n return orig;\r\n } else {\r\n return orig.slice();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the index buffer\r\n * @returns the index buffer\r\n */\r\n public getIndexBuffer(): Nullable<DataBuffer> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n return this._indexBuffer;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _releaseVertexArrayObject(effect: Nullable<Effect> = null) {\r\n if (!effect || !this._vertexArrayObjects) {\r\n return;\r\n }\r\n\r\n if (this._vertexArrayObjects[effect.key]) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObjects[effect.key]);\r\n delete this._vertexArrayObjects[effect.key];\r\n }\r\n }\r\n\r\n /**\r\n * Release the associated resources for a specific mesh\r\n * @param mesh defines the source mesh\r\n * @param shouldDispose defines if the geometry must be disposed if there is no more mesh pointing to it\r\n */\r\n public releaseForMesh(mesh: Mesh, shouldDispose?: boolean): void {\r\n const meshes = this._meshes;\r\n const index = meshes.indexOf(mesh);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n meshes.splice(index, 1);\r\n\r\n if (this._vertexArrayObjects) {\r\n mesh._invalidateInstanceVertexArrayObject();\r\n }\r\n\r\n mesh._geometry = null;\r\n\r\n if (meshes.length === 0 && shouldDispose) {\r\n this.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Apply current geometry to a given mesh\r\n * @param mesh defines the mesh to apply geometry to\r\n */\r\n public applyToMesh(mesh: Mesh): void {\r\n if (mesh._geometry === this) {\r\n return;\r\n }\r\n\r\n const previousGeometry = mesh._geometry;\r\n if (previousGeometry) {\r\n previousGeometry.releaseForMesh(mesh);\r\n }\r\n\r\n if (this._vertexArrayObjects) {\r\n mesh._invalidateInstanceVertexArrayObject();\r\n }\r\n\r\n const meshes = this._meshes;\r\n\r\n // must be done before setting vertexBuffers because of mesh._createGlobalSubMesh()\r\n mesh._geometry = this;\r\n mesh._internalAbstractMeshDataInfo._positions = null;\r\n\r\n this._scene.pushGeometry(this);\r\n\r\n meshes.push(mesh);\r\n\r\n if (this.isReady()) {\r\n this._applyToMesh(mesh);\r\n } else if (this._boundingInfo) {\r\n mesh.setBoundingInfo(this._boundingInfo);\r\n }\r\n }\r\n\r\n private _updateExtend(data: Nullable<FloatArray> = null) {\r\n if (this.useBoundingInfoFromGeometry && this._boundingInfo) {\r\n this._extend = {\r\n minimum: this._boundingInfo.minimum.clone(),\r\n maximum: this._boundingInfo.maximum.clone(),\r\n };\r\n } else {\r\n if (!data) {\r\n data = this.getVerticesData(VertexBuffer.PositionKind)!;\r\n // This can happen if the buffer comes from a Hardware Buffer where\r\n // The data have not been uploaded by Babylon. (ex: Compute Shaders and Storage Buffers)\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n\r\n this._extend = extractMinAndMax(data, 0, this._totalVertices, this.boundingBias, 3);\r\n }\r\n }\r\n\r\n private _applyToMesh(mesh: Mesh): void {\r\n // vertexBuffers\r\n for (const kind in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[kind];\r\n if (!vertexBuffer._buffer.getBuffer()) {\r\n vertexBuffer.create();\r\n }\r\n\r\n if (kind === VertexBuffer.PositionKind) {\r\n if (!this._extend) {\r\n this._updateExtend();\r\n }\r\n mesh.buildBoundingInfo(this._extend.minimum, this._extend.maximum);\r\n\r\n mesh._createGlobalSubMesh(mesh.isUnIndexed);\r\n\r\n //bounding info was just created again, world matrix should be applied again.\r\n mesh._updateBoundingInfo();\r\n }\r\n }\r\n\r\n // indexBuffer\r\n if (!this._indexBuffer && this._indices && this._indices.length > 0) {\r\n this._indexBuffer = this._engine.createIndexBuffer(this._indices, this._updatable, \"Geometry_\" + this.id + \"_IndexBuffer\");\r\n }\r\n\r\n // morphTargets\r\n mesh._syncGeometryWithMorphTargetManager();\r\n\r\n // instances\r\n mesh.synchronizeInstances();\r\n }\r\n\r\n private _notifyUpdate(kind?: string) {\r\n if (this.onGeometryUpdated) {\r\n this.onGeometryUpdated(this, kind);\r\n }\r\n\r\n if (this._vertexArrayObjects) {\r\n this._disposeVertexArrayObjects();\r\n }\r\n\r\n for (const mesh of this._meshes) {\r\n mesh._markSubMeshesAsAttributesDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Load the geometry if it was flagged as delay loaded\r\n * @param scene defines the hosting scene\r\n * @param onLoaded defines a callback called when the geometry is loaded\r\n */\r\n public load(scene: Scene, onLoaded?: () => void): void {\r\n if (this.delayLoadState === Constants.DELAYLOADSTATE_LOADING) {\r\n return;\r\n }\r\n\r\n if (this.isReady()) {\r\n if (onLoaded) {\r\n onLoaded();\r\n }\r\n return;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADING;\r\n\r\n this._queueLoad(scene, onLoaded);\r\n }\r\n\r\n private _queueLoad(scene: Scene, onLoaded?: () => void): void {\r\n if (!this.delayLoadingFile) {\r\n return;\r\n }\r\n\r\n scene.addPendingData(this);\r\n scene._loadFile(\r\n this.delayLoadingFile,\r\n (data) => {\r\n if (!this._delayLoadingFunction) {\r\n return;\r\n }\r\n\r\n this._delayLoadingFunction(JSON.parse(data as string), this);\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._delayInfo = [];\r\n\r\n scene.removePendingData(this);\r\n\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n for (let index = 0; index < numOfMeshes; index++) {\r\n this._applyToMesh(meshes[index]);\r\n }\r\n\r\n if (onLoaded) {\r\n onLoaded();\r\n }\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n /**\r\n * Invert the geometry to move from a right handed system to a left handed one.\r\n */\r\n public toLeftHanded(): void {\r\n // Flip faces\r\n const tIndices = this.getIndices(false);\r\n if (tIndices != null && tIndices.length > 0) {\r\n for (let i = 0; i < tIndices.length; i += 3) {\r\n const tTemp = tIndices[i + 0];\r\n tIndices[i + 0] = tIndices[i + 2];\r\n tIndices[i + 2] = tTemp;\r\n }\r\n this.setIndices(tIndices);\r\n }\r\n\r\n // Negate position.z\r\n const tPositions = this.getVerticesData(VertexBuffer.PositionKind, false);\r\n if (tPositions != null && tPositions.length > 0) {\r\n for (let i = 0; i < tPositions.length; i += 3) {\r\n tPositions[i + 2] = -tPositions[i + 2];\r\n }\r\n this.setVerticesData(VertexBuffer.PositionKind, tPositions, false);\r\n }\r\n\r\n // Negate normal.z\r\n const tNormals = this.getVerticesData(VertexBuffer.NormalKind, false);\r\n if (tNormals != null && tNormals.length > 0) {\r\n for (let i = 0; i < tNormals.length; i += 3) {\r\n tNormals[i + 2] = -tNormals[i + 2];\r\n }\r\n this.setVerticesData(VertexBuffer.NormalKind, tNormals, false);\r\n }\r\n }\r\n\r\n // Cache\r\n /** @internal */\r\n public _resetPointsArrayCache(): void {\r\n this._positions = null;\r\n }\r\n\r\n /** @internal */\r\n public _generatePointsArray(): boolean {\r\n if (this._positions) {\r\n return true;\r\n }\r\n\r\n const data = this.getVerticesData(VertexBuffer.PositionKind);\r\n\r\n if (!data || data.length === 0) {\r\n return false;\r\n }\r\n\r\n for (let index = this._positionsCache.length * 3, arrayIdx = this._positionsCache.length; index < data.length; index += 3, ++arrayIdx) {\r\n this._positionsCache[arrayIdx] = Vector3.FromArray(data, index);\r\n }\r\n\r\n for (let index = 0, arrayIdx = 0; index < data.length; index += 3, ++arrayIdx) {\r\n this._positionsCache[arrayIdx].set(data[0 + index], data[1 + index], data[2 + index]);\r\n }\r\n\r\n // just in case the number of positions was reduced, splice the array\r\n this._positionsCache.length = data.length / 3;\r\n\r\n this._positions = this._positionsCache;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets a value indicating if the geometry is disposed\r\n * @returns true if the geometry was disposed\r\n */\r\n public isDisposed(): boolean {\r\n return this._isDisposed;\r\n }\r\n\r\n private _disposeVertexArrayObjects(): void {\r\n if (this._vertexArrayObjects) {\r\n for (const kind in this._vertexArrayObjects) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObjects[kind]);\r\n }\r\n this._vertexArrayObjects = {}; // Will trigger a rebuild of the VAO if supported\r\n\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n for (let index = 0; index < numOfMeshes; index++) {\r\n meshes[index]._invalidateInstanceVertexArrayObject();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Free all associated resources\r\n */\r\n public dispose(): void {\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n let index: number;\r\n for (index = 0; index < numOfMeshes; index++) {\r\n this.releaseForMesh(meshes[index]);\r\n }\r\n this._meshes.length = 0;\r\n\r\n this._disposeVertexArrayObjects();\r\n\r\n for (const kind in this._vertexBuffers) {\r\n this._vertexBuffers[kind].dispose();\r\n }\r\n this._vertexBuffers = {};\r\n this._totalVertices = 0;\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n }\r\n this._indexBuffer = null;\r\n this._indices = [];\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NONE;\r\n this.delayLoadingFile = null;\r\n this._delayLoadingFunction = null;\r\n this._delayInfo = [];\r\n\r\n this._boundingInfo = null;\r\n\r\n this._scene.removeGeometry(this);\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.geometries.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.geometries.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n this._isDisposed = true;\r\n }\r\n\r\n /**\r\n * Clone the current geometry into a new geometry\r\n * @param id defines the unique ID of the new geometry\r\n * @returns a new geometry object\r\n */\r\n public copy(id: string): Geometry {\r\n const geometry = new Geometry(id, this._scene);\r\n\r\n const indices = this.getIndices(undefined, true);\r\n if (indices) {\r\n geometry.setIndices(indices);\r\n }\r\n\r\n let updatable = false;\r\n let kind;\r\n for (kind in this._vertexBuffers) {\r\n const vb = this.getVertexBuffer(kind)!;\r\n const bufferData = vb.getData();\r\n if (!bufferData) {\r\n continue;\r\n }\r\n\r\n const isUpdatable = vb.isUpdatable();\r\n const size = vb.getSize();\r\n const { type, byteOffset, byteStride, normalized } = vb;\r\n updatable = updatable || isUpdatable;\r\n\r\n let numElements = this._totalVertices;\r\n if (vb.getIsInstanced()) {\r\n // Do our best with the data we have to find a number of instances when the vertex buffer is instanced...\r\n let bufferDataByteSize: number;\r\n if (bufferData instanceof Array) {\r\n bufferDataByteSize = bufferData.length * 4;\r\n } else {\r\n bufferDataByteSize = bufferData.byteLength;\r\n }\r\n numElements = bufferDataByteSize / byteStride;\r\n }\r\n const copy = GetTypedArrayData(bufferData, size, type, byteOffset, byteStride, numElements, true);\r\n const newVb = new VertexBuffer(this._engine, copy, kind, {\r\n updatable: isUpdatable,\r\n useBytes: false,\r\n stride: size, // Copy is tightly-packed, so stride = size\r\n size: size, // Component size stays the same\r\n offset: 0, // Copy starts at beginning of its own buffer\r\n type: type,\r\n normalized: normalized,\r\n takeBufferOwnership: true,\r\n instanced: vb.getIsInstanced(),\r\n });\r\n\r\n geometry.setVerticesBuffer(newVb, numElements);\r\n }\r\n\r\n geometry._updatable = updatable;\r\n\r\n geometry.delayLoadState = this.delayLoadState;\r\n geometry.delayLoadingFile = this.delayLoadingFile;\r\n geometry._delayLoadingFunction = this._delayLoadingFunction;\r\n\r\n for (kind in this._delayInfo) {\r\n geometry._delayInfo = geometry._delayInfo || [];\r\n geometry._delayInfo.push(kind);\r\n }\r\n\r\n // Bounding info\r\n geometry._boundingInfo = new BoundingInfo(this._extend.minimum, this._extend.maximum);\r\n\r\n return geometry;\r\n }\r\n\r\n /**\r\n * Serialize the current geometry info (and not the vertices data) into a JSON object\r\n * @returns a JSON representation of the current geometry data (without the vertices data)\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.id;\r\n serializationObject.uniqueId = this.uniqueId;\r\n serializationObject.updatable = this._updatable;\r\n\r\n if (Tags && Tags.HasTags(this)) {\r\n serializationObject.tags = Tags.GetTags(this);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _toNumberArray(origin: Nullable<Float32Array | IndicesArray>): number[] {\r\n if (Array.isArray(origin)) {\r\n return origin;\r\n } else {\r\n return Array.prototype.slice.call(origin);\r\n }\r\n }\r\n\r\n /**\r\n * Release any memory retained by the cached data on the Geometry.\r\n *\r\n * Call this function to reduce memory footprint of the mesh.\r\n * Vertex buffers will not store CPU data anymore (this will prevent picking, collisions or physics to work correctly)\r\n */\r\n public clearCachedData(): void {\r\n this._totalIndices = this._indices.length; // save the current value so that getTotalIndices can still work\r\n this._indices = [];\r\n this._resetPointsArrayCache();\r\n\r\n for (const vbName in this._vertexBuffers) {\r\n if (!Object.prototype.hasOwnProperty.call(this._vertexBuffers, vbName)) {\r\n continue;\r\n }\r\n this._vertexBuffers[vbName]._buffer._data = null;\r\n }\r\n }\r\n\r\n /**\r\n * Serialize all vertices data into a JSON object\r\n * @returns a JSON representation of the current geometry data\r\n */\r\n public serializeVerticeData(): any {\r\n const serializationObject = this.serialize();\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.PositionKind)) {\r\n serializationObject.positions = this._toNumberArray(this.getVerticesData(VertexBuffer.PositionKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.PositionKind)) {\r\n serializationObject.positionsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n serializationObject.normals = this._toNumberArray(this.getVerticesData(VertexBuffer.NormalKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.NormalKind)) {\r\n serializationObject.normalsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n serializationObject.tangents = this._toNumberArray(this.getVerticesData(VertexBuffer.TangentKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.TangentKind)) {\r\n serializationObject.tangentsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n serializationObject.uvs = this._toNumberArray(this.getVerticesData(VertexBuffer.UVKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UVKind)) {\r\n serializationObject.uvsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n serializationObject.uvs2 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV2Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV2Kind)) {\r\n serializationObject.uvs2Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV3Kind)) {\r\n serializationObject.uvs3 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV3Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV3Kind)) {\r\n serializationObject.uvs3Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV4Kind)) {\r\n serializationObject.uvs4 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV4Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV4Kind)) {\r\n serializationObject.uvs4Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV5Kind)) {\r\n serializationObject.uvs5 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV5Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV5Kind)) {\r\n serializationObject.uvs5Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV6Kind)) {\r\n serializationObject.uvs6 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV6Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV6Kind)) {\r\n serializationObject.uvs6Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n serializationObject.colors = this._toNumberArray(this.getVerticesData(VertexBuffer.ColorKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.ColorKind)) {\r\n serializationObject.colorsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.MatricesIndicesKind)) {\r\n serializationObject.matricesIndices = this._toNumberArray(this.getVerticesData(VertexBuffer.MatricesIndicesKind));\r\n serializationObject.matricesIndicesExpanded = true;\r\n if (this.isVertexBufferUpdatable(VertexBuffer.MatricesIndicesKind)) {\r\n serializationObject.matricesIndicesUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.MatricesWeightsKind)) {\r\n serializationObject.matricesWeights = this._toNumberArray(this.getVerticesData(VertexBuffer.MatricesWeightsKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.MatricesWeightsKind)) {\r\n serializationObject.matricesWeightsUpdatable = true;\r\n }\r\n }\r\n\r\n serializationObject.indices = this._toNumberArray(this.getIndices());\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Extracts a clone of a mesh geometry\r\n * @param mesh defines the source mesh\r\n * @param id defines the unique ID of the new geometry object\r\n * @returns the new geometry object\r\n */\r\n public static ExtractFromMesh(mesh: Mesh, id: string): Nullable<Geometry> {\r\n const geometry = mesh._geometry;\r\n\r\n if (!geometry) {\r\n return null;\r\n }\r\n\r\n return geometry.copy(id);\r\n }\r\n\r\n /**\r\n * You should now use Tools.RandomId(), this method is still here for legacy reasons.\r\n * Implementation from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#answer-2117523\r\n * Be aware Math.random() could cause collisions, but:\r\n * \"All but 6 of the 128 bits of the ID are randomly generated, which means that for any two ids, there's a 1 in 2^^122 (or 5.3x10^^36) chance they'll collide\"\r\n * @returns a string containing a new GUID\r\n */\r\n public static RandomId(): string {\r\n return Tools.RandomId();\r\n }\r\n\r\n private static _GetGeometryByLoadedUniqueId(uniqueId: string, scene: Scene) {\r\n for (let index = 0; index < scene.geometries.length; index++) {\r\n if (scene.geometries[index]._loadedUniqueId === uniqueId) {\r\n return scene.geometries[index];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _ImportGeometry(parsedGeometry: any, mesh: Mesh): void {\r\n const scene = mesh.getScene();\r\n\r\n // Geometry\r\n const geometryUniqueId = parsedGeometry.geometryUniqueId;\r\n const geometryId = parsedGeometry.geometryId;\r\n if (geometryUniqueId || geometryId) {\r\n const geometry = geometryUniqueId ? this._GetGeometryByLoadedUniqueId(geometryUniqueId, scene) : scene.getGeometryById(geometryId);\r\n if (geometry) {\r\n geometry.applyToMesh(mesh);\r\n }\r\n } else if (parsedGeometry instanceof ArrayBuffer) {\r\n const binaryInfo = mesh._binaryInfo;\r\n\r\n if (binaryInfo.positionsAttrDesc && binaryInfo.positionsAttrDesc.count > 0) {\r\n const positionsData = new Float32Array(parsedGeometry, binaryInfo.positionsAttrDesc.offset, binaryInfo.positionsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.PositionKind, positionsData, false);\r\n }\r\n\r\n if (binaryInfo.normalsAttrDesc && binaryInfo.normalsAttrDesc.count > 0) {\r\n const normalsData = new Float32Array(parsedGeometry, binaryInfo.normalsAttrDesc.offset, binaryInfo.normalsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.NormalKind, normalsData, false);\r\n }\r\n\r\n if (binaryInfo.tangetsAttrDesc && binaryInfo.tangetsAttrDesc.count > 0) {\r\n const tangentsData = new Float32Array(parsedGeometry, binaryInfo.tangetsAttrDesc.offset, binaryInfo.tangetsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.TangentKind, tangentsData, false);\r\n }\r\n\r\n if (binaryInfo.uvsAttrDesc && binaryInfo.uvsAttrDesc.count > 0) {\r\n const uvsData = new Float32Array(parsedGeometry, binaryInfo.uvsAttrDesc.offset, binaryInfo.uvsAttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvsData.length; index += 2) {\r\n uvsData[index] = 1 - uvsData[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UVKind, uvsData, false);\r\n }\r\n\r\n if (binaryInfo.uvs2AttrDesc && binaryInfo.uvs2AttrDesc.count > 0) {\r\n const uvs2Data = new Float32Array(parsedGeometry, binaryInfo.uvs2AttrDesc.offset, binaryInfo.uvs2AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs2Data.length; index += 2) {\r\n uvs2Data[index] = 1 - uvs2Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV2Kind, uvs2Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs3AttrDesc && binaryInfo.uvs3AttrDesc.count > 0) {\r\n const uvs3Data = new Float32Array(parsedGeometry, binaryInfo.uvs3AttrDesc.offset, binaryInfo.uvs3AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs3Data.length; index += 2) {\r\n uvs3Data[index] = 1 - uvs3Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV3Kind, uvs3Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs4AttrDesc && binaryInfo.uvs4AttrDesc.count > 0) {\r\n const uvs4Data = new Float32Array(parsedGeometry, binaryInfo.uvs4AttrDesc.offset, binaryInfo.uvs4AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs4Data.length; index += 2) {\r\n uvs4Data[index] = 1 - uvs4Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV4Kind, uvs4Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs5AttrDesc && binaryInfo.uvs5AttrDesc.count > 0) {\r\n const uvs5Data = new Float32Array(parsedGeometry, binaryInfo.uvs5AttrDesc.offset, binaryInfo.uvs5AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs5Data.length; index += 2) {\r\n uvs5Data[index] = 1 - uvs5Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV5Kind, uvs5Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs6AttrDesc && binaryInfo.uvs6AttrDesc.count > 0) {\r\n const uvs6Data = new Float32Array(parsedGeometry, binaryInfo.uvs6AttrDesc.offset, binaryInfo.uvs6AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs6Data.length; index += 2) {\r\n uvs6Data[index] = 1 - uvs6Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV6Kind, uvs6Data, false);\r\n }\r\n\r\n if (binaryInfo.colorsAttrDesc && binaryInfo.colorsAttrDesc.count > 0) {\r\n const colorsData = new Float32Array(parsedGeometry, binaryInfo.colorsAttrDesc.offset, binaryInfo.colorsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.ColorKind, colorsData, false, binaryInfo.colorsAttrDesc.stride);\r\n }\r\n\r\n if (binaryInfo.matricesIndicesAttrDesc && binaryInfo.matricesIndicesAttrDesc.count > 0) {\r\n const matricesIndicesData = new Int32Array(parsedGeometry, binaryInfo.matricesIndicesAttrDesc.offset, binaryInfo.matricesIndicesAttrDesc.count);\r\n const floatIndices = [];\r\n for (let i = 0; i < matricesIndicesData.length; i++) {\r\n const index = matricesIndicesData[i];\r\n floatIndices.push(index & 0x000000ff);\r\n floatIndices.push((index & 0x0000ff00) >> 8);\r\n floatIndices.push((index & 0x00ff0000) >> 16);\r\n floatIndices.push((index >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesKind, floatIndices, false);\r\n }\r\n\r\n if (binaryInfo.matricesIndicesExtraAttrDesc && binaryInfo.matricesIndicesExtraAttrDesc.count > 0) {\r\n const matricesIndicesData = new Int32Array(parsedGeometry, binaryInfo.matricesIndicesExtraAttrDesc.offset, binaryInfo.matricesIndicesExtraAttrDesc.count);\r\n const floatIndices = [];\r\n for (let i = 0; i < matricesIndicesData.length; i++) {\r\n const index = matricesIndicesData[i];\r\n floatIndices.push(index & 0x000000ff);\r\n floatIndices.push((index & 0x0000ff00) >> 8);\r\n floatIndices.push((index & 0x00ff0000) >> 16);\r\n floatIndices.push((index >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesExtraKind, floatIndices, false);\r\n }\r\n\r\n if (binaryInfo.matricesWeightsAttrDesc && binaryInfo.matricesWeightsAttrDesc.count > 0) {\r\n const matricesWeightsData = new Float32Array(parsedGeometry, binaryInfo.matricesWeightsAttrDesc.offset, binaryInfo.matricesWeightsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.MatricesWeightsKind, matricesWeightsData, false);\r\n }\r\n\r\n if (binaryInfo.indicesAttrDesc && binaryInfo.indicesAttrDesc.count > 0) {\r\n const indicesData = new Int32Array(parsedGeometry, binaryInfo.indicesAttrDesc.offset, binaryInfo.indicesAttrDesc.count);\r\n mesh.setIndices(indicesData, null);\r\n }\r\n\r\n if (binaryInfo.subMeshesAttrDesc && binaryInfo.subMeshesAttrDesc.count > 0) {\r\n const subMeshesData = new Int32Array(parsedGeometry, binaryInfo.subMeshesAttrDesc.offset, binaryInfo.subMeshesAttrDesc.count * 5);\r\n\r\n mesh.subMeshes = [];\r\n for (let i = 0; i < binaryInfo.subMeshesAttrDesc.count; i++) {\r\n const materialIndex = subMeshesData[i * 5 + 0];\r\n const verticesStart = subMeshesData[i * 5 + 1];\r\n const verticesCount = subMeshesData[i * 5 + 2];\r\n const indexStart = subMeshesData[i * 5 + 3];\r\n const indexCount = subMeshesData[i * 5 + 4];\r\n\r\n SubMesh.AddToMesh(materialIndex, verticesStart, verticesCount, indexStart, indexCount, <AbstractMesh>mesh);\r\n }\r\n }\r\n } else if (parsedGeometry.positions && parsedGeometry.normals && parsedGeometry.indices) {\r\n mesh.setVerticesData(VertexBuffer.PositionKind, parsedGeometry.positions, parsedGeometry.positions._updatable || parsedGeometry.positionsUpdatable);\r\n\r\n mesh.setVerticesData(VertexBuffer.NormalKind, parsedGeometry.normals, parsedGeometry.normals._updatable || parsedGeometry.normalsUpdatable);\r\n\r\n if (parsedGeometry.tangents) {\r\n mesh.setVerticesData(VertexBuffer.TangentKind, parsedGeometry.tangents, parsedGeometry.tangents._updatable || parsedGeometry.tangentsUpdatable);\r\n }\r\n\r\n if (parsedGeometry.uvs) {\r\n mesh.setVerticesData(VertexBuffer.UVKind, parsedGeometry.uvs, parsedGeometry.uvs._updatable || parsedGeometry.uvsUpdatable);\r\n }\r\n\r\n if (parsedGeometry.uvs2) {\r\n mesh.setVerticesData(VertexBuffer.UV2Kind, parsedGeometry.uvs2, parsedGeometry.uvs2._updatable || parsedGeometry.uvs2Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs3) {\r\n mesh.setVerticesData(VertexBuffer.UV3Kind, parsedGeometry.uvs3, parsedGeometry.uvs3._updatable || parsedGeometry.uvs3Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs4) {\r\n mesh.setVerticesData(VertexBuffer.UV4Kind, parsedGeometry.uvs4, parsedGeometry.uvs4._updatable || parsedGeometry.uvs4Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs5) {\r\n mesh.setVerticesData(VertexBuffer.UV5Kind, parsedGeometry.uvs5, parsedGeometry.uvs5._updatable || parsedGeometry.uvs5Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs6) {\r\n mesh.setVerticesData(VertexBuffer.UV6Kind, parsedGeometry.uvs6, parsedGeometry.uvs6._updatable || parsedGeometry.uvs6Updatable);\r\n }\r\n\r\n if (parsedGeometry.colors) {\r\n mesh.setVerticesData(VertexBuffer.ColorKind, Color4.CheckColors4(parsedGeometry.colors, parsedGeometry.positions.length / 3), parsedGeometry.colors._updatable);\r\n }\r\n\r\n if (parsedGeometry.matricesIndices) {\r\n if (!parsedGeometry.matricesIndices._isExpanded && !parsedGeometry.matricesIndicesExpanded) {\r\n const floatIndices = [];\r\n\r\n for (let i = 0; i < parsedGeometry.matricesIndices.length; i++) {\r\n const matricesIndex = parsedGeometry.matricesIndices[i];\r\n\r\n floatIndices.push(matricesIndex & 0x000000ff);\r\n floatIndices.push((matricesIndex & 0x0000ff00) >> 8);\r\n floatIndices.push((matricesIndex & 0x00ff0000) >> 16);\r\n floatIndices.push((matricesIndex >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesKind, floatIndices, parsedGeometry.matricesIndices._updatable || parsedGeometry.matricesIndicesUpdatable);\r\n } else {\r\n delete parsedGeometry.matricesIndices._isExpanded;\r\n delete parsedGeometry.matricesIndicesExpanded;\r\n mesh.setVerticesData(\r\n VertexBuffer.MatricesIndicesKind,\r\n parsedGeometry.matricesIndices,\r\n parsedGeometry.matricesIndices._updatable || parsedGeometry.matricesIndicesUpdatable\r\n );\r\n }\r\n }\r\n\r\n if (parsedGeometry.matricesIndicesExtra) {\r\n if (!(parsedGeometry.matricesIndicesExtraExpanded || parsedGeometry.matricesIndicesExtra._isExpanded)) {\r\n const floatIndices = [];\r\n\r\n for (let i = 0; i < parsedGeometry.matricesIndicesExtra.length; i++) {\r\n const matricesIndex = parsedGeometry.matricesIndicesExtra[i];\r\n\r\n floatIndices.push(matricesIndex & 0x000000ff);\r\n floatIndices.push((matricesIndex & 0x0000ff00) >> 8);\r\n floatIndices.push((matricesIndex & 0x00ff0000) >> 16);\r\n floatIndices.push((matricesIndex >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n\r\n mesh.setVerticesData(\r\n VertexBuffer.MatricesIndicesExtraKind,\r\n floatIndices,\r\n parsedGeometry.matricesIndicesExtra._updatable || parsedGeometry.matricesIndicesExtraUpdatable\r\n );\r\n } else {\r\n delete parsedGeometry.matricesIndices._isExpanded;\r\n delete parsedGeometry.matricesIndicesExtraExpanded;\r\n mesh.setVerticesData(\r\n VertexBuffer.MatricesIndicesExtraKind,\r\n parsedGeometry.matricesIndicesExtra,\r\n parsedGeometry.matricesIndicesExtra._updatable || parsedGeometry.matricesIndicesExtraUpdatable\r\n );\r\n }\r\n }\r\n\r\n if (parsedGeometry.matricesWeights) {\r\n Geometry._CleanMatricesWeights(parsedGeometry, mesh);\r\n mesh.setVerticesData(VertexBuffer.MatricesWeightsKind, parsedGeometry.matricesWeights, parsedGeometry.matricesWeights._updatable);\r\n }\r\n\r\n if (parsedGeometry.matricesWeightsExtra) {\r\n mesh.setVerticesData(VertexBuffer.MatricesWeightsExtraKind, parsedGeometry.matricesWeightsExtra, parsedGeometry.matricesWeights._updatable);\r\n }\r\n\r\n mesh.setIndices(parsedGeometry.indices, null);\r\n }\r\n\r\n // SubMeshes\r\n if (parsedGeometry.subMeshes) {\r\n mesh.subMeshes = [];\r\n for (let subIndex = 0; subIndex < parsedGeometry.subMeshes.length; subIndex++) {\r\n const parsedSubMesh = parsedGeometry.subMeshes[subIndex];\r\n\r\n SubMesh.AddToMesh(\r\n parsedSubMesh.materialIndex,\r\n parsedSubMesh.verticesStart,\r\n parsedSubMesh.verticesCount,\r\n parsedSubMesh.indexStart,\r\n parsedSubMesh.indexCount,\r\n <AbstractMesh>mesh\r\n );\r\n }\r\n }\r\n\r\n // Flat shading\r\n if (mesh._shouldGenerateFlatShading) {\r\n mesh.convertToFlatShadedMesh();\r\n mesh._shouldGenerateFlatShading = false;\r\n }\r\n\r\n // Update\r\n mesh.computeWorldMatrix(true);\r\n\r\n scene.onMeshImportedObservable.notifyObservers(<AbstractMesh>mesh);\r\n }\r\n\r\n private static _CleanMatricesWeights(parsedGeometry: any, mesh: Mesh): void {\r\n const epsilon: number = 1e-3;\r\n if (!SceneLoaderFlags.CleanBoneMatrixWeights) {\r\n return;\r\n }\r\n let noInfluenceBoneIndex: number;\r\n if (parsedGeometry.skeletonId > -1) {\r\n const skeleton = mesh.getScene().getLastSkeletonById(parsedGeometry.skeletonId);\r\n\r\n if (!skeleton) {\r\n return;\r\n }\r\n noInfluenceBoneIndex = skeleton.bones.length;\r\n } else {\r\n return;\r\n }\r\n const matricesIndices = <FloatArray>mesh.getVerticesData(VertexBuffer.MatricesIndicesKind);\r\n const matricesIndicesExtra = <FloatArray>mesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind);\r\n const matricesWeights = parsedGeometry.matricesWeights;\r\n const matricesWeightsExtra = parsedGeometry.matricesWeightsExtra;\r\n const influencers = parsedGeometry.numBoneInfluencer;\r\n const size = matricesWeights.length;\r\n\r\n for (let i = 0; i < size; i += 4) {\r\n let weight = 0.0;\r\n let firstZeroWeight = -1;\r\n for (let j = 0; j < 4; j++) {\r\n const w = matricesWeights[i + j];\r\n weight += w;\r\n if (w < epsilon && firstZeroWeight < 0) {\r\n firstZeroWeight = j;\r\n }\r\n }\r\n if (matricesWeightsExtra) {\r\n for (let j = 0; j < 4; j++) {\r\n const w = matricesWeightsExtra[i + j];\r\n weight += w;\r\n if (w < epsilon && firstZeroWeight < 0) {\r\n firstZeroWeight = j + 4;\r\n }\r\n }\r\n }\r\n if (firstZeroWeight < 0 || firstZeroWeight > influencers - 1) {\r\n firstZeroWeight = influencers - 1;\r\n }\r\n if (weight > epsilon) {\r\n const mweight = 1.0 / weight;\r\n for (let j = 0; j < 4; j++) {\r\n matricesWeights[i + j] *= mweight;\r\n }\r\n if (matricesWeightsExtra) {\r\n for (let j = 0; j < 4; j++) {\r\n matricesWeightsExtra[i + j] *= mweight;\r\n }\r\n }\r\n } else {\r\n if (firstZeroWeight >= 4) {\r\n matricesWeightsExtra[i + firstZeroWeight - 4] = 1.0 - weight;\r\n matricesIndicesExtra[i + firstZeroWeight - 4] = noInfluenceBoneIndex;\r\n } else {\r\n matricesWeights[i + firstZeroWeight] = 1.0 - weight;\r\n matricesIndices[i + firstZeroWeight] = noInfluenceBoneIndex;\r\n }\r\n }\r\n }\r\n\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesKind, matricesIndices);\r\n if (parsedGeometry.matricesWeightsExtra) {\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesExtraKind, matricesIndicesExtra);\r\n }\r\n }\r\n\r\n /**\r\n * Create a new geometry from persisted data (Using .babylon file format)\r\n * @param parsedVertexData defines the persisted data\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url to use to load assets (like delayed data)\r\n * @returns the new geometry object\r\n */\r\n public static Parse(parsedVertexData: any, scene: Scene, rootUrl: string): Nullable<Geometry> {\r\n const geometry = new Geometry(parsedVertexData.id, scene, undefined, parsedVertexData.updatable);\r\n geometry._loadedUniqueId = parsedVertexData.uniqueId;\r\n\r\n if (Tags) {\r\n Tags.AddTagsTo(geometry, parsedVertexData.tags);\r\n }\r\n\r\n if (parsedVertexData.delayLoadingFile) {\r\n geometry.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n geometry.delayLoadingFile = rootUrl + parsedVertexData.delayLoadingFile;\r\n geometry._boundingInfo = new BoundingInfo(Vector3.FromArray(parsedVertexData.boundingBoxMinimum), Vector3.FromArray(parsedVertexData.boundingBoxMaximum));\r\n\r\n geometry._delayInfo = [];\r\n if (parsedVertexData.hasUVs) {\r\n geometry._delayInfo.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs2) {\r\n geometry._delayInfo.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs3) {\r\n geometry._delayInfo.push(VertexBuffer.UV3Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs4) {\r\n geometry._delayInfo.push(VertexBuffer.UV4Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs5) {\r\n geometry._delayInfo.push(VertexBuffer.UV5Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs6) {\r\n geometry._delayInfo.push(VertexBuffer.UV6Kind);\r\n }\r\n\r\n if (parsedVertexData.hasColors) {\r\n geometry._delayInfo.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n if (parsedVertexData.hasMatricesIndices) {\r\n geometry._delayInfo.push(VertexBuffer.MatricesIndicesKind);\r\n }\r\n\r\n if (parsedVertexData.hasMatricesWeights) {\r\n geometry._delayInfo.push(VertexBuffer.MatricesWeightsKind);\r\n }\r\n\r\n geometry._delayLoadingFunction = VertexData.ImportVertexData;\r\n } else {\r\n VertexData.ImportVertexData(parsedVertexData, geometry);\r\n }\r\n\r\n scene.pushGeometry(geometry, true);\r\n\r\n return geometry;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/geometry.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable, type FloatArray, type DataArray, type IndicesArray } from \"../types\";\r\nimport { type Scene } from \"../scene\";\r\nimport { type Vector2, Vector3 } from \"../Maths/math.vector.pure\";\r\nimport { Color4 } from \"../Maths/math.color.pure\";\r\nimport { type IGetSetVerticesData, VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { VertexBuffer, type Buffer } from \"../Buffers/buffer.pure\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { type AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { type Effect } from \"../Materials/effect\";\r\nimport { SceneLoaderFlags } from \"../Loading/sceneLoaderFlags\";\r\nimport { BoundingInfo } from \"../Culling/boundingInfo\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Tools } from \"../Misc/tools.pure\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Tags } from \"../Misc/tags\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { extractMinAndMax } from \"../Maths/math.functions\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { useOpenGLOrientationForUV } from \"../Compat/compatibilityOptions\";\r\n\r\nimport { type Mesh } from \"../Meshes/mesh\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine\";\r\nimport { CopyFloatData, GetTypedArrayData } from \"../Buffers/bufferUtils\";\r\nimport { type IAssetContainer } from \"core/IAssetContainer\";\r\n\r\n/**\r\n * Class used to store geometry data (vertex buffers + index buffer)\r\n */\r\nexport class Geometry implements IGetSetVerticesData {\r\n // Members\r\n /**\r\n * Gets or sets the ID of the geometry\r\n */\r\n public id: string;\r\n /**\r\n * Gets or sets the unique ID of the geometry\r\n */\r\n public uniqueId: number;\r\n /**\r\n * Gets the delay loading state of the geometry (none by default which means not delayed)\r\n */\r\n public delayLoadState = Constants.DELAYLOADSTATE_NONE;\r\n /**\r\n * Gets the file containing the data to load when running in delay load state\r\n */\r\n public delayLoadingFile: Nullable<string>;\r\n /**\r\n * Callback called when the geometry is updated\r\n */\r\n public onGeometryUpdated: (geometry: Geometry, kind?: string) => void;\r\n\r\n // Private\r\n private _scene: Scene;\r\n private _engine: AbstractEngine;\r\n private _meshes: Mesh[];\r\n private _totalVertices = 0;\r\n private _totalIndices?: number;\r\n /** @internal */\r\n public _loadedUniqueId: string;\r\n /** @internal */\r\n public _indices: IndicesArray;\r\n /** @internal */\r\n public _vertexBuffers: { [key: string]: VertexBuffer };\r\n private _isDisposed = false;\r\n private _extend: { minimum: Vector3; maximum: Vector3 } = {\r\n minimum: new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE),\r\n maximum: new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE),\r\n };\r\n private _boundingBias: Vector2;\r\n /** @internal */\r\n public _delayInfo: Array<string>;\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _indexBufferIsUpdatable = false;\r\n /** @internal */\r\n public _boundingInfo: Nullable<BoundingInfo>;\r\n /** @internal */\r\n public _delayLoadingFunction: Nullable<(any: any, geometry: Geometry) => void>;\r\n /** @internal */\r\n public _softwareSkinningFrameId: number;\r\n private _vertexArrayObjects: { [key: string]: WebGLVertexArrayObject };\r\n private _updatable: boolean;\r\n\r\n // Cache\r\n /** @internal */\r\n public _positions: Nullable<Vector3[]>;\r\n private _positionsCache: Vector3[] = [];\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<IAssetContainer> = null;\r\n\r\n /**\r\n * Gets or sets the Bias Vector to apply on the bounding elements (box/sphere), the max extend is computed as v += v * bias.x + bias.y, the min is computed as v -= v * bias.x + bias.y\r\n */\r\n public get boundingBias(): Vector2 {\r\n return this._boundingBias;\r\n }\r\n\r\n /**\r\n * Gets or sets the Bias Vector to apply on the bounding elements (box/sphere), the max extend is computed as v += v * bias.x + bias.y, the min is computed as v -= v * bias.x + bias.y\r\n */\r\n public set boundingBias(value: Vector2) {\r\n if (this._boundingBias) {\r\n this._boundingBias.copyFrom(value);\r\n } else {\r\n this._boundingBias = value.clone();\r\n }\r\n\r\n this._updateBoundingInfo(true, null);\r\n }\r\n\r\n /**\r\n * Static function used to attach a new empty geometry to a mesh\r\n * @param mesh defines the mesh to attach the geometry to\r\n * @returns the new Geometry\r\n */\r\n public static CreateGeometryForMesh(mesh: Mesh): Geometry {\r\n const geometry = new Geometry(Geometry.RandomId(), mesh.getScene());\r\n\r\n geometry.applyToMesh(mesh);\r\n\r\n return geometry;\r\n }\r\n\r\n /** Get the list of meshes using this geometry */\r\n public get meshes(): Mesh[] {\r\n return this._meshes;\r\n }\r\n\r\n /**\r\n * If set to true (false by default), the bounding info applied to the meshes sharing this geometry will be the bounding info defined at the class level\r\n * and won't be computed based on the vertex positions (which is what we get when useBoundingInfoFromGeometry = false)\r\n */\r\n public useBoundingInfoFromGeometry = false;\r\n\r\n /**\r\n * Creates a new geometry\r\n * @param id defines the unique ID\r\n * @param scene defines the hosting scene\r\n * @param vertexData defines the VertexData used to get geometry data\r\n * @param updatable defines if geometry must be updatable (false by default)\r\n * @param mesh defines the mesh that will be associated with the geometry\r\n * @param totalVertices defines the total number of vertices (optional)\r\n */\r\n constructor(id: string, scene?: Scene, vertexData?: VertexData, updatable: boolean = false, mesh: Nullable<Mesh> = null, totalVertices: Nullable<number> = null) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n this.id = id;\r\n this.uniqueId = this._scene.getUniqueId();\r\n this._engine = this._scene.getEngine();\r\n this._meshes = [];\r\n //Init vertex buffer cache\r\n this._vertexBuffers = {};\r\n this._indices = [];\r\n this._updatable = updatable;\r\n\r\n if (totalVertices !== null) {\r\n this._totalVertices = totalVertices;\r\n }\r\n\r\n // vertexData\r\n if (vertexData) {\r\n this.setAllVerticesData(vertexData, updatable);\r\n } else if (totalVertices === null) {\r\n this._totalVertices = 0;\r\n }\r\n\r\n if (this._engine.getCaps().vertexArrayObject) {\r\n this._vertexArrayObjects = {};\r\n }\r\n\r\n // applyToMesh\r\n if (mesh) {\r\n this.applyToMesh(mesh);\r\n mesh.computeWorldMatrix(true);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current extend of the geometry\r\n */\r\n public get extend(): { minimum: Vector3; maximum: Vector3 } {\r\n return this._extend;\r\n }\r\n\r\n /**\r\n * Gets the hosting scene\r\n * @returns the hosting Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the hosting engine\r\n * @returns the hosting Engine\r\n */\r\n public getEngine(): AbstractEngine {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Defines if the geometry is ready to use\r\n * @returns true if the geometry is ready to be used\r\n */\r\n public isReady(): boolean {\r\n return this.delayLoadState === Constants.DELAYLOADSTATE_LOADED || this.delayLoadState === Constants.DELAYLOADSTATE_NONE;\r\n }\r\n\r\n /**\r\n * Gets a value indicating that the geometry should not be serialized\r\n */\r\n public get doNotSerialize(): boolean {\r\n for (let index = 0; index < this._meshes.length; index++) {\r\n if (!this._meshes[index].doNotSerialize) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n if (this._vertexArrayObjects) {\r\n this._vertexArrayObjects = {};\r\n }\r\n\r\n // Index buffer\r\n if (this._meshes.length !== 0 && this._indices) {\r\n this._indexBuffer = this._engine.createIndexBuffer(this._indices, this._updatable, \"Geometry_\" + this.id + \"_IndexBuffer\");\r\n }\r\n\r\n // Vertex buffers\r\n const buffers = new Set<Buffer>();\r\n for (const key in this._vertexBuffers) {\r\n buffers.add(this._vertexBuffers[key].getWrapperBuffer());\r\n }\r\n\r\n buffers.forEach((buffer) => {\r\n buffer._rebuild();\r\n });\r\n }\r\n\r\n /**\r\n * Affects all geometry data in one call\r\n * @param vertexData defines the geometry data\r\n * @param updatable defines if the geometry must be flagged as updatable (false as default)\r\n */\r\n public setAllVerticesData(vertexData: VertexData, updatable?: boolean): void {\r\n vertexData.applyToGeometry(this, updatable);\r\n this._notifyUpdate();\r\n }\r\n\r\n /**\r\n * Set specific vertex data\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param data defines the vertex data to use\r\n * @param updatable defines if the vertex must be flagged as updatable (false as default)\r\n * @param stride defines the stride to use (0 by default). This value is deduced from the kind value if not specified\r\n */\r\n public setVerticesData(kind: string, data: FloatArray, updatable: boolean = false, stride?: number): void {\r\n if (updatable && Array.isArray(data)) {\r\n // to avoid converting to Float32Array at each draw call in engine.updateDynamicVertexBuffer, we make the conversion a single time here\r\n data = new Float32Array(data);\r\n }\r\n const buffer = new VertexBuffer(this._engine, data, kind, {\r\n updatable,\r\n postponeInternalCreation: this._meshes.length === 0,\r\n stride,\r\n label: \"Geometry_\" + this.id + \"_\" + kind,\r\n });\r\n this.setVerticesBuffer(buffer);\r\n }\r\n\r\n /**\r\n * Removes a specific vertex data\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n */\r\n public removeVerticesData(kind: string) {\r\n if (this._vertexBuffers[kind]) {\r\n this._vertexBuffers[kind].dispose();\r\n delete this._vertexBuffers[kind];\r\n }\r\n\r\n if (this._vertexArrayObjects) {\r\n this._disposeVertexArrayObjects();\r\n }\r\n }\r\n\r\n /**\r\n * Affect a vertex buffer to the geometry. the vertexBuffer.getKind() function is used to determine where to store the data\r\n * @param buffer defines the vertex buffer to use\r\n * @param totalVertices defines the total number of vertices for position kind (could be null)\r\n * @param disposeExistingBuffer disposes the existing buffer, if any (default: true)\r\n */\r\n public setVerticesBuffer(buffer: VertexBuffer, totalVertices: Nullable<number> = null, disposeExistingBuffer = true): void {\r\n const kind = buffer.getKind();\r\n if (this._vertexBuffers[kind] && disposeExistingBuffer) {\r\n this._vertexBuffers[kind].dispose();\r\n }\r\n\r\n if (buffer._buffer && buffer._ownsBuffer) {\r\n buffer._buffer._increaseReferences();\r\n }\r\n\r\n this._vertexBuffers[kind] = buffer;\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n\r\n if (kind === VertexBuffer.PositionKind) {\r\n this._totalVertices = totalVertices ?? buffer._maxVerticesCount;\r\n\r\n this._updateExtend(this.useBoundingInfoFromGeometry && this._boundingInfo ? null : buffer.getFloatData(this._totalVertices));\r\n this._resetPointsArrayCache();\r\n\r\n // this._extend can be empty if buffer.getFloatData(this._totalVertices) returned null\r\n const minimum = (this._extend && this._extend.minimum) || new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n const maximum = (this._extend && this._extend.maximum) || new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n\r\n for (let index = 0; index < numOfMeshes; index++) {\r\n const mesh = meshes[index];\r\n mesh.buildBoundingInfo(minimum, maximum);\r\n mesh._createGlobalSubMesh(mesh.isUnIndexed);\r\n mesh.computeWorldMatrix(true);\r\n mesh.synchronizeInstances();\r\n }\r\n }\r\n\r\n this._notifyUpdate(kind);\r\n }\r\n\r\n /**\r\n * Update a specific vertex buffer\r\n * This function will directly update the underlying DataBuffer according to the passed numeric array or Float32Array\r\n * It will do nothing if the buffer is not updatable\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param data defines the data to use\r\n * @param offset defines the offset in the target buffer where to store the data\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateVerticesDataDirectly(kind: string, data: DataArray, offset: number, useBytes: boolean = false): void {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n\r\n if (!vertexBuffer) {\r\n return;\r\n }\r\n\r\n vertexBuffer.updateDirectly(data, offset, useBytes);\r\n this._notifyUpdate(kind);\r\n }\r\n\r\n /**\r\n * Update a specific vertex buffer\r\n * This function will create a new buffer if the current one is not updatable\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param data defines the data to use\r\n * @param updateExtends defines if the geometry extends must be recomputed (false by default)\r\n */\r\n public updateVerticesData(kind: string, data: FloatArray, updateExtends: boolean = false): void {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n\r\n if (!vertexBuffer) {\r\n return;\r\n }\r\n\r\n vertexBuffer.update(data);\r\n\r\n if (kind === VertexBuffer.PositionKind) {\r\n this._updateBoundingInfo(updateExtends, data);\r\n }\r\n this._notifyUpdate(kind);\r\n }\r\n\r\n private _updateBoundingInfo(updateExtends: boolean, data: Nullable<FloatArray>) {\r\n if (updateExtends) {\r\n this._updateExtend(data);\r\n }\r\n\r\n this._resetPointsArrayCache();\r\n\r\n if (updateExtends) {\r\n const meshes = this._meshes;\r\n for (const mesh of meshes) {\r\n if (mesh.hasBoundingInfo) {\r\n mesh.getBoundingInfo().reConstruct(this._extend.minimum, this._extend.maximum);\r\n } else {\r\n mesh.buildBoundingInfo(this._extend.minimum, this._extend.maximum);\r\n }\r\n\r\n const subMeshes = mesh.subMeshes;\r\n for (const subMesh of subMeshes) {\r\n subMesh.refreshBoundingInfo();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _bind(\r\n effect: Nullable<Effect>,\r\n indexToBind?: Nullable<DataBuffer>,\r\n overrideVertexBuffers?: { [kind: string]: Nullable<VertexBuffer> },\r\n overrideVertexArrayObjects?: { [key: string]: WebGLVertexArrayObject }\r\n ): void {\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n if (indexToBind === undefined) {\r\n indexToBind = this._indexBuffer;\r\n }\r\n const vbs = this.getVertexBuffers();\r\n\r\n if (!vbs) {\r\n return;\r\n }\r\n\r\n if (indexToBind != this._indexBuffer || (!this._vertexArrayObjects && !overrideVertexArrayObjects)) {\r\n this._engine.bindBuffers(vbs, indexToBind, effect, overrideVertexBuffers);\r\n return;\r\n }\r\n\r\n const vaos = overrideVertexArrayObjects ? overrideVertexArrayObjects : this._vertexArrayObjects;\r\n const engine = this._engine as ThinEngine;\r\n\r\n // Using VAO\r\n if (!vaos[effect.key]) {\r\n vaos[effect.key] = engine.recordVertexArrayObject(vbs, indexToBind, effect, overrideVertexBuffers);\r\n }\r\n\r\n engine.bindVertexArrayObject(vaos[effect.key], indexToBind);\r\n }\r\n\r\n /**\r\n * Gets total number of vertices\r\n * @returns the total number of vertices\r\n */\r\n public getTotalVertices(): number {\r\n if (!this.isReady()) {\r\n return 0;\r\n }\r\n\r\n return this._totalVertices;\r\n }\r\n\r\n /**\r\n * Gets a specific vertex data attached to this geometry. Float data is constructed if the vertex buffer data cannot be returned directly.\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param copyWhenShared defines if the returned array must be cloned upon returning it if the current geometry is shared between multiple meshes\r\n * @param forceCopy defines a boolean indicating that the returned array must be cloned upon returning it\r\n * @returns a float array containing vertex data\r\n */\r\n public getVerticesData(kind: string, copyWhenShared?: boolean, forceCopy?: boolean): Nullable<FloatArray> {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n if (!vertexBuffer) {\r\n return null;\r\n }\r\n\r\n return vertexBuffer.getFloatData(this._totalVertices, forceCopy || (copyWhenShared && this._meshes.length !== 1));\r\n }\r\n\r\n /**\r\n * Copies the requested vertex data kind into the given vertex data map. Float data is constructed if the map doesn't have the data.\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @param vertexData defines the map that stores the resulting data\r\n */\r\n public copyVerticesData(kind: string, vertexData: { [kind: string]: Float32Array }): void {\r\n const vertexBuffer = this.getVertexBuffer(kind);\r\n if (!vertexBuffer) {\r\n return;\r\n }\r\n\r\n vertexData[kind] ||= new Float32Array(this._totalVertices * vertexBuffer.getSize());\r\n const data = vertexBuffer.getData();\r\n if (data) {\r\n CopyFloatData(\r\n data,\r\n vertexBuffer.getSize(),\r\n vertexBuffer.type,\r\n vertexBuffer.byteOffset,\r\n vertexBuffer.byteStride,\r\n vertexBuffer.normalized,\r\n this._totalVertices,\r\n vertexData[kind]\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Returns a boolean defining if the vertex data for the requested `kind` is updatable\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @returns true if the vertex buffer with the specified kind is updatable\r\n */\r\n public isVertexBufferUpdatable(kind: string): boolean {\r\n const vb = this._vertexBuffers[kind];\r\n\r\n if (!vb) {\r\n return false;\r\n }\r\n\r\n return vb.isUpdatable();\r\n }\r\n\r\n /**\r\n * Gets a specific vertex buffer\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @returns a VertexBuffer\r\n */\r\n public getVertexBuffer(kind: string): Nullable<VertexBuffer> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n return this._vertexBuffers[kind];\r\n }\r\n\r\n /**\r\n * Returns all vertex buffers\r\n * @returns an object holding all vertex buffers indexed by kind\r\n */\r\n public getVertexBuffers(): Nullable<{ [key: string]: VertexBuffer }> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n return this._vertexBuffers;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if specific vertex buffer is present\r\n * @param kind defines the data kind (Position, normal, etc...)\r\n * @returns true if data is present\r\n */\r\n public isVerticesDataPresent(kind: string): boolean {\r\n if (!this._vertexBuffers) {\r\n if (this._delayInfo) {\r\n return this._delayInfo.indexOf(kind) !== -1;\r\n }\r\n return false;\r\n }\r\n return this._vertexBuffers[kind] !== undefined;\r\n }\r\n\r\n /**\r\n * Gets a list of all attached data kinds (Position, normal, etc...)\r\n * @returns a list of string containing all kinds\r\n */\r\n public getVerticesDataKinds(): string[] {\r\n const result = [];\r\n let kind;\r\n if (!this._vertexBuffers && this._delayInfo) {\r\n for (kind in this._delayInfo) {\r\n result.push(kind);\r\n }\r\n } else {\r\n for (kind in this._vertexBuffers) {\r\n result.push(kind);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Update index buffer\r\n * @param indices defines the indices to store in the index buffer\r\n * @param offset defines the offset in the target buffer where to store the data\r\n * @param gpuMemoryOnly defines a boolean indicating that only the GPU memory must be updated leaving the CPU version of the indices unchanged (false by default)\r\n */\r\n public updateIndices(indices: IndicesArray, offset?: number, gpuMemoryOnly = false): void {\r\n if (!this._indexBuffer) {\r\n return;\r\n }\r\n\r\n if (!this._indexBufferIsUpdatable) {\r\n this.setIndices(indices, null, true);\r\n } else {\r\n const needToUpdateSubMeshes = indices.length !== this._indices.length;\r\n\r\n if (!gpuMemoryOnly) {\r\n this._indices = indices.slice();\r\n }\r\n this._engine.updateDynamicIndexBuffer(this._indexBuffer, indices, offset);\r\n if (needToUpdateSubMeshes) {\r\n for (const mesh of this._meshes) {\r\n mesh._createGlobalSubMesh(true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the index buffer for this geometry.\r\n * @param indexBuffer Defines the index buffer to use for this geometry\r\n * @param totalVertices Defines the total number of vertices used by the buffer\r\n * @param totalIndices Defines the total number of indices in the index buffer\r\n * @param is32Bits Defines if the indices are 32 bits. If null (default), the value is guessed from the number of vertices\r\n */\r\n public setIndexBuffer(indexBuffer: DataBuffer, totalVertices: number, totalIndices: number, is32Bits: Nullable<boolean> = null): void {\r\n this._indices = [];\r\n this._indexBufferIsUpdatable = false;\r\n this._indexBuffer = indexBuffer;\r\n this._totalVertices = totalVertices;\r\n this._totalIndices = totalIndices;\r\n\r\n if (is32Bits === null) {\r\n indexBuffer.is32Bits = totalVertices > 65535;\r\n } else {\r\n indexBuffer.is32Bits = is32Bits;\r\n }\r\n\r\n for (const mesh of this._meshes) {\r\n mesh._createGlobalSubMesh(true);\r\n mesh.synchronizeInstances();\r\n }\r\n\r\n this._notifyUpdate();\r\n }\r\n\r\n /**\r\n * Creates a new index buffer\r\n * @param indices defines the indices to store in the index buffer\r\n * @param totalVertices defines the total number of vertices (could be null)\r\n * @param updatable defines if the index buffer must be flagged as updatable (false by default)\r\n * @param dontForceSubMeshRecreation defines a boolean indicating that we don't want to force the recreation of sub-meshes if we don't have to (false by default)\r\n */\r\n public setIndices(indices: IndicesArray, totalVertices: Nullable<number> = null, updatable: boolean = false, dontForceSubMeshRecreation = false): void {\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n }\r\n\r\n this._indices = indices;\r\n this._indexBufferIsUpdatable = updatable;\r\n if (this._meshes.length !== 0 && this._indices) {\r\n this._indexBuffer = this._engine.createIndexBuffer(this._indices, updatable, \"Geometry_\" + this.id + \"_IndexBuffer\");\r\n }\r\n\r\n if (totalVertices != undefined) {\r\n // including null and undefined\r\n this._totalVertices = totalVertices;\r\n }\r\n\r\n for (const mesh of this._meshes) {\r\n mesh._createGlobalSubMesh(!dontForceSubMeshRecreation);\r\n mesh.synchronizeInstances();\r\n }\r\n\r\n this._notifyUpdate();\r\n }\r\n\r\n /**\r\n * Return the total number of indices\r\n * @returns the total number of indices\r\n */\r\n public getTotalIndices(): number {\r\n if (!this.isReady()) {\r\n return 0;\r\n }\r\n return this._totalIndices !== undefined ? this._totalIndices : this._indices.length;\r\n }\r\n\r\n /**\r\n * Gets the index buffer array\r\n * @param copyWhenShared defines if the returned array must be cloned upon returning it if the current geometry is shared between multiple meshes\r\n * @param forceCopy defines a boolean indicating that the returned array must be cloned upon returning it\r\n * @returns the index buffer array\r\n */\r\n public getIndices(copyWhenShared?: boolean, forceCopy?: boolean): Nullable<IndicesArray> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n const orig = this._indices;\r\n if (!forceCopy && (!copyWhenShared || this._meshes.length === 1)) {\r\n return orig;\r\n } else {\r\n return orig.slice();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the index buffer\r\n * @returns the index buffer\r\n */\r\n public getIndexBuffer(): Nullable<DataBuffer> {\r\n if (!this.isReady()) {\r\n return null;\r\n }\r\n return this._indexBuffer;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _releaseVertexArrayObject(effect: Nullable<Effect> = null) {\r\n if (!effect || !this._vertexArrayObjects) {\r\n return;\r\n }\r\n\r\n if (this._vertexArrayObjects[effect.key]) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObjects[effect.key]);\r\n delete this._vertexArrayObjects[effect.key];\r\n }\r\n }\r\n\r\n /**\r\n * Release the associated resources for a specific mesh\r\n * @param mesh defines the source mesh\r\n * @param shouldDispose defines if the geometry must be disposed if there is no more mesh pointing to it\r\n */\r\n public releaseForMesh(mesh: Mesh, shouldDispose?: boolean): void {\r\n const meshes = this._meshes;\r\n const index = meshes.indexOf(mesh);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n meshes.splice(index, 1);\r\n\r\n if (this._vertexArrayObjects) {\r\n mesh._invalidateInstanceVertexArrayObject();\r\n }\r\n\r\n mesh._geometry = null;\r\n\r\n if (meshes.length === 0 && shouldDispose) {\r\n this.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Apply current geometry to a given mesh\r\n * @param mesh defines the mesh to apply geometry to\r\n */\r\n public applyToMesh(mesh: Mesh): void {\r\n if (mesh._geometry === this) {\r\n return;\r\n }\r\n\r\n const previousGeometry = mesh._geometry;\r\n if (previousGeometry) {\r\n previousGeometry.releaseForMesh(mesh);\r\n }\r\n\r\n if (this._vertexArrayObjects) {\r\n mesh._invalidateInstanceVertexArrayObject();\r\n }\r\n\r\n const meshes = this._meshes;\r\n\r\n // must be done before setting vertexBuffers because of mesh._createGlobalSubMesh()\r\n mesh._geometry = this;\r\n mesh._internalAbstractMeshDataInfo._positions = null;\r\n\r\n this._scene.pushGeometry(this);\r\n\r\n meshes.push(mesh);\r\n\r\n if (this.isReady()) {\r\n this._applyToMesh(mesh);\r\n } else if (this._boundingInfo) {\r\n mesh.setBoundingInfo(this._boundingInfo);\r\n }\r\n }\r\n\r\n private _updateExtend(data: Nullable<FloatArray> = null) {\r\n if (this.useBoundingInfoFromGeometry && this._boundingInfo) {\r\n this._extend = {\r\n minimum: this._boundingInfo.minimum.clone(),\r\n maximum: this._boundingInfo.maximum.clone(),\r\n };\r\n } else {\r\n if (!data) {\r\n data = this.getVerticesData(VertexBuffer.PositionKind)!;\r\n // This can happen if the buffer comes from a Hardware Buffer where\r\n // The data have not been uploaded by Babylon. (ex: Compute Shaders and Storage Buffers)\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n\r\n this._extend = extractMinAndMax(data, 0, this._totalVertices, this.boundingBias, 3);\r\n }\r\n }\r\n\r\n private _applyToMesh(mesh: Mesh): void {\r\n // vertexBuffers\r\n for (const kind in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[kind];\r\n if (!vertexBuffer._buffer.getBuffer()) {\r\n vertexBuffer.create();\r\n }\r\n\r\n if (kind === VertexBuffer.PositionKind) {\r\n if (!this._extend) {\r\n this._updateExtend();\r\n }\r\n mesh.buildBoundingInfo(this._extend.minimum, this._extend.maximum);\r\n\r\n mesh._createGlobalSubMesh(mesh.isUnIndexed);\r\n\r\n //bounding info was just created again, world matrix should be applied again.\r\n mesh._updateBoundingInfo();\r\n }\r\n }\r\n\r\n // indexBuffer\r\n if (!this._indexBuffer && this._indices && this._indices.length > 0) {\r\n this._indexBuffer = this._engine.createIndexBuffer(this._indices, this._updatable, \"Geometry_\" + this.id + \"_IndexBuffer\");\r\n }\r\n\r\n // morphTargets\r\n mesh._syncGeometryWithMorphTargetManager();\r\n\r\n // instances\r\n mesh.synchronizeInstances();\r\n }\r\n\r\n private _notifyUpdate(kind?: string) {\r\n if (this.onGeometryUpdated) {\r\n this.onGeometryUpdated(this, kind);\r\n }\r\n\r\n if (this._vertexArrayObjects) {\r\n this._disposeVertexArrayObjects();\r\n }\r\n\r\n for (const mesh of this._meshes) {\r\n mesh._markSubMeshesAsAttributesDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Load the geometry if it was flagged as delay loaded\r\n * @param scene defines the hosting scene\r\n * @param onLoaded defines a callback called when the geometry is loaded\r\n */\r\n public load(scene: Scene, onLoaded?: () => void): void {\r\n if (this.delayLoadState === Constants.DELAYLOADSTATE_LOADING) {\r\n return;\r\n }\r\n\r\n if (this.isReady()) {\r\n if (onLoaded) {\r\n onLoaded();\r\n }\r\n return;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADING;\r\n\r\n this._queueLoad(scene, onLoaded);\r\n }\r\n\r\n private _queueLoad(scene: Scene, onLoaded?: () => void): void {\r\n if (!this.delayLoadingFile) {\r\n return;\r\n }\r\n\r\n scene.addPendingData(this);\r\n void (async () => {\r\n try {\r\n const data = await scene._loadDelayedFileAsync(this.delayLoadingFile!, false, true);\r\n\r\n if (!this._delayLoadingFunction) {\r\n // The geometry was disposed while the load was in flight; still release the pending data so the scene can become ready.\r\n scene.removePendingData(this);\r\n return;\r\n }\r\n\r\n this._delayLoadingFunction(JSON.parse(data as string), this);\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._delayInfo = [];\r\n\r\n scene.removePendingData(this);\r\n\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n for (let index = 0; index < numOfMeshes; index++) {\r\n this._applyToMesh(meshes[index]);\r\n }\r\n\r\n if (onLoaded) {\r\n onLoaded();\r\n }\r\n } catch (error) {\r\n // Remove the pending data so the scene can still become ready.\r\n // The state is intentionally left as LOADING so a persistently failing file is not re-fetched every frame.\r\n scene.removePendingData(this);\r\n // Don't log when the scene is being disposed: in-flight requests are aborted as part of normal teardown.\r\n if (!scene.isDisposed) {\r\n Logger.Error(`Unable to delay load geometry \"${this.id}\" from \"${this.delayLoadingFile}\": ${error}`);\r\n }\r\n }\r\n })();\r\n }\r\n\r\n /**\r\n * Invert the geometry to move from a right handed system to a left handed one.\r\n */\r\n public toLeftHanded(): void {\r\n // Flip faces\r\n const tIndices = this.getIndices(false);\r\n if (tIndices != null && tIndices.length > 0) {\r\n for (let i = 0; i < tIndices.length; i += 3) {\r\n const tTemp = tIndices[i + 0];\r\n tIndices[i + 0] = tIndices[i + 2];\r\n tIndices[i + 2] = tTemp;\r\n }\r\n this.setIndices(tIndices);\r\n }\r\n\r\n // Negate position.z\r\n const tPositions = this.getVerticesData(VertexBuffer.PositionKind, false);\r\n if (tPositions != null && tPositions.length > 0) {\r\n for (let i = 0; i < tPositions.length; i += 3) {\r\n tPositions[i + 2] = -tPositions[i + 2];\r\n }\r\n this.setVerticesData(VertexBuffer.PositionKind, tPositions, false);\r\n }\r\n\r\n // Negate normal.z\r\n const tNormals = this.getVerticesData(VertexBuffer.NormalKind, false);\r\n if (tNormals != null && tNormals.length > 0) {\r\n for (let i = 0; i < tNormals.length; i += 3) {\r\n tNormals[i + 2] = -tNormals[i + 2];\r\n }\r\n this.setVerticesData(VertexBuffer.NormalKind, tNormals, false);\r\n }\r\n }\r\n\r\n // Cache\r\n /** @internal */\r\n public _resetPointsArrayCache(): void {\r\n this._positions = null;\r\n }\r\n\r\n /** @internal */\r\n public _generatePointsArray(): boolean {\r\n if (this._positions) {\r\n return true;\r\n }\r\n\r\n const data = this.getVerticesData(VertexBuffer.PositionKind);\r\n\r\n if (!data || data.length === 0) {\r\n return false;\r\n }\r\n\r\n for (let index = this._positionsCache.length * 3, arrayIdx = this._positionsCache.length; index < data.length; index += 3, ++arrayIdx) {\r\n this._positionsCache[arrayIdx] = Vector3.FromArray(data, index);\r\n }\r\n\r\n for (let index = 0, arrayIdx = 0; index < data.length; index += 3, ++arrayIdx) {\r\n this._positionsCache[arrayIdx].set(data[0 + index], data[1 + index], data[2 + index]);\r\n }\r\n\r\n // just in case the number of positions was reduced, splice the array\r\n this._positionsCache.length = data.length / 3;\r\n\r\n this._positions = this._positionsCache;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets a value indicating if the geometry is disposed\r\n * @returns true if the geometry was disposed\r\n */\r\n public isDisposed(): boolean {\r\n return this._isDisposed;\r\n }\r\n\r\n private _disposeVertexArrayObjects(): void {\r\n if (this._vertexArrayObjects) {\r\n for (const kind in this._vertexArrayObjects) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObjects[kind]);\r\n }\r\n this._vertexArrayObjects = {}; // Will trigger a rebuild of the VAO if supported\r\n\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n for (let index = 0; index < numOfMeshes; index++) {\r\n meshes[index]._invalidateInstanceVertexArrayObject();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Free all associated resources\r\n */\r\n public dispose(): void {\r\n const meshes = this._meshes;\r\n const numOfMeshes = meshes.length;\r\n let index: number;\r\n for (index = 0; index < numOfMeshes; index++) {\r\n this.releaseForMesh(meshes[index]);\r\n }\r\n this._meshes.length = 0;\r\n\r\n this._disposeVertexArrayObjects();\r\n\r\n for (const kind in this._vertexBuffers) {\r\n this._vertexBuffers[kind].dispose();\r\n }\r\n this._vertexBuffers = {};\r\n this._totalVertices = 0;\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n }\r\n this._indexBuffer = null;\r\n this._indices = [];\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NONE;\r\n this.delayLoadingFile = null;\r\n this._delayLoadingFunction = null;\r\n this._delayInfo = [];\r\n\r\n this._boundingInfo = null;\r\n\r\n this._scene.removeGeometry(this);\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.geometries.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.geometries.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n this._isDisposed = true;\r\n }\r\n\r\n /**\r\n * Clone the current geometry into a new geometry\r\n * @param id defines the unique ID of the new geometry\r\n * @returns a new geometry object\r\n */\r\n public copy(id: string): Geometry {\r\n const geometry = new Geometry(id, this._scene);\r\n\r\n const indices = this.getIndices(undefined, true);\r\n if (indices) {\r\n geometry.setIndices(indices);\r\n }\r\n\r\n let updatable = false;\r\n let kind;\r\n for (kind in this._vertexBuffers) {\r\n const vb = this.getVertexBuffer(kind)!;\r\n const bufferData = vb.getData();\r\n if (!bufferData) {\r\n continue;\r\n }\r\n\r\n const isUpdatable = vb.isUpdatable();\r\n const size = vb.getSize();\r\n const { type, byteOffset, byteStride, normalized } = vb;\r\n updatable = updatable || isUpdatable;\r\n\r\n let numElements = this._totalVertices;\r\n if (vb.getIsInstanced()) {\r\n // Do our best with the data we have to find a number of instances when the vertex buffer is instanced...\r\n let bufferDataByteSize: number;\r\n if (bufferData instanceof Array) {\r\n bufferDataByteSize = bufferData.length * 4;\r\n } else {\r\n bufferDataByteSize = bufferData.byteLength;\r\n }\r\n numElements = bufferDataByteSize / byteStride;\r\n }\r\n const copy = GetTypedArrayData(bufferData, size, type, byteOffset, byteStride, numElements, true);\r\n const newVb = new VertexBuffer(this._engine, copy, kind, {\r\n updatable: isUpdatable,\r\n useBytes: false,\r\n stride: size, // Copy is tightly-packed, so stride = size\r\n size: size, // Component size stays the same\r\n offset: 0, // Copy starts at beginning of its own buffer\r\n type: type,\r\n normalized: normalized,\r\n takeBufferOwnership: true,\r\n instanced: vb.getIsInstanced(),\r\n });\r\n\r\n geometry.setVerticesBuffer(newVb, numElements);\r\n }\r\n\r\n geometry._updatable = updatable;\r\n\r\n geometry.delayLoadState = this.delayLoadState;\r\n geometry.delayLoadingFile = this.delayLoadingFile;\r\n geometry._delayLoadingFunction = this._delayLoadingFunction;\r\n\r\n for (kind in this._delayInfo) {\r\n geometry._delayInfo = geometry._delayInfo || [];\r\n geometry._delayInfo.push(kind);\r\n }\r\n\r\n // Bounding info\r\n geometry._boundingInfo = new BoundingInfo(this._extend.minimum, this._extend.maximum);\r\n\r\n return geometry;\r\n }\r\n\r\n /**\r\n * Serialize the current geometry info (and not the vertices data) into a JSON object\r\n * @returns a JSON representation of the current geometry data (without the vertices data)\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.id;\r\n serializationObject.uniqueId = this.uniqueId;\r\n serializationObject.updatable = this._updatable;\r\n\r\n if (Tags && Tags.HasTags(this)) {\r\n serializationObject.tags = Tags.GetTags(this);\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _toNumberArray(origin: Nullable<Float32Array | IndicesArray>): number[] {\r\n if (Array.isArray(origin)) {\r\n return origin;\r\n } else {\r\n return Array.prototype.slice.call(origin);\r\n }\r\n }\r\n\r\n /**\r\n * Release any memory retained by the cached data on the Geometry.\r\n *\r\n * Call this function to reduce memory footprint of the mesh.\r\n * Vertex buffers will not store CPU data anymore (this will prevent picking, collisions or physics to work correctly)\r\n */\r\n public clearCachedData(): void {\r\n this._totalIndices = this._indices.length; // save the current value so that getTotalIndices can still work\r\n this._indices = [];\r\n this._resetPointsArrayCache();\r\n\r\n for (const vbName in this._vertexBuffers) {\r\n if (!Object.prototype.hasOwnProperty.call(this._vertexBuffers, vbName)) {\r\n continue;\r\n }\r\n this._vertexBuffers[vbName]._buffer._data = null;\r\n }\r\n }\r\n\r\n /**\r\n * Serialize all vertices data into a JSON object\r\n * @returns a JSON representation of the current geometry data\r\n */\r\n public serializeVerticeData(): any {\r\n const serializationObject = this.serialize();\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.PositionKind)) {\r\n serializationObject.positions = this._toNumberArray(this.getVerticesData(VertexBuffer.PositionKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.PositionKind)) {\r\n serializationObject.positionsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n serializationObject.normals = this._toNumberArray(this.getVerticesData(VertexBuffer.NormalKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.NormalKind)) {\r\n serializationObject.normalsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n serializationObject.tangents = this._toNumberArray(this.getVerticesData(VertexBuffer.TangentKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.TangentKind)) {\r\n serializationObject.tangentsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n serializationObject.uvs = this._toNumberArray(this.getVerticesData(VertexBuffer.UVKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UVKind)) {\r\n serializationObject.uvsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n serializationObject.uvs2 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV2Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV2Kind)) {\r\n serializationObject.uvs2Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV3Kind)) {\r\n serializationObject.uvs3 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV3Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV3Kind)) {\r\n serializationObject.uvs3Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV4Kind)) {\r\n serializationObject.uvs4 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV4Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV4Kind)) {\r\n serializationObject.uvs4Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV5Kind)) {\r\n serializationObject.uvs5 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV5Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV5Kind)) {\r\n serializationObject.uvs5Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.UV6Kind)) {\r\n serializationObject.uvs6 = this._toNumberArray(this.getVerticesData(VertexBuffer.UV6Kind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.UV6Kind)) {\r\n serializationObject.uvs6Updatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.ColorKind)) {\r\n serializationObject.colors = this._toNumberArray(this.getVerticesData(VertexBuffer.ColorKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.ColorKind)) {\r\n serializationObject.colorsUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.MatricesIndicesKind)) {\r\n serializationObject.matricesIndices = this._toNumberArray(this.getVerticesData(VertexBuffer.MatricesIndicesKind));\r\n serializationObject.matricesIndicesExpanded = true;\r\n if (this.isVertexBufferUpdatable(VertexBuffer.MatricesIndicesKind)) {\r\n serializationObject.matricesIndicesUpdatable = true;\r\n }\r\n }\r\n\r\n if (this.isVerticesDataPresent(VertexBuffer.MatricesWeightsKind)) {\r\n serializationObject.matricesWeights = this._toNumberArray(this.getVerticesData(VertexBuffer.MatricesWeightsKind));\r\n if (this.isVertexBufferUpdatable(VertexBuffer.MatricesWeightsKind)) {\r\n serializationObject.matricesWeightsUpdatable = true;\r\n }\r\n }\r\n\r\n serializationObject.indices = this._toNumberArray(this.getIndices());\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Extracts a clone of a mesh geometry\r\n * @param mesh defines the source mesh\r\n * @param id defines the unique ID of the new geometry object\r\n * @returns the new geometry object\r\n */\r\n public static ExtractFromMesh(mesh: Mesh, id: string): Nullable<Geometry> {\r\n const geometry = mesh._geometry;\r\n\r\n if (!geometry) {\r\n return null;\r\n }\r\n\r\n return geometry.copy(id);\r\n }\r\n\r\n /**\r\n * You should now use Tools.RandomId(), this method is still here for legacy reasons.\r\n * Implementation from http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#answer-2117523\r\n * Be aware Math.random() could cause collisions, but:\r\n * \"All but 6 of the 128 bits of the ID are randomly generated, which means that for any two ids, there's a 1 in 2^^122 (or 5.3x10^^36) chance they'll collide\"\r\n * @returns a string containing a new GUID\r\n */\r\n public static RandomId(): string {\r\n return Tools.RandomId();\r\n }\r\n\r\n private static _GetGeometryByLoadedUniqueId(uniqueId: string, scene: Scene) {\r\n for (let index = 0; index < scene.geometries.length; index++) {\r\n if (scene.geometries[index]._loadedUniqueId === uniqueId) {\r\n return scene.geometries[index];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _ImportGeometry(parsedGeometry: any, mesh: Mesh): void {\r\n const scene = mesh.getScene();\r\n\r\n // Geometry\r\n const geometryUniqueId = parsedGeometry.geometryUniqueId;\r\n const geometryId = parsedGeometry.geometryId;\r\n if (geometryUniqueId || geometryId) {\r\n const geometry = geometryUniqueId ? this._GetGeometryByLoadedUniqueId(geometryUniqueId, scene) : scene.getGeometryById(geometryId);\r\n if (geometry) {\r\n geometry.applyToMesh(mesh);\r\n }\r\n } else if (parsedGeometry instanceof ArrayBuffer) {\r\n const binaryInfo = mesh._binaryInfo;\r\n\r\n if (binaryInfo.positionsAttrDesc && binaryInfo.positionsAttrDesc.count > 0) {\r\n const positionsData = new Float32Array(parsedGeometry, binaryInfo.positionsAttrDesc.offset, binaryInfo.positionsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.PositionKind, positionsData, false);\r\n }\r\n\r\n if (binaryInfo.normalsAttrDesc && binaryInfo.normalsAttrDesc.count > 0) {\r\n const normalsData = new Float32Array(parsedGeometry, binaryInfo.normalsAttrDesc.offset, binaryInfo.normalsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.NormalKind, normalsData, false);\r\n }\r\n\r\n if (binaryInfo.tangetsAttrDesc && binaryInfo.tangetsAttrDesc.count > 0) {\r\n const tangentsData = new Float32Array(parsedGeometry, binaryInfo.tangetsAttrDesc.offset, binaryInfo.tangetsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.TangentKind, tangentsData, false);\r\n }\r\n\r\n if (binaryInfo.uvsAttrDesc && binaryInfo.uvsAttrDesc.count > 0) {\r\n const uvsData = new Float32Array(parsedGeometry, binaryInfo.uvsAttrDesc.offset, binaryInfo.uvsAttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvsData.length; index += 2) {\r\n uvsData[index] = 1 - uvsData[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UVKind, uvsData, false);\r\n }\r\n\r\n if (binaryInfo.uvs2AttrDesc && binaryInfo.uvs2AttrDesc.count > 0) {\r\n const uvs2Data = new Float32Array(parsedGeometry, binaryInfo.uvs2AttrDesc.offset, binaryInfo.uvs2AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs2Data.length; index += 2) {\r\n uvs2Data[index] = 1 - uvs2Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV2Kind, uvs2Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs3AttrDesc && binaryInfo.uvs3AttrDesc.count > 0) {\r\n const uvs3Data = new Float32Array(parsedGeometry, binaryInfo.uvs3AttrDesc.offset, binaryInfo.uvs3AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs3Data.length; index += 2) {\r\n uvs3Data[index] = 1 - uvs3Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV3Kind, uvs3Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs4AttrDesc && binaryInfo.uvs4AttrDesc.count > 0) {\r\n const uvs4Data = new Float32Array(parsedGeometry, binaryInfo.uvs4AttrDesc.offset, binaryInfo.uvs4AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs4Data.length; index += 2) {\r\n uvs4Data[index] = 1 - uvs4Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV4Kind, uvs4Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs5AttrDesc && binaryInfo.uvs5AttrDesc.count > 0) {\r\n const uvs5Data = new Float32Array(parsedGeometry, binaryInfo.uvs5AttrDesc.offset, binaryInfo.uvs5AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs5Data.length; index += 2) {\r\n uvs5Data[index] = 1 - uvs5Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV5Kind, uvs5Data, false);\r\n }\r\n\r\n if (binaryInfo.uvs6AttrDesc && binaryInfo.uvs6AttrDesc.count > 0) {\r\n const uvs6Data = new Float32Array(parsedGeometry, binaryInfo.uvs6AttrDesc.offset, binaryInfo.uvs6AttrDesc.count);\r\n if (useOpenGLOrientationForUV) {\r\n for (let index = 1; index < uvs6Data.length; index += 2) {\r\n uvs6Data[index] = 1 - uvs6Data[index];\r\n }\r\n }\r\n mesh.setVerticesData(VertexBuffer.UV6Kind, uvs6Data, false);\r\n }\r\n\r\n if (binaryInfo.colorsAttrDesc && binaryInfo.colorsAttrDesc.count > 0) {\r\n const colorsData = new Float32Array(parsedGeometry, binaryInfo.colorsAttrDesc.offset, binaryInfo.colorsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.ColorKind, colorsData, false, binaryInfo.colorsAttrDesc.stride);\r\n }\r\n\r\n if (binaryInfo.matricesIndicesAttrDesc && binaryInfo.matricesIndicesAttrDesc.count > 0) {\r\n const matricesIndicesData = new Int32Array(parsedGeometry, binaryInfo.matricesIndicesAttrDesc.offset, binaryInfo.matricesIndicesAttrDesc.count);\r\n const floatIndices = [];\r\n for (let i = 0; i < matricesIndicesData.length; i++) {\r\n const index = matricesIndicesData[i];\r\n floatIndices.push(index & 0x000000ff);\r\n floatIndices.push((index & 0x0000ff00) >> 8);\r\n floatIndices.push((index & 0x00ff0000) >> 16);\r\n floatIndices.push((index >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesKind, floatIndices, false);\r\n }\r\n\r\n if (binaryInfo.matricesIndicesExtraAttrDesc && binaryInfo.matricesIndicesExtraAttrDesc.count > 0) {\r\n const matricesIndicesData = new Int32Array(parsedGeometry, binaryInfo.matricesIndicesExtraAttrDesc.offset, binaryInfo.matricesIndicesExtraAttrDesc.count);\r\n const floatIndices = [];\r\n for (let i = 0; i < matricesIndicesData.length; i++) {\r\n const index = matricesIndicesData[i];\r\n floatIndices.push(index & 0x000000ff);\r\n floatIndices.push((index & 0x0000ff00) >> 8);\r\n floatIndices.push((index & 0x00ff0000) >> 16);\r\n floatIndices.push((index >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesExtraKind, floatIndices, false);\r\n }\r\n\r\n if (binaryInfo.matricesWeightsAttrDesc && binaryInfo.matricesWeightsAttrDesc.count > 0) {\r\n const matricesWeightsData = new Float32Array(parsedGeometry, binaryInfo.matricesWeightsAttrDesc.offset, binaryInfo.matricesWeightsAttrDesc.count);\r\n mesh.setVerticesData(VertexBuffer.MatricesWeightsKind, matricesWeightsData, false);\r\n }\r\n\r\n if (binaryInfo.indicesAttrDesc && binaryInfo.indicesAttrDesc.count > 0) {\r\n const indicesData = new Int32Array(parsedGeometry, binaryInfo.indicesAttrDesc.offset, binaryInfo.indicesAttrDesc.count);\r\n mesh.setIndices(indicesData, null);\r\n }\r\n\r\n if (binaryInfo.subMeshesAttrDesc && binaryInfo.subMeshesAttrDesc.count > 0) {\r\n const subMeshesData = new Int32Array(parsedGeometry, binaryInfo.subMeshesAttrDesc.offset, binaryInfo.subMeshesAttrDesc.count * 5);\r\n\r\n mesh.subMeshes = [];\r\n for (let i = 0; i < binaryInfo.subMeshesAttrDesc.count; i++) {\r\n const materialIndex = subMeshesData[i * 5 + 0];\r\n const verticesStart = subMeshesData[i * 5 + 1];\r\n const verticesCount = subMeshesData[i * 5 + 2];\r\n const indexStart = subMeshesData[i * 5 + 3];\r\n const indexCount = subMeshesData[i * 5 + 4];\r\n\r\n SubMesh.AddToMesh(materialIndex, verticesStart, verticesCount, indexStart, indexCount, <AbstractMesh>mesh);\r\n }\r\n }\r\n } else if (parsedGeometry.positions && parsedGeometry.normals && parsedGeometry.indices) {\r\n mesh.setVerticesData(VertexBuffer.PositionKind, parsedGeometry.positions, parsedGeometry.positions._updatable || parsedGeometry.positionsUpdatable);\r\n\r\n mesh.setVerticesData(VertexBuffer.NormalKind, parsedGeometry.normals, parsedGeometry.normals._updatable || parsedGeometry.normalsUpdatable);\r\n\r\n if (parsedGeometry.tangents) {\r\n mesh.setVerticesData(VertexBuffer.TangentKind, parsedGeometry.tangents, parsedGeometry.tangents._updatable || parsedGeometry.tangentsUpdatable);\r\n }\r\n\r\n if (parsedGeometry.uvs) {\r\n mesh.setVerticesData(VertexBuffer.UVKind, parsedGeometry.uvs, parsedGeometry.uvs._updatable || parsedGeometry.uvsUpdatable);\r\n }\r\n\r\n if (parsedGeometry.uvs2) {\r\n mesh.setVerticesData(VertexBuffer.UV2Kind, parsedGeometry.uvs2, parsedGeometry.uvs2._updatable || parsedGeometry.uvs2Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs3) {\r\n mesh.setVerticesData(VertexBuffer.UV3Kind, parsedGeometry.uvs3, parsedGeometry.uvs3._updatable || parsedGeometry.uvs3Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs4) {\r\n mesh.setVerticesData(VertexBuffer.UV4Kind, parsedGeometry.uvs4, parsedGeometry.uvs4._updatable || parsedGeometry.uvs4Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs5) {\r\n mesh.setVerticesData(VertexBuffer.UV5Kind, parsedGeometry.uvs5, parsedGeometry.uvs5._updatable || parsedGeometry.uvs5Updatable);\r\n }\r\n\r\n if (parsedGeometry.uvs6) {\r\n mesh.setVerticesData(VertexBuffer.UV6Kind, parsedGeometry.uvs6, parsedGeometry.uvs6._updatable || parsedGeometry.uvs6Updatable);\r\n }\r\n\r\n if (parsedGeometry.colors) {\r\n mesh.setVerticesData(VertexBuffer.ColorKind, Color4.CheckColors4(parsedGeometry.colors, parsedGeometry.positions.length / 3), parsedGeometry.colors._updatable);\r\n }\r\n\r\n if (parsedGeometry.matricesIndices) {\r\n if (!parsedGeometry.matricesIndices._isExpanded && !parsedGeometry.matricesIndicesExpanded) {\r\n const floatIndices = [];\r\n\r\n for (let i = 0; i < parsedGeometry.matricesIndices.length; i++) {\r\n const matricesIndex = parsedGeometry.matricesIndices[i];\r\n\r\n floatIndices.push(matricesIndex & 0x000000ff);\r\n floatIndices.push((matricesIndex & 0x0000ff00) >> 8);\r\n floatIndices.push((matricesIndex & 0x00ff0000) >> 16);\r\n floatIndices.push((matricesIndex >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesKind, floatIndices, parsedGeometry.matricesIndices._updatable || parsedGeometry.matricesIndicesUpdatable);\r\n } else {\r\n delete parsedGeometry.matricesIndices._isExpanded;\r\n delete parsedGeometry.matricesIndicesExpanded;\r\n mesh.setVerticesData(\r\n VertexBuffer.MatricesIndicesKind,\r\n parsedGeometry.matricesIndices,\r\n parsedGeometry.matricesIndices._updatable || parsedGeometry.matricesIndicesUpdatable\r\n );\r\n }\r\n }\r\n\r\n if (parsedGeometry.matricesIndicesExtra) {\r\n if (!(parsedGeometry.matricesIndicesExtraExpanded || parsedGeometry.matricesIndicesExtra._isExpanded)) {\r\n const floatIndices = [];\r\n\r\n for (let i = 0; i < parsedGeometry.matricesIndicesExtra.length; i++) {\r\n const matricesIndex = parsedGeometry.matricesIndicesExtra[i];\r\n\r\n floatIndices.push(matricesIndex & 0x000000ff);\r\n floatIndices.push((matricesIndex & 0x0000ff00) >> 8);\r\n floatIndices.push((matricesIndex & 0x00ff0000) >> 16);\r\n floatIndices.push((matricesIndex >> 24) & 0xff); // & 0xFF to convert to v + 256 if v < 0\r\n }\r\n\r\n mesh.setVerticesData(\r\n VertexBuffer.MatricesIndicesExtraKind,\r\n floatIndices,\r\n parsedGeometry.matricesIndicesExtra._updatable || parsedGeometry.matricesIndicesExtraUpdatable\r\n );\r\n } else {\r\n delete parsedGeometry.matricesIndices._isExpanded;\r\n delete parsedGeometry.matricesIndicesExtraExpanded;\r\n mesh.setVerticesData(\r\n VertexBuffer.MatricesIndicesExtraKind,\r\n parsedGeometry.matricesIndicesExtra,\r\n parsedGeometry.matricesIndicesExtra._updatable || parsedGeometry.matricesIndicesExtraUpdatable\r\n );\r\n }\r\n }\r\n\r\n if (parsedGeometry.matricesWeights) {\r\n Geometry._CleanMatricesWeights(parsedGeometry, mesh);\r\n mesh.setVerticesData(VertexBuffer.MatricesWeightsKind, parsedGeometry.matricesWeights, parsedGeometry.matricesWeights._updatable);\r\n }\r\n\r\n if (parsedGeometry.matricesWeightsExtra) {\r\n mesh.setVerticesData(VertexBuffer.MatricesWeightsExtraKind, parsedGeometry.matricesWeightsExtra, parsedGeometry.matricesWeights._updatable);\r\n }\r\n\r\n mesh.setIndices(parsedGeometry.indices, null);\r\n }\r\n\r\n // SubMeshes\r\n if (parsedGeometry.subMeshes) {\r\n mesh.subMeshes = [];\r\n for (let subIndex = 0; subIndex < parsedGeometry.subMeshes.length; subIndex++) {\r\n const parsedSubMesh = parsedGeometry.subMeshes[subIndex];\r\n\r\n SubMesh.AddToMesh(\r\n parsedSubMesh.materialIndex,\r\n parsedSubMesh.verticesStart,\r\n parsedSubMesh.verticesCount,\r\n parsedSubMesh.indexStart,\r\n parsedSubMesh.indexCount,\r\n <AbstractMesh>mesh\r\n );\r\n }\r\n }\r\n\r\n // Flat shading\r\n if (mesh._shouldGenerateFlatShading) {\r\n mesh.convertToFlatShadedMesh();\r\n mesh._shouldGenerateFlatShading = false;\r\n }\r\n\r\n // Update\r\n mesh.computeWorldMatrix(true);\r\n\r\n scene.onMeshImportedObservable.notifyObservers(<AbstractMesh>mesh);\r\n }\r\n\r\n private static _CleanMatricesWeights(parsedGeometry: any, mesh: Mesh): void {\r\n const epsilon: number = 1e-3;\r\n if (!SceneLoaderFlags.CleanBoneMatrixWeights) {\r\n return;\r\n }\r\n let noInfluenceBoneIndex: number;\r\n if (parsedGeometry.skeletonId > -1) {\r\n const skeleton = mesh.getScene().getLastSkeletonById(parsedGeometry.skeletonId);\r\n\r\n if (!skeleton) {\r\n return;\r\n }\r\n noInfluenceBoneIndex = skeleton.bones.length;\r\n } else {\r\n return;\r\n }\r\n const matricesIndices = <FloatArray>mesh.getVerticesData(VertexBuffer.MatricesIndicesKind);\r\n const matricesIndicesExtra = <FloatArray>mesh.getVerticesData(VertexBuffer.MatricesIndicesExtraKind);\r\n const matricesWeights = parsedGeometry.matricesWeights;\r\n const matricesWeightsExtra = parsedGeometry.matricesWeightsExtra;\r\n const influencers = parsedGeometry.numBoneInfluencer;\r\n const size = matricesWeights.length;\r\n\r\n for (let i = 0; i < size; i += 4) {\r\n let weight = 0.0;\r\n let firstZeroWeight = -1;\r\n for (let j = 0; j < 4; j++) {\r\n const w = matricesWeights[i + j];\r\n weight += w;\r\n if (w < epsilon && firstZeroWeight < 0) {\r\n firstZeroWeight = j;\r\n }\r\n }\r\n if (matricesWeightsExtra) {\r\n for (let j = 0; j < 4; j++) {\r\n const w = matricesWeightsExtra[i + j];\r\n weight += w;\r\n if (w < epsilon && firstZeroWeight < 0) {\r\n firstZeroWeight = j + 4;\r\n }\r\n }\r\n }\r\n if (firstZeroWeight < 0 || firstZeroWeight > influencers - 1) {\r\n firstZeroWeight = influencers - 1;\r\n }\r\n if (weight > epsilon) {\r\n const mweight = 1.0 / weight;\r\n for (let j = 0; j < 4; j++) {\r\n matricesWeights[i + j] *= mweight;\r\n }\r\n if (matricesWeightsExtra) {\r\n for (let j = 0; j < 4; j++) {\r\n matricesWeightsExtra[i + j] *= mweight;\r\n }\r\n }\r\n } else {\r\n if (firstZeroWeight >= 4) {\r\n matricesWeightsExtra[i + firstZeroWeight - 4] = 1.0 - weight;\r\n matricesIndicesExtra[i + firstZeroWeight - 4] = noInfluenceBoneIndex;\r\n } else {\r\n matricesWeights[i + firstZeroWeight] = 1.0 - weight;\r\n matricesIndices[i + firstZeroWeight] = noInfluenceBoneIndex;\r\n }\r\n }\r\n }\r\n\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesKind, matricesIndices);\r\n if (parsedGeometry.matricesWeightsExtra) {\r\n mesh.setVerticesData(VertexBuffer.MatricesIndicesExtraKind, matricesIndicesExtra);\r\n }\r\n }\r\n\r\n /**\r\n * Create a new geometry from persisted data (Using .babylon file format)\r\n * @param parsedVertexData defines the persisted data\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url to use to load assets (like delayed data)\r\n * @returns the new geometry object\r\n */\r\n public static Parse(parsedVertexData: any, scene: Scene, rootUrl: string): Nullable<Geometry> {\r\n const geometry = new Geometry(parsedVertexData.id, scene, undefined, parsedVertexData.updatable);\r\n geometry._loadedUniqueId = parsedVertexData.uniqueId;\r\n\r\n if (Tags) {\r\n Tags.AddTagsTo(geometry, parsedVertexData.tags);\r\n }\r\n\r\n if (parsedVertexData.delayLoadingFile) {\r\n geometry.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n geometry.delayLoadingFile = rootUrl + parsedVertexData.delayLoadingFile;\r\n geometry._boundingInfo = new BoundingInfo(Vector3.FromArray(parsedVertexData.boundingBoxMinimum), Vector3.FromArray(parsedVertexData.boundingBoxMaximum));\r\n\r\n geometry._delayInfo = [];\r\n if (parsedVertexData.hasUVs) {\r\n geometry._delayInfo.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs2) {\r\n geometry._delayInfo.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs3) {\r\n geometry._delayInfo.push(VertexBuffer.UV3Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs4) {\r\n geometry._delayInfo.push(VertexBuffer.UV4Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs5) {\r\n geometry._delayInfo.push(VertexBuffer.UV5Kind);\r\n }\r\n\r\n if (parsedVertexData.hasUVs6) {\r\n geometry._delayInfo.push(VertexBuffer.UV6Kind);\r\n }\r\n\r\n if (parsedVertexData.hasColors) {\r\n geometry._delayInfo.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n if (parsedVertexData.hasMatricesIndices) {\r\n geometry._delayInfo.push(VertexBuffer.MatricesIndicesKind);\r\n }\r\n\r\n if (parsedVertexData.hasMatricesWeights) {\r\n geometry._delayInfo.push(VertexBuffer.MatricesWeightsKind);\r\n }\r\n\r\n geometry._delayLoadingFunction = VertexData.ImportVertexData;\r\n } else {\r\n VertexData.ImportVertexData(parsedVertexData, geometry);\r\n }\r\n\r\n scene.pushGeometry(geometry, true);\r\n\r\n return geometry;\r\n }\r\n}\r\n"]}