@babylonjs/core 5.0.0-beta.4 → 5.0.0-beta.8

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 (705) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +5 -1
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animation.d.ts +2 -2
  5. package/Animations/animation.js +5 -1
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/analyser.d.ts +2 -1
  8. package/Audio/analyser.js +5 -0
  9. package/Audio/analyser.js.map +1 -1
  10. package/Audio/audioSceneComponent.d.ts +1 -1
  11. package/Audio/audioSceneComponent.js +5 -0
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/sound.d.ts +1 -1
  14. package/Audio/sound.js +8 -1
  15. package/Audio/sound.js.map +1 -1
  16. package/Audio/soundTrack.d.ts +2 -1
  17. package/Audio/soundTrack.js +5 -0
  18. package/Audio/soundTrack.js.map +1 -1
  19. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  20. package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
  21. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  22. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  23. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  24. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  25. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  26. package/Bones/bone.d.ts +2 -1
  27. package/Bones/bone.js +28 -18
  28. package/Bones/bone.js.map +1 -1
  29. package/Bones/skeleton.d.ts +0 -6
  30. package/Bones/skeleton.js +5 -17
  31. package/Bones/skeleton.js.map +1 -1
  32. package/Buffers/buffer.d.ts +4 -0
  33. package/Buffers/buffer.js +13 -3
  34. package/Buffers/buffer.js.map +1 -1
  35. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
  36. package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
  37. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  38. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  39. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  40. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
  41. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  42. package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
  43. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  44. package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
  45. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  46. package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
  47. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  48. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
  49. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  50. package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
  51. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  52. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
  53. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  54. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
  55. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  56. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
  57. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  58. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
  59. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  60. package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
  61. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  62. package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
  63. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  64. package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
  65. package/Cameras/VR/vrExperienceHelper.js +1 -0
  66. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  67. package/Cameras/VR/webVRCamera.d.ts +2 -1
  68. package/Cameras/VR/webVRCamera.js +3 -2
  69. package/Cameras/VR/webVRCamera.js.map +1 -1
  70. package/Cameras/arcRotateCamera.d.ts +1 -1
  71. package/Cameras/arcRotateCamera.js.map +1 -1
  72. package/Cameras/camera.d.ts +1 -1
  73. package/Cameras/camera.js +1 -1
  74. package/Cameras/camera.js.map +1 -1
  75. package/Cameras/deviceOrientationCamera.d.ts +1 -1
  76. package/Cameras/deviceOrientationCamera.js.map +1 -1
  77. package/Cameras/flyCamera.d.ts +1 -1
  78. package/Cameras/flyCamera.js.map +1 -1
  79. package/Cameras/followCamera.d.ts +1 -1
  80. package/Cameras/followCamera.js.map +1 -1
  81. package/Cameras/freeCamera.d.ts +1 -1
  82. package/Cameras/freeCamera.js.map +1 -1
  83. package/Cameras/gamepadCamera.d.ts +1 -1
  84. package/Cameras/gamepadCamera.js.map +1 -1
  85. package/Cameras/targetCamera.d.ts +1 -1
  86. package/Cameras/targetCamera.js.map +1 -1
  87. package/Cameras/touchCamera.d.ts +1 -1
  88. package/Cameras/touchCamera.js.map +1 -1
  89. package/Cameras/universalCamera.d.ts +1 -1
  90. package/Cameras/universalCamera.js.map +1 -1
  91. package/Cameras/virtualJoysticksCamera.d.ts +1 -1
  92. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  93. package/Collisions/collider.d.ts +1 -1
  94. package/Collisions/collider.js +48 -2
  95. package/Collisions/collider.js.map +1 -1
  96. package/Compat/compatibilityOptions.d.ts +9 -0
  97. package/Compat/compatibilityOptions.js +14 -0
  98. package/Compat/compatibilityOptions.js.map +1 -0
  99. package/Compat/index.d.ts +1 -0
  100. package/Compat/index.js +2 -0
  101. package/Compat/index.js.map +1 -0
  102. package/Compute/computeEffect.js +2 -2
  103. package/Compute/computeEffect.js.map +1 -1
  104. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
  105. package/Culling/Octrees/octreeSceneComponent.js +5 -0
  106. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  107. package/Culling/ray.js +2 -2
  108. package/Culling/ray.js.map +1 -1
  109. package/Debug/axesViewer.d.ts +1 -1
  110. package/Debug/axesViewer.js +5 -0
  111. package/Debug/axesViewer.js.map +1 -1
  112. package/Debug/debugLayer.d.ts +1 -1
  113. package/Debug/debugLayer.js +6 -2
  114. package/Debug/debugLayer.js.map +1 -1
  115. package/Debug/physicsViewer.d.ts +1 -1
  116. package/Debug/physicsViewer.js +3 -0
  117. package/Debug/physicsViewer.js.map +1 -1
  118. package/Debug/skeletonViewer.js +3 -4
  119. package/Debug/skeletonViewer.js.map +1 -1
  120. package/DeviceInput/Helpers/eventFactory.js +2 -5
  121. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  122. package/DeviceInput/InputDevices/deviceEnums.d.ts +55 -2
  123. package/DeviceInput/InputDevices/deviceEnums.js +54 -0
  124. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  125. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  126. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  127. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +1 -0
  128. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
  129. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js +3 -2
  130. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -1
  131. package/DeviceInput/InputDevices/webDeviceInputSystem.js +38 -82
  132. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  133. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  134. package/Engines/Extensions/engine.cubeTexture.js +6 -2
  135. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  136. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  137. package/Engines/Extensions/engine.multiview.js +4 -2
  138. package/Engines/Extensions/engine.multiview.js.map +1 -1
  139. package/Engines/Native/nativeInterfaces.d.ts +2 -1
  140. package/Engines/Native/nativeInterfaces.js.map +1 -1
  141. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  142. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  143. package/Engines/Processors/shaderCodeInliner.js +13 -13
  144. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  145. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  146. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  147. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
  148. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  149. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  150. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  151. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
  152. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  153. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  154. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  155. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  156. package/Engines/WebGPU/webgpuConstants.js +1 -0
  157. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  158. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  159. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  160. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  161. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  162. package/Engines/WebGPU/webgpuTextureHelper.js +18 -11
  163. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  164. package/Engines/engine.d.ts +47 -27
  165. package/Engines/engine.js +1 -1
  166. package/Engines/engine.js.map +1 -1
  167. package/Engines/engineCapabilities.d.ts +2 -0
  168. package/Engines/engineCapabilities.js.map +1 -1
  169. package/Engines/nativeEngine.d.ts +1 -0
  170. package/Engines/nativeEngine.js +39 -13
  171. package/Engines/nativeEngine.js.map +1 -1
  172. package/Engines/nullEngine.js +3 -2
  173. package/Engines/nullEngine.js.map +1 -1
  174. package/Engines/renderTargetWrapper.d.ts +8 -0
  175. package/Engines/renderTargetWrapper.js +20 -0
  176. package/Engines/renderTargetWrapper.js.map +1 -1
  177. package/Engines/thinEngine.d.ts +7 -0
  178. package/Engines/thinEngine.js +27 -9
  179. package/Engines/thinEngine.js.map +1 -1
  180. package/Engines/webgpuEngine.js +37 -25
  181. package/Engines/webgpuEngine.js.map +1 -1
  182. package/Events/keyboardEvents.d.ts +7 -1
  183. package/Events/keyboardEvents.js +11 -1
  184. package/Events/keyboardEvents.js.map +1 -1
  185. package/Gamepads/Controllers/daydreamController.js +1 -1
  186. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  187. package/Gamepads/Controllers/oculusTouchController.js +2 -2
  188. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  189. package/Gamepads/Controllers/webVRController.d.ts +1 -0
  190. package/Gamepads/Controllers/webVRController.js +1 -0
  191. package/Gamepads/Controllers/webVRController.js.map +1 -1
  192. package/Gamepads/gamepadManager.js +1 -1
  193. package/Gamepads/gamepadManager.js.map +1 -1
  194. package/Gizmos/boundingBoxGizmo.js +0 -10
  195. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  196. package/Gizmos/gizmo.js +1 -1
  197. package/Gizmos/gizmo.js.map +1 -1
  198. package/Gizmos/gizmoManager.d.ts +2 -0
  199. package/Gizmos/gizmoManager.js +28 -24
  200. package/Gizmos/gizmoManager.js.map +1 -1
  201. package/Helpers/sceneHelpers.d.ts +1 -0
  202. package/Helpers/sceneHelpers.js.map +1 -1
  203. package/Inputs/scene.inputManager.d.ts +1 -1
  204. package/Inputs/scene.inputManager.js +8 -7
  205. package/Inputs/scene.inputManager.js.map +1 -1
  206. package/Instrumentation/sceneInstrumentation.js +2 -2
  207. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  208. package/Layers/effectLayer.d.ts +1 -1
  209. package/Layers/effectLayer.js +1 -1
  210. package/Layers/effectLayer.js.map +1 -1
  211. package/Layers/effectLayerSceneComponent.d.ts +1 -1
  212. package/Layers/effectLayerSceneComponent.js +7 -3
  213. package/Layers/effectLayerSceneComponent.js.map +1 -1
  214. package/Layers/glowLayer.d.ts +1 -1
  215. package/Layers/glowLayer.js.map +1 -1
  216. package/Layers/highlightLayer.d.ts +1 -1
  217. package/Layers/highlightLayer.js +2 -1
  218. package/Layers/highlightLayer.js.map +1 -1
  219. package/Layers/layer.d.ts +2 -2
  220. package/Layers/layer.js.map +1 -1
  221. package/Layers/layerSceneComponent.d.ts +1 -1
  222. package/Layers/layerSceneComponent.js +7 -3
  223. package/Layers/layerSceneComponent.js.map +1 -1
  224. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  225. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  226. package/Lights/Shadows/shadowGenerator.js +7 -7
  227. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  228. package/Loading/Plugins/babylonFileLoader.js +79 -36
  229. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  230. package/Loading/loadingScreen.js +8 -8
  231. package/Loading/loadingScreen.js.map +1 -1
  232. package/Loading/sceneLoader.js +3 -3
  233. package/Loading/sceneLoader.js.map +1 -1
  234. package/Materials/Background/backgroundMaterial.d.ts +1 -1
  235. package/Materials/Background/backgroundMaterial.js.map +1 -1
  236. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  237. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  238. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  239. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  240. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  241. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  242. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
  244. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  245. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  246. package/Materials/Node/Blocks/Dual/index.js +1 -0
  247. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  248. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  249. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  250. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
  251. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  252. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  253. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  254. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  255. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  256. package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
  257. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  258. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  259. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  260. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  261. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  262. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  263. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  264. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  265. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  266. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  267. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  268. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  269. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  270. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  271. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  272. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  273. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  274. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  275. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  276. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  277. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  278. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  280. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  281. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  282. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  283. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  284. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  285. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  286. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  287. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  288. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  289. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  290. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  292. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  294. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  296. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  298. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  300. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  302. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  304. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  306. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  308. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  309. package/Materials/Node/Blocks/addBlock.js +1 -1
  310. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  311. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  312. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  313. package/Materials/Node/Blocks/clampBlock.js +3 -3
  314. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  315. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  316. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  317. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  318. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  319. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  320. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  321. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  322. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  323. package/Materials/Node/Blocks/crossBlock.js +1 -1
  324. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  325. package/Materials/Node/Blocks/customBlock.js +1 -1
  326. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  327. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  328. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  329. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  330. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  331. package/Materials/Node/Blocks/divideBlock.js +1 -1
  332. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  333. package/Materials/Node/Blocks/dotBlock.js +1 -1
  334. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  335. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  336. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  337. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  338. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  339. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  340. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  341. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  342. package/Materials/Node/Blocks/index.d.ts +1 -0
  343. package/Materials/Node/Blocks/index.js +1 -0
  344. package/Materials/Node/Blocks/index.js.map +1 -1
  345. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  346. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  347. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  348. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  349. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  350. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  351. package/Materials/Node/Blocks/maxBlock.js +1 -1
  352. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  353. package/Materials/Node/Blocks/minBlock.js +1 -1
  354. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  355. package/Materials/Node/Blocks/modBlock.js +1 -1
  356. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  357. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  358. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  359. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  360. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  361. package/Materials/Node/Blocks/negateBlock.js +1 -1
  362. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  363. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  364. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  365. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  366. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  367. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  368. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  369. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  370. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  371. package/Materials/Node/Blocks/powBlock.js +1 -1
  372. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  373. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  374. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  375. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  376. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  377. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  378. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  379. package/Materials/Node/Blocks/refractBlock.js +1 -1
  380. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  381. package/Materials/Node/Blocks/remapBlock.js +3 -3
  382. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  383. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  384. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  385. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  386. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  387. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  388. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  389. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  390. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  391. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  392. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  393. package/Materials/Node/Blocks/stepBlock.js +1 -1
  394. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  395. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  396. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  397. package/Materials/Node/Blocks/transformBlock.js +13 -13
  398. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  399. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  400. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  401. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  402. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  403. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  404. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  405. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  406. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  407. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  408. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  409. package/Materials/Node/Blocks/waveBlock.js +3 -3
  410. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  411. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  412. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  413. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  414. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  415. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  416. package/Materials/Node/nodeMaterial.d.ts +4 -0
  417. package/Materials/Node/nodeMaterial.js +22 -11
  418. package/Materials/Node/nodeMaterial.js.map +1 -1
  419. package/Materials/Node/nodeMaterialBlock.js +12 -12
  420. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  421. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  422. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  423. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  424. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  425. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
  426. package/Materials/PBR/pbrBaseMaterial.js +4 -3
  427. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  428. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
  429. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  430. package/Materials/PBR/pbrMaterial.d.ts +1 -1
  431. package/Materials/PBR/pbrMaterial.js +2 -3
  432. package/Materials/PBR/pbrMaterial.js.map +1 -1
  433. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
  434. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  435. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
  436. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  437. package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
  438. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  439. package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
  440. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  441. package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
  442. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  443. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  444. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  445. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  446. package/Materials/Textures/baseTexture.d.ts +1 -1
  447. package/Materials/Textures/baseTexture.js.map +1 -1
  448. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  449. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  450. package/Materials/Textures/internalTexture.d.ts +2 -0
  451. package/Materials/Textures/internalTexture.js +2 -0
  452. package/Materials/Textures/internalTexture.js.map +1 -1
  453. package/Materials/Textures/mirrorTexture.d.ts +2 -2
  454. package/Materials/Textures/mirrorTexture.js +7 -3
  455. package/Materials/Textures/mirrorTexture.js.map +1 -1
  456. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  457. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  458. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  459. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  460. package/Materials/Textures/refractionTexture.d.ts +1 -1
  461. package/Materials/Textures/refractionTexture.js +2 -2
  462. package/Materials/Textures/refractionTexture.js.map +1 -1
  463. package/Materials/Textures/renderTargetTexture.d.ts +1 -1
  464. package/Materials/Textures/renderTargetTexture.js +2 -2
  465. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  466. package/Materials/Textures/texture.d.ts +1 -1
  467. package/Materials/Textures/texture.js +5 -5
  468. package/Materials/Textures/texture.js.map +1 -1
  469. package/Materials/Textures/videoTexture.js +1 -0
  470. package/Materials/Textures/videoTexture.js.map +1 -1
  471. package/Materials/effect.js +3 -3
  472. package/Materials/effect.js.map +1 -1
  473. package/Materials/material.d.ts +3 -1
  474. package/Materials/material.js +11 -3
  475. package/Materials/material.js.map +1 -1
  476. package/Materials/materialHelper.js +9 -1
  477. package/Materials/materialHelper.js.map +1 -1
  478. package/Materials/materialPluginManager.js +3 -3
  479. package/Materials/materialPluginManager.js.map +1 -1
  480. package/Materials/multiMaterial.d.ts +3 -1
  481. package/Materials/multiMaterial.js +13 -11
  482. package/Materials/multiMaterial.js.map +1 -1
  483. package/Materials/pushMaterial.d.ts +1 -1
  484. package/Materials/pushMaterial.js.map +1 -1
  485. package/Materials/shaderMaterial.js +8 -4
  486. package/Materials/shaderMaterial.js.map +1 -1
  487. package/Materials/shadowDepthWrapper.d.ts +1 -1
  488. package/Materials/shadowDepthWrapper.js +3 -3
  489. package/Materials/shadowDepthWrapper.js.map +1 -1
  490. package/Materials/standardMaterial.d.ts +2 -6
  491. package/Materials/standardMaterial.js +5 -10
  492. package/Materials/standardMaterial.js.map +1 -1
  493. package/Maths/math.size.js +1 -1
  494. package/Maths/math.size.js.map +1 -1
  495. package/Maths/math.vector.d.ts +4 -2
  496. package/Maths/math.vector.js +34 -32
  497. package/Maths/math.vector.js.map +1 -1
  498. package/Meshes/Builders/boxBuilder.js +5 -4
  499. package/Meshes/Builders/boxBuilder.js.map +1 -1
  500. package/Meshes/Builders/capsuleBuilder.js +4 -3
  501. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  502. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  503. package/Meshes/Builders/cylinderBuilder.js +11 -8
  504. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  505. package/Meshes/Builders/decalBuilder.js +5 -2
  506. package/Meshes/Builders/decalBuilder.js.map +1 -1
  507. package/Meshes/Builders/discBuilder.js +3 -2
  508. package/Meshes/Builders/discBuilder.js.map +1 -1
  509. package/Meshes/Builders/goldbergBuilder.js +10 -1
  510. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  511. package/Meshes/Builders/groundBuilder.js +2 -1
  512. package/Meshes/Builders/groundBuilder.js.map +1 -1
  513. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  514. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  515. package/Meshes/Builders/linesBuilder.js.map +1 -1
  516. package/Meshes/Builders/planeBuilder.js +5 -4
  517. package/Meshes/Builders/planeBuilder.js.map +1 -1
  518. package/Meshes/Builders/polygonBuilder.js +6 -2
  519. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  520. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  521. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  522. package/Meshes/Builders/ribbonBuilder.js +4 -3
  523. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  524. package/Meshes/Builders/sphereBuilder.js +2 -1
  525. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  526. package/Meshes/Builders/tiledBoxBuilder.js +4 -0
  527. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  528. package/Meshes/Builders/torusBuilder.js +2 -1
  529. package/Meshes/Builders/torusBuilder.js.map +1 -1
  530. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  531. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  532. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  533. package/Meshes/Compression/dracoCompression.js +23 -7
  534. package/Meshes/Compression/dracoCompression.js.map +1 -1
  535. package/Meshes/abstractMesh.d.ts +10 -2
  536. package/Meshes/abstractMesh.js +39 -33
  537. package/Meshes/abstractMesh.js.map +1 -1
  538. package/Meshes/geometry.d.ts +1 -1
  539. package/Meshes/geometry.js +38 -3
  540. package/Meshes/geometry.js.map +1 -1
  541. package/Meshes/groundMesh.d.ts +1 -1
  542. package/Meshes/groundMesh.js.map +1 -1
  543. package/Meshes/instancedMesh.js +5 -6
  544. package/Meshes/instancedMesh.js.map +1 -1
  545. package/Meshes/mesh.d.ts +1 -1
  546. package/Meshes/mesh.js +39 -35
  547. package/Meshes/mesh.js.map +1 -1
  548. package/Meshes/mesh.lts.d.ts +1 -1
  549. package/Meshes/mesh.lts.js.map +1 -1
  550. package/Meshes/mesh.vertexData.d.ts +1 -1
  551. package/Meshes/mesh.vertexData.js +2 -2
  552. package/Meshes/mesh.vertexData.js.map +1 -1
  553. package/Meshes/polygonMesh.js +2 -2
  554. package/Meshes/polygonMesh.js.map +1 -1
  555. package/Meshes/subMesh.js +1 -2
  556. package/Meshes/subMesh.js.map +1 -1
  557. package/Meshes/subMesh.project.js +1 -2
  558. package/Meshes/subMesh.project.js.map +1 -1
  559. package/Meshes/thinInstanceMesh.js +5 -0
  560. package/Meshes/thinInstanceMesh.js.map +1 -1
  561. package/Meshes/trailMesh.d.ts +1 -1
  562. package/Meshes/trailMesh.js.map +1 -1
  563. package/Meshes/transformNode.js +40 -13
  564. package/Meshes/transformNode.js.map +1 -1
  565. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
  566. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
  567. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  568. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
  569. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  570. package/Misc/PerformanceViewer/performanceViewerCollector.js +6 -6
  571. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  572. package/Misc/assetsManager.d.ts +2 -1
  573. package/Misc/assetsManager.js +15 -1
  574. package/Misc/assetsManager.js.map +1 -1
  575. package/Misc/basis.js +1 -1
  576. package/Misc/basis.js.map +1 -1
  577. package/Misc/brdfTextureTools.js +4 -1
  578. package/Misc/brdfTextureTools.js.map +1 -1
  579. package/Misc/dds.js +7 -0
  580. package/Misc/dds.js.map +1 -1
  581. package/Misc/decorators.js +7 -0
  582. package/Misc/decorators.js.map +1 -1
  583. package/Misc/deepCopier.js +3 -3
  584. package/Misc/deepCopier.js.map +1 -1
  585. package/Misc/devTools.js +1 -1
  586. package/Misc/devTools.js.map +1 -1
  587. package/Misc/environmentTextureTools.js +2 -2
  588. package/Misc/environmentTextureTools.js.map +1 -1
  589. package/Misc/fileTools.js +3 -3
  590. package/Misc/fileTools.js.map +1 -1
  591. package/Misc/khronosTextureContainer2.js +4 -3
  592. package/Misc/khronosTextureContainer2.js.map +1 -1
  593. package/Misc/reflector.js +6 -6
  594. package/Misc/reflector.js.map +1 -1
  595. package/Misc/tools.js +15 -13
  596. package/Misc/tools.js.map +1 -1
  597. package/Misc/uniqueIdGenerator.js +1 -1
  598. package/Misc/uniqueIdGenerator.js.map +1 -1
  599. package/Offline/database.js +1 -1
  600. package/Offline/database.js.map +1 -1
  601. package/Particles/baseParticleSystem.d.ts +4 -1
  602. package/Particles/baseParticleSystem.js +20 -5
  603. package/Particles/baseParticleSystem.js.map +1 -1
  604. package/Particles/particleHelper.js +2 -2
  605. package/Particles/particleHelper.js.map +1 -1
  606. package/Physics/Plugins/ammoJSPlugin.js +4 -4
  607. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  608. package/Physics/physicsImpostor.d.ts +2 -2
  609. package/Physics/physicsImpostor.js.map +1 -1
  610. package/PostProcesses/blurPostProcess.js +5 -5
  611. package/PostProcesses/blurPostProcess.js.map +1 -1
  612. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  613. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  614. package/PostProcesses/postProcess.js +1 -1
  615. package/PostProcesses/postProcess.js.map +1 -1
  616. package/PostProcesses/postProcessManager.js +2 -2
  617. package/PostProcesses/postProcessManager.js.map +1 -1
  618. package/Probes/reflectionProbe.js +2 -2
  619. package/Probes/reflectionProbe.js.map +1 -1
  620. package/Rendering/depthPeelingRenderer.js +3 -3
  621. package/Rendering/depthPeelingRenderer.js.map +1 -1
  622. package/Rendering/geometryBufferRenderer.js +8 -8
  623. package/Rendering/geometryBufferRenderer.js.map +1 -1
  624. package/Rendering/outlineRenderer.js +1 -1
  625. package/Rendering/outlineRenderer.js.map +1 -1
  626. package/Rendering/utilityLayerRenderer.js +4 -0
  627. package/Rendering/utilityLayerRenderer.js.map +1 -1
  628. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  629. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  630. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  631. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  632. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
  633. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  634. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  635. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  636. package/Shaders/color.fragment.js +1 -1
  637. package/Shaders/color.fragment.js.map +1 -1
  638. package/Shaders/color.vertex.js +1 -1
  639. package/Shaders/color.vertex.js.map +1 -1
  640. package/Shaders/default.fragment.js +1 -1
  641. package/Shaders/default.fragment.js.map +1 -1
  642. package/Shaders/default.vertex.js +1 -1
  643. package/Shaders/default.vertex.js.map +1 -1
  644. package/Shaders/geometry.vertex.js +1 -1
  645. package/Shaders/geometry.vertex.js.map +1 -1
  646. package/Shaders/pbr.vertex.js +1 -1
  647. package/Shaders/pbr.vertex.js.map +1 -1
  648. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  649. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  650. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  651. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  652. package/Sprites/spriteManager.js +9 -10
  653. package/Sprites/spriteManager.js.map +1 -1
  654. package/Sprites/spriteMap.js +2 -2
  655. package/Sprites/spriteMap.js.map +1 -1
  656. package/Sprites/spriteRenderer.js +1 -1
  657. package/Sprites/spriteRenderer.js.map +1 -1
  658. package/XR/features/WebXRDOMOverlay.js +1 -1
  659. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  660. package/XR/features/WebXRHandTracking.js +30 -30
  661. package/XR/features/WebXRHandTracking.js.map +1 -1
  662. package/XR/features/WebXRImageTracking.js +2 -2
  663. package/XR/features/WebXRImageTracking.js.map +1 -1
  664. package/XR/features/WebXRLayers.d.ts +28 -5
  665. package/XR/features/WebXRLayers.js +54 -20
  666. package/XR/features/WebXRLayers.js.map +1 -1
  667. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  668. package/XR/features/WebXRNearInteraction.js +201 -40
  669. package/XR/features/WebXRNearInteraction.js.map +1 -1
  670. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  671. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  672. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  673. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  674. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  675. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  676. package/XR/webXRCamera.js +17 -4
  677. package/XR/webXRCamera.js.map +1 -1
  678. package/XR/webXRDefaultExperience.js +3 -0
  679. package/XR/webXRDefaultExperience.js.map +1 -1
  680. package/XR/webXREnterExitUI.js +2 -2
  681. package/XR/webXREnterExitUI.js.map +1 -1
  682. package/XR/webXRExperienceHelper.js +3 -2
  683. package/XR/webXRExperienceHelper.js.map +1 -1
  684. package/XR/webXRFeaturesManager.js +6 -6
  685. package/XR/webXRFeaturesManager.js.map +1 -1
  686. package/XR/webXRInputSource.js +3 -3
  687. package/XR/webXRInputSource.js.map +1 -1
  688. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  689. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  690. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  691. package/XR/webXRSessionManager.d.ts +1 -0
  692. package/XR/webXRSessionManager.js +6 -1
  693. package/XR/webXRSessionManager.js.map +1 -1
  694. package/assetContainer.d.ts +1 -1
  695. package/assetContainer.js +5 -4
  696. package/assetContainer.js.map +1 -1
  697. package/index.d.ts +1 -0
  698. package/index.js +1 -0
  699. package/index.js.map +1 -1
  700. package/node.d.ts +1 -1
  701. package/node.js.map +1 -1
  702. package/package.json +13 -1
  703. package/scene.d.ts +3 -1
  704. package/scene.js +38 -13
  705. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/skeleton.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\n\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Scene } from \"../scene\";\r\nimport { Nullable } from \"../types\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { Animatable } from \"../Animations/animatable\";\r\nimport { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { Animation } from \"../Animations/animation\";\r\nimport { AnimationRange } from \"../Animations/animationRange\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { DeepCopier } from \"../Misc/deepCopier\";\r\nimport { IInspectable } from '../Misc/iInspectable';\r\nimport { IAnimatable } from '../Animations/animatable.interface';\r\nimport { AbstractScene } from \"../abstractScene\";\r\n\r\n/**\r\n * Class used to handle skinning animations\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons\r\n */\r\nexport class Skeleton implements IAnimatable {\r\n /**\r\n * Defines the list of child bones\r\n */\r\n public bones = new Array<Bone>();\r\n /**\r\n * Defines an estimate of the dimension of the skeleton at rest\r\n */\r\n public dimensionsAtRest: Vector3;\r\n /**\r\n * Defines a boolean indicating if the root matrix is provided by meshes or by the current skeleton (this is the default value)\r\n */\r\n public needInitialSkinMatrix = false;\r\n /**\r\n * Defines a mesh that override the matrix used to get the world matrix (null by default).\r\n */\r\n public overrideMesh: Nullable<AbstractMesh> = null;\r\n\r\n /**\r\n * Gets the list of animations attached to this skeleton\r\n */\r\n public animations: Array<Animation>;\r\n\r\n private _scene: Scene;\r\n private _isDirty = true;\r\n private _transformMatrices: Float32Array;\r\n private _transformMatrixTexture: Nullable<RawTexture>;\r\n private _meshesWithPoseMatrix = new Array<AbstractMesh>();\r\n private _animatables: IAnimatable[];\r\n private _identity = Matrix.Identity();\r\n private _synchronizedWithMesh: AbstractMesh;\r\n\r\n private _ranges: { [name: string]: Nullable<AnimationRange> } = {};\r\n\r\n private _lastAbsoluteTransformsUpdateId = -1;\r\n\r\n private _canUseTextureForBones = false;\r\n private _uniqueId = 0;\r\n\r\n /** @hidden */\r\n public _numBonesWithLinkedTransformNode = 0;\r\n\r\n /** @hidden */\r\n public _hasWaitingData: Nullable<boolean> = null;\r\n\r\n /** @hidden */\r\n public _waitingOverrideMeshId: Nullable<string> = null;\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Specifies if the skeleton should be serialized\r\n */\r\n public doNotSerialize = false;\r\n\r\n private _useTextureToStoreBoneMatrices = true;\r\n /**\r\n * Gets or sets a boolean indicating that bone matrices should be stored as a texture instead of using shader uniforms (default is true).\r\n * Please note that this option is not available if the hardware does not support it\r\n */\r\n public get useTextureToStoreBoneMatrices(): boolean {\r\n return this._useTextureToStoreBoneMatrices;\r\n }\r\n\r\n public set useTextureToStoreBoneMatrices(value: boolean) {\r\n this._useTextureToStoreBoneMatrices = value;\r\n this._markAsDirty();\r\n }\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/how_to/debug_layer#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n // Events\r\n\r\n /**\r\n * An observable triggered before computing the skeleton's matrices\r\n */\r\n public onBeforeComputeObservable = new Observable<Skeleton>();\r\n\r\n /**\r\n * Gets a boolean indicating that the skeleton effectively stores matrices into a texture\r\n */\r\n public get isUsingTextureForMatrices() {\r\n return this.useTextureToStoreBoneMatrices && this._canUseTextureForBones;\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this skeleton\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Creates a new skeleton\r\n * @param name defines the skeleton name\r\n * @param id defines the skeleton Id\r\n * @param scene defines the hosting scene\r\n */\r\n constructor(\r\n /** defines the skeleton name */\r\n public name: string,\r\n /** defines the skeleton Id */\r\n public id: string, scene: Scene) {\r\n this.bones = [];\r\n\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this._uniqueId = this._scene.getUniqueId();\r\n\r\n this._scene.addSkeleton(this);\r\n\r\n //make sure it will recalculate the matrix next time prepare is called.\r\n this._isDirty = true;\r\n\r\n const engineCaps = this._scene.getEngine().getCaps();\r\n this._canUseTextureForBones = engineCaps.textureFloat && engineCaps.maxVertexTextureImageUnits > 0;\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @return the class name\r\n */\r\n public getClassName(): string {\r\n return \"Skeleton\";\r\n }\r\n\r\n /**\r\n * Returns an array containing the root bones\r\n * @returns an array containing the root bones\r\n */\r\n public getChildren(): Array<Bone> {\r\n return this.bones.filter((b) => !b.getParent());\r\n }\r\n\r\n // Members\r\n /**\r\n * Gets the list of transform matrices to send to shaders (one matrix per bone)\r\n * @param mesh defines the mesh to use to get the root matrix (if needInitialSkinMatrix === true)\r\n * @returns a Float32Array containing matrices data\r\n */\r\n public getTransformMatrices(mesh: AbstractMesh): Float32Array {\r\n if (this.needInitialSkinMatrix && mesh._bonesTransformMatrices) {\r\n return mesh._bonesTransformMatrices;\r\n }\r\n\r\n if (!this._transformMatrices) {\r\n this.prepare();\r\n }\r\n\r\n return this._transformMatrices;\r\n }\r\n\r\n /**\r\n * Gets the list of transform matrices to send to shaders inside a texture (one matrix per bone)\r\n * @param mesh defines the mesh to use to get the root matrix (if needInitialSkinMatrix === true)\r\n * @returns a raw texture containing the data\r\n */\r\n public getTransformMatrixTexture(mesh: AbstractMesh): Nullable<RawTexture> {\r\n if (this.needInitialSkinMatrix && mesh._transformMatrixTexture) {\r\n return mesh._transformMatrixTexture;\r\n }\r\n\r\n return this._transformMatrixTexture;\r\n }\r\n\r\n /**\r\n * Gets the current hosting scene\r\n * @returns a scene object\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Gets a string representing the current skeleton data\r\n * @param fullDetails defines a boolean indicating if we want a verbose version\r\n * @returns a string representing the current skeleton data\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n var ret = `Name: ${this.name}, nBones: ${this.bones.length}`;\r\n ret += `, nAnimationRanges: ${this._ranges ? Object.keys(this._ranges).length : \"none\"}`;\r\n if (fullDetails) {\r\n ret += \", Ranges: {\";\r\n let first = true;\r\n for (let name in this._ranges) {\r\n if (first) {\r\n ret += \", \";\r\n first = false;\r\n }\r\n ret += name;\r\n }\r\n ret += \"}\";\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Get bone's index searching by name\r\n * @param name defines bone's name to search for\r\n * @return the indice of the bone. Returns -1 if not found\r\n */\r\n public getBoneIndexByName(name: string): number {\r\n for (var boneIndex = 0, cache = this.bones.length; boneIndex < cache; boneIndex++) {\r\n if (this.bones[boneIndex].name === name) {\r\n return boneIndex;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Create a new animation range\r\n * @param name defines the name of the range\r\n * @param from defines the start key\r\n * @param to defines the end key\r\n */\r\n public createAnimationRange(name: string, from: number, to: number): void {\r\n // check name not already in use\r\n if (!this._ranges[name]) {\r\n this._ranges[name] = new AnimationRange(name, from, to);\r\n for (var i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n this.bones[i].animations[0].createRange(name, from, to);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete a specific animation range\r\n * @param name defines the name of the range\r\n * @param deleteFrames defines if frames must be removed as well\r\n */\r\n public deleteAnimationRange(name: string, deleteFrames = true): void {\r\n for (var i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n this.bones[i].animations[0].deleteRange(name, deleteFrames);\r\n }\r\n }\r\n this._ranges[name] = null; // said much faster than 'delete this._range[name]'\r\n }\r\n\r\n /**\r\n * Gets a specific animation range\r\n * @param name defines the name of the range to look for\r\n * @returns the requested animation range or null if not found\r\n */\r\n public getAnimationRange(name: string): Nullable<AnimationRange> {\r\n return this._ranges[name] || null;\r\n }\r\n\r\n /**\r\n * Gets the list of all animation ranges defined on this skeleton\r\n * @returns an array\r\n */\r\n public getAnimationRanges(): Nullable<AnimationRange>[] {\r\n var animationRanges: Nullable<AnimationRange>[] = [];\r\n var name: string;\r\n for (name in this._ranges) {\r\n animationRanges.push(this._ranges[name]);\r\n }\r\n return animationRanges;\r\n }\r\n\r\n /**\r\n * Copy animation range from a source skeleton.\r\n * This is not for a complete retargeting, only between very similar skeleton's with only possible bone length differences\r\n * @param source defines the source skeleton\r\n * @param name defines the name of the range to copy\r\n * @param rescaleAsRequired defines if rescaling must be applied if required\r\n * @returns true if operation was successful\r\n */\r\n public copyAnimationRange(source: Skeleton, name: string, rescaleAsRequired = false): boolean {\r\n if (this._ranges[name] || !source.getAnimationRange(name)) {\r\n return false;\r\n }\r\n var ret = true;\r\n var frameOffset = this._getHighestAnimationFrame() + 1;\r\n\r\n // make a dictionary of source skeleton's bones, so exact same order or doubly nested loop is not required\r\n var boneDict: { [key: string]: Bone } = {};\r\n var sourceBones = source.bones;\r\n var nBones: number;\r\n var i: number;\r\n for (i = 0, nBones = sourceBones.length; i < nBones; i++) {\r\n boneDict[sourceBones[i].name] = sourceBones[i];\r\n }\r\n\r\n if (this.bones.length !== sourceBones.length) {\r\n Logger.Warn(`copyAnimationRange: this rig has ${this.bones.length} bones, while source as ${sourceBones.length}`);\r\n ret = false;\r\n }\r\n\r\n var skelDimensionsRatio = (rescaleAsRequired && this.dimensionsAtRest && source.dimensionsAtRest) ? this.dimensionsAtRest.divide(source.dimensionsAtRest) : null;\r\n\r\n for (i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n var boneName = this.bones[i].name;\r\n var sourceBone = boneDict[boneName];\r\n if (sourceBone) {\r\n ret = ret && this.bones[i].copyAnimationRange(sourceBone, name, frameOffset, rescaleAsRequired, skelDimensionsRatio);\r\n } else {\r\n Logger.Warn(\"copyAnimationRange: not same rig, missing source bone \" + boneName);\r\n ret = false;\r\n }\r\n }\r\n // do not call createAnimationRange(), since it also is done to bones, which was already done\r\n var range = source.getAnimationRange(name);\r\n if (range) {\r\n this._ranges[name] = new AnimationRange(name, range.from + frameOffset, range.to + frameOffset);\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Forces the skeleton to go to rest pose\r\n */\r\n public returnToRest(): void {\r\n for (const bone of this.bones) {\r\n if (bone._index !== -1) {\r\n bone.returnToRest();\r\n }\r\n }\r\n }\r\n\r\n private _getHighestAnimationFrame(): number {\r\n var ret = 0;\r\n for (var i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n var highest = this.bones[i].animations[0].getHighestFrame();\r\n if (ret < highest) {\r\n ret = highest;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Begin a specific animation range\r\n * @param name defines the name of the range to start\r\n * @param loop defines if looping must be turned on (false by default)\r\n * @param speedRatio defines the speed ratio to apply (1 by default)\r\n * @param onAnimationEnd defines a callback which will be called when animation will end\r\n * @returns a new animatable\r\n */\r\n public beginAnimation(name: string, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void): Nullable<Animatable> {\r\n var range = this.getAnimationRange(name);\r\n\r\n if (!range) {\r\n return null;\r\n }\r\n\r\n return this._scene.beginAnimation(this, range.from, range.to, loop, speedRatio, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Convert the keyframes for a range of animation on a skeleton to be relative to a given reference frame.\r\n * @param skeleton defines the Skeleton containing the animation range to convert\r\n * @param referenceFrame defines the frame that keyframes in the range will be relative to\r\n * @param range defines the name of the AnimationRange belonging to the Skeleton to convert\r\n * @returns the original skeleton\r\n */\r\n public static MakeAnimationAdditive(skeleton: Skeleton, referenceFrame = 0, range: string): Nullable<Skeleton> {\r\n var rangeValue = skeleton.getAnimationRange(range);\r\n\r\n // We can't make a range additive if it doesn't exist\r\n if (!rangeValue) {\r\n return null;\r\n }\r\n\r\n // Find any current scene-level animatable belonging to the target that matches the range\r\n var sceneAnimatables = skeleton._scene.getAllAnimatablesByTarget(skeleton);\r\n var rangeAnimatable: Nullable<Animatable> = null;\r\n\r\n for (let index = 0; index < sceneAnimatables.length; index++) {\r\n let sceneAnimatable = sceneAnimatables[index];\r\n\r\n if (sceneAnimatable.fromFrame === rangeValue?.from && sceneAnimatable.toFrame === rangeValue?.to) {\r\n rangeAnimatable = sceneAnimatable;\r\n break;\r\n }\r\n }\r\n\r\n // Convert the animations belonging to the skeleton to additive keyframes\r\n var animatables = skeleton.getAnimatables();\r\n\r\n for (let index = 0; index < animatables.length; index++) {\r\n let animatable = animatables[index];\r\n let animations = animatable.animations;\r\n\r\n if (!animations) {\r\n continue;\r\n }\r\n\r\n for (var animIndex = 0; animIndex < animations.length; animIndex++) {\r\n Animation.MakeAnimationAdditive(animations[animIndex], referenceFrame, range);\r\n }\r\n }\r\n\r\n // Mark the scene-level animatable as additive\r\n if (rangeAnimatable) {\r\n rangeAnimatable.isAdditive = true;\r\n }\r\n\r\n return skeleton;\r\n }\r\n\r\n /** @hidden */\r\n public _markAsDirty(): void {\r\n this._isDirty = true;\r\n }\r\n\r\n /** @hidden */\r\n public _registerMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n this._meshesWithPoseMatrix.push(mesh);\r\n }\r\n\r\n /** @hidden */\r\n public _unregisterMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n var index = this._meshesWithPoseMatrix.indexOf(mesh);\r\n\r\n if (index > -1) {\r\n this._meshesWithPoseMatrix.splice(index, 1);\r\n }\r\n }\r\n\r\n private _computeTransformMatrices(targetMatrix: Float32Array, initialSkinMatrix: Nullable<Matrix>): void {\r\n\r\n this.onBeforeComputeObservable.notifyObservers(this);\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n var bone = this.bones[index];\r\n bone._childUpdateId++;\r\n var parentBone = bone.getParent();\r\n\r\n if (parentBone) {\r\n bone.getLocalMatrix().multiplyToRef(parentBone.getWorldMatrix(), bone.getWorldMatrix());\r\n } else {\r\n if (initialSkinMatrix) {\r\n bone.getLocalMatrix().multiplyToRef(initialSkinMatrix, bone.getWorldMatrix());\r\n } else {\r\n bone.getWorldMatrix().copyFrom(bone.getLocalMatrix());\r\n }\r\n }\r\n\r\n if (bone._index !== -1) {\r\n var mappedIndex = bone._index === null ? index : bone._index;\r\n bone.getInvertedAbsoluteTransform().multiplyToArray(bone.getWorldMatrix(), targetMatrix, mappedIndex * 16);\r\n }\r\n }\r\n\r\n this._identity.copyToArray(targetMatrix, this.bones.length * 16);\r\n }\r\n\r\n /**\r\n * Build all resources required to render a skeleton\r\n */\r\n public prepare(): void {\r\n // Update the local matrix of bones with linked transform nodes.\r\n if (this._numBonesWithLinkedTransformNode > 0) {\r\n for (const bone of this.bones) {\r\n if (bone._linkedTransformNode) {\r\n // Computing the world matrix also computes the local matrix.\r\n bone._linkedTransformNode.computeWorldMatrix();\r\n bone._matrix = bone._linkedTransformNode._localMatrix;\r\n }\r\n }\r\n }\r\n\r\n if (!this._isDirty) {\r\n return;\r\n }\r\n\r\n if (this.needInitialSkinMatrix) {\r\n for (var index = 0; index < this._meshesWithPoseMatrix.length; index++) {\r\n var mesh = this._meshesWithPoseMatrix[index];\r\n\r\n var poseMatrix = mesh.getPoseMatrix();\r\n\r\n if (!mesh._bonesTransformMatrices || mesh._bonesTransformMatrices.length !== 16 * (this.bones.length + 1)) {\r\n mesh._bonesTransformMatrices = new Float32Array(16 * (this.bones.length + 1));\r\n }\r\n\r\n if (this._synchronizedWithMesh !== mesh) {\r\n this._synchronizedWithMesh = mesh;\r\n\r\n // Prepare bones\r\n for (var boneIndex = 0; boneIndex < this.bones.length; boneIndex++) {\r\n var bone = this.bones[boneIndex];\r\n\r\n if (!bone.getParent()) {\r\n var matrix = bone.getBaseMatrix();\r\n matrix.multiplyToRef(poseMatrix, TmpVectors.Matrix[1]);\r\n bone._updateDifferenceMatrix(TmpVectors.Matrix[1]);\r\n }\r\n }\r\n\r\n if (this.isUsingTextureForMatrices) {\r\n const textureWidth = (this.bones.length + 1) * 4;\r\n if (!mesh._transformMatrixTexture || mesh._transformMatrixTexture.getSize().width !== textureWidth) {\r\n\r\n if (mesh._transformMatrixTexture) {\r\n mesh._transformMatrixTexture.dispose();\r\n }\r\n\r\n mesh._transformMatrixTexture = RawTexture.CreateRGBATexture(mesh._bonesTransformMatrices, (this.bones.length + 1) * 4, 1, this._scene, false, false, 1, 1);\r\n }\r\n }\r\n }\r\n\r\n this._computeTransformMatrices(mesh._bonesTransformMatrices, poseMatrix);\r\n\r\n if (this.isUsingTextureForMatrices && mesh._transformMatrixTexture) {\r\n mesh._transformMatrixTexture.update(mesh._bonesTransformMatrices);\r\n }\r\n }\r\n } else {\r\n if (!this._transformMatrices || this._transformMatrices.length !== 16 * (this.bones.length + 1)) {\r\n this._transformMatrices = new Float32Array(16 * (this.bones.length + 1));\r\n\r\n if (this.isUsingTextureForMatrices) {\r\n if (this._transformMatrixTexture) {\r\n this._transformMatrixTexture.dispose();\r\n }\r\n\r\n this._transformMatrixTexture = RawTexture.CreateRGBATexture(this._transformMatrices, (this.bones.length + 1) * 4, 1, this._scene, false, false, 1, 1);\r\n }\r\n }\r\n\r\n this._computeTransformMatrices(this._transformMatrices, null);\r\n\r\n if (this.isUsingTextureForMatrices && this._transformMatrixTexture) {\r\n this._transformMatrixTexture.update(this._transformMatrices);\r\n }\r\n }\r\n\r\n this._isDirty = false;\r\n\r\n this._scene._activeBones.addCount(this.bones.length, false);\r\n }\r\n\r\n /**\r\n * Gets the list of animatables currently running for this skeleton\r\n * @returns an array of animatables\r\n */\r\n public getAnimatables(): IAnimatable[] {\r\n if (!this._animatables || this._animatables.length !== this.bones.length) {\r\n this._animatables = [];\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n this._animatables.push(this.bones[index]);\r\n }\r\n }\r\n\r\n return this._animatables;\r\n }\r\n\r\n /**\r\n * Clone the current skeleton\r\n * @param name defines the name of the new skeleton\r\n * @param id defines the id of the new skeleton\r\n * @returns the new skeleton\r\n */\r\n public clone(name: string, id?: string): Skeleton {\r\n var result = new Skeleton(name, id || name, this._scene);\r\n\r\n result.needInitialSkinMatrix = this.needInitialSkinMatrix;\r\n\r\n result.overrideMesh = this.overrideMesh;\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n var source = this.bones[index];\r\n var parentBone = null;\r\n\r\n let parent = source.getParent();\r\n if (parent) {\r\n var parentIndex = this.bones.indexOf(parent);\r\n parentBone = result.bones[parentIndex];\r\n }\r\n\r\n var bone = new Bone(source.name, result, parentBone, source.getBaseMatrix().clone(), source.getRestPose().clone());\r\n bone._index = source._index;\r\n\r\n if (source._linkedTransformNode) {\r\n bone.linkTransformNode(source._linkedTransformNode);\r\n }\r\n\r\n DeepCopier.DeepCopy(source.animations, bone.animations);\r\n }\r\n\r\n if (this._ranges) {\r\n result._ranges = {};\r\n for (var rangeName in this._ranges) {\r\n let range = this._ranges[rangeName];\r\n\r\n if (range) {\r\n result._ranges[rangeName] = range.clone();\r\n }\r\n }\r\n }\r\n\r\n this._isDirty = true;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Enable animation blending for this skeleton\r\n * @param blendingSpeed defines the blending speed to apply\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-blending\r\n */\r\n public enableBlending(blendingSpeed = 0.01) {\r\n this.bones.forEach((bone) => {\r\n bone.animations.forEach((animation: Animation) => {\r\n animation.enableBlending = true;\r\n animation.blendingSpeed = blendingSpeed;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Releases all resources associated with the current skeleton\r\n */\r\n public dispose() {\r\n this._meshesWithPoseMatrix = [];\r\n\r\n // Animations\r\n this.getScene().stopAnimation(this);\r\n\r\n // Remove from scene\r\n this.getScene().removeSkeleton(this);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.skeletons.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.skeletons.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (this._transformMatrixTexture) {\r\n this._transformMatrixTexture.dispose();\r\n this._transformMatrixTexture = null;\r\n }\r\n }\r\n\r\n /**\r\n * Serialize the skeleton in a JSON object\r\n * @returns a JSON object\r\n */\r\n public serialize(): any {\r\n var serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.id = this.id;\r\n\r\n if (this.dimensionsAtRest) {\r\n serializationObject.dimensionsAtRest = this.dimensionsAtRest.asArray();\r\n }\r\n\r\n serializationObject.bones = [];\r\n\r\n serializationObject.needInitialSkinMatrix = this.needInitialSkinMatrix;\r\n serializationObject.overrideMeshId = this.overrideMesh?.id;\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n var bone = this.bones[index];\r\n let parent = bone.getParent();\r\n\r\n var serializedBone: any = {\r\n parentBoneIndex: parent ? this.bones.indexOf(parent) : -1,\r\n index: bone.getIndex(),\r\n name: bone.name,\r\n id: bone.id,\r\n matrix: bone.getBaseMatrix().toArray(),\r\n rest: bone.getRestPose().toArray(),\r\n linkedTransformNodeId: bone.getTransformNode()?.id\r\n };\r\n\r\n serializationObject.bones.push(serializedBone);\r\n\r\n if (bone.length) {\r\n serializedBone.length = bone.length;\r\n }\r\n\r\n if (bone.metadata) {\r\n serializedBone.metadata = bone.metadata;\r\n }\r\n\r\n if (bone.animations && bone.animations.length > 0) {\r\n serializedBone.animation = bone.animations[0].serialize();\r\n }\r\n\r\n serializationObject.ranges = [];\r\n for (var name in this._ranges) {\r\n let source = this._ranges[name];\r\n\r\n if (!source) {\r\n continue;\r\n }\r\n\r\n var range: any = {};\r\n range.name = name;\r\n range.from = source.from;\r\n range.to = source.to;\r\n serializationObject.ranges.push(range);\r\n }\r\n }\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a new skeleton from serialized data\r\n * @param parsedSkeleton defines the serialized data\r\n * @param scene defines the hosting scene\r\n * @returns a new skeleton\r\n */\r\n public static Parse(parsedSkeleton: any, scene: Scene): Skeleton {\r\n var skeleton = new Skeleton(parsedSkeleton.name, parsedSkeleton.id, scene);\r\n if (parsedSkeleton.dimensionsAtRest) {\r\n skeleton.dimensionsAtRest = Vector3.FromArray(parsedSkeleton.dimensionsAtRest);\r\n }\r\n\r\n skeleton.needInitialSkinMatrix = parsedSkeleton.needInitialSkinMatrix;\r\n\r\n if (parsedSkeleton.overrideMeshId) {\r\n skeleton._hasWaitingData = true;\r\n skeleton._waitingOverrideMeshId = parsedSkeleton.overrideMeshId;\r\n }\r\n\r\n let index: number;\r\n for (index = 0; index < parsedSkeleton.bones.length; index++) {\r\n var parsedBone = parsedSkeleton.bones[index];\r\n var parsedBoneIndex = parsedSkeleton.bones[index].index;\r\n var parentBone = null;\r\n if (parsedBone.parentBoneIndex > -1) {\r\n parentBone = skeleton.bones[parsedBone.parentBoneIndex];\r\n }\r\n\r\n var rest: Nullable<Matrix> = parsedBone.rest ? Matrix.FromArray(parsedBone.rest) : null;\r\n var bone = new Bone(parsedBone.name, skeleton, parentBone, Matrix.FromArray(parsedBone.matrix), rest, null, parsedBoneIndex);\r\n\r\n if (parsedBone.id !== undefined && parsedBone.id !== null) {\r\n bone.id = parsedBone.id;\r\n }\r\n\r\n if (parsedBone.length) {\r\n bone.length = parsedBone.length;\r\n }\r\n\r\n if (parsedBone.metadata) {\r\n bone.metadata = parsedBone.metadata;\r\n }\r\n\r\n if (parsedBone.animation) {\r\n bone.animations.push(Animation.Parse(parsedBone.animation));\r\n }\r\n\r\n if (parsedBone.linkedTransformNodeId !== undefined && parsedBone.linkedTransformNodeId !== null) {\r\n skeleton._hasWaitingData = true;\r\n bone._waitingTransformNodeId = parsedBone.linkedTransformNodeId;\r\n }\r\n }\r\n\r\n // placed after bones, so createAnimationRange can cascade down\r\n if (parsedSkeleton.ranges) {\r\n for (index = 0; index < parsedSkeleton.ranges.length; index++) {\r\n var data = parsedSkeleton.ranges[index];\r\n skeleton.createAnimationRange(data.name, data.from, data.to);\r\n }\r\n }\r\n return skeleton;\r\n }\r\n\r\n /**\r\n * Compute all node absolute transforms\r\n * @param forceUpdate defines if computation must be done even if cache is up to date\r\n */\r\n public computeAbsoluteTransforms(forceUpdate = false): void {\r\n\r\n var renderId = this._scene.getRenderId();\r\n\r\n if (this._lastAbsoluteTransformsUpdateId != renderId || forceUpdate) {\r\n this.bones[0].computeAbsoluteTransforms();\r\n this._lastAbsoluteTransformsUpdateId = renderId;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Gets the root pose matrix\r\n * @returns a matrix\r\n */\r\n public getPoseMatrix(): Nullable<Matrix> {\r\n var poseMatrix: Nullable<Matrix> = null;\r\n\r\n if (this._meshesWithPoseMatrix.length > 0) {\r\n poseMatrix = this._meshesWithPoseMatrix[0].getPoseMatrix();\r\n }\r\n\r\n return poseMatrix;\r\n }\r\n\r\n /**\r\n * Sorts bones per internal index\r\n */\r\n public sortBones(): void {\r\n var bones = new Array<Bone>();\r\n var visited = new Array<boolean>(this.bones.length);\r\n for (var index = 0; index < this.bones.length; index++) {\r\n this._sortBones(index, bones, visited);\r\n }\r\n\r\n this.bones = bones;\r\n }\r\n\r\n private _sortBones(index: number, bones: Bone[], visited: boolean[]): void {\r\n if (visited[index]) {\r\n return;\r\n }\r\n\r\n visited[index] = true;\r\n\r\n var bone = this.bones[index];\r\n if (bone._index === undefined) {\r\n bone._index = index;\r\n }\r\n\r\n var parentBone = bone.getParent();\r\n if (parentBone) {\r\n this._sortBones(this.bones.indexOf(parentBone), bones, visited);\r\n }\r\n\r\n bones.push(bone);\r\n }\r\n\r\n /**\r\n * Set the current local matrix as the restPose for all bones in the skeleton.\r\n */\r\n public setCurrentPoseAsRest(): void {\r\n this.bones.forEach((b) => {\r\n b.setCurrentPoseAsRest();\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/skeleton.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\n\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Scene } from \"../scene\";\r\nimport { Nullable } from \"../types\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport { Animatable } from \"../Animations/animatable\";\r\nimport { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { Animation } from \"../Animations/animation\";\r\nimport { AnimationRange } from \"../Animations/animationRange\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { DeepCopier } from \"../Misc/deepCopier\";\r\nimport { IInspectable } from '../Misc/iInspectable';\r\nimport { IAnimatable } from '../Animations/animatable.interface';\r\nimport { AbstractScene } from \"../abstractScene\";\r\n\r\n/**\r\n * Class used to handle skinning animations\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons\r\n */\r\nexport class Skeleton implements IAnimatable {\r\n /**\r\n * Defines the list of child bones\r\n */\r\n public bones = new Array<Bone>();\r\n /**\r\n * Defines an estimate of the dimension of the skeleton at rest\r\n */\r\n public dimensionsAtRest: Vector3;\r\n /**\r\n * Defines a boolean indicating if the root matrix is provided by meshes or by the current skeleton (this is the default value)\r\n */\r\n public needInitialSkinMatrix = false;\r\n\r\n /**\r\n * Gets the list of animations attached to this skeleton\r\n */\r\n public animations: Array<Animation>;\r\n\r\n private _scene: Scene;\r\n private _isDirty = true;\r\n private _transformMatrices: Float32Array;\r\n private _transformMatrixTexture: Nullable<RawTexture>;\r\n private _meshesWithPoseMatrix = new Array<AbstractMesh>();\r\n private _animatables: IAnimatable[];\r\n private _identity = Matrix.Identity();\r\n private _synchronizedWithMesh: AbstractMesh;\r\n\r\n private _ranges: { [name: string]: Nullable<AnimationRange> } = {};\r\n\r\n private _lastAbsoluteTransformsUpdateId = -1;\r\n\r\n private _canUseTextureForBones = false;\r\n private _uniqueId = 0;\r\n\r\n /** @hidden */\r\n public _numBonesWithLinkedTransformNode = 0;\r\n\r\n /** @hidden */\r\n public _hasWaitingData: Nullable<boolean> = null;\r\n\r\n /** @hidden */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Specifies if the skeleton should be serialized\r\n */\r\n public doNotSerialize = false;\r\n\r\n private _useTextureToStoreBoneMatrices = true;\r\n /**\r\n * Gets or sets a boolean indicating that bone matrices should be stored as a texture instead of using shader uniforms (default is true).\r\n * Please note that this option is not available if the hardware does not support it\r\n */\r\n public get useTextureToStoreBoneMatrices(): boolean {\r\n return this._useTextureToStoreBoneMatrices;\r\n }\r\n\r\n public set useTextureToStoreBoneMatrices(value: boolean) {\r\n this._useTextureToStoreBoneMatrices = value;\r\n this._markAsDirty();\r\n }\r\n\r\n private _animationPropertiesOverride: Nullable<AnimationPropertiesOverride> = null;\r\n\r\n /**\r\n * Gets or sets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n if (!this._animationPropertiesOverride) {\r\n return this._scene.animationPropertiesOverride;\r\n }\r\n return this._animationPropertiesOverride;\r\n }\r\n\r\n public set animationPropertiesOverride(value: Nullable<AnimationPropertiesOverride>) {\r\n this._animationPropertiesOverride = value;\r\n }\r\n\r\n /**\r\n * List of inspectable custom properties (used by the Inspector)\r\n * @see https://doc.babylonjs.com/how_to/debug_layer#extensibility\r\n */\r\n public inspectableCustomProperties: IInspectable[];\r\n\r\n // Events\r\n\r\n /**\r\n * An observable triggered before computing the skeleton's matrices\r\n */\r\n public onBeforeComputeObservable = new Observable<Skeleton>();\r\n\r\n /**\r\n * Gets a boolean indicating that the skeleton effectively stores matrices into a texture\r\n */\r\n public get isUsingTextureForMatrices() {\r\n return this.useTextureToStoreBoneMatrices && this._canUseTextureForBones;\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this skeleton\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Creates a new skeleton\r\n * @param name defines the skeleton name\r\n * @param id defines the skeleton Id\r\n * @param scene defines the hosting scene\r\n */\r\n constructor(\r\n /** defines the skeleton name */\r\n public name: string,\r\n /** defines the skeleton Id */\r\n public id: string, scene: Scene) {\r\n this.bones = [];\r\n\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this._uniqueId = this._scene.getUniqueId();\r\n\r\n this._scene.addSkeleton(this);\r\n\r\n //make sure it will recalculate the matrix next time prepare is called.\r\n this._isDirty = true;\r\n\r\n const engineCaps = this._scene.getEngine().getCaps();\r\n this._canUseTextureForBones = engineCaps.textureFloat && engineCaps.maxVertexTextureImageUnits > 0;\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @return the class name\r\n */\r\n public getClassName(): string {\r\n return \"Skeleton\";\r\n }\r\n\r\n /**\r\n * Returns an array containing the root bones\r\n * @returns an array containing the root bones\r\n */\r\n public getChildren(): Array<Bone> {\r\n return this.bones.filter((b) => !b.getParent());\r\n }\r\n\r\n // Members\r\n /**\r\n * Gets the list of transform matrices to send to shaders (one matrix per bone)\r\n * @param mesh defines the mesh to use to get the root matrix (if needInitialSkinMatrix === true)\r\n * @returns a Float32Array containing matrices data\r\n */\r\n public getTransformMatrices(mesh: AbstractMesh): Float32Array {\r\n if (this.needInitialSkinMatrix && mesh._bonesTransformMatrices) {\r\n return mesh._bonesTransformMatrices;\r\n }\r\n\r\n if (!this._transformMatrices) {\r\n this.prepare();\r\n }\r\n\r\n return this._transformMatrices;\r\n }\r\n\r\n /**\r\n * Gets the list of transform matrices to send to shaders inside a texture (one matrix per bone)\r\n * @param mesh defines the mesh to use to get the root matrix (if needInitialSkinMatrix === true)\r\n * @returns a raw texture containing the data\r\n */\r\n public getTransformMatrixTexture(mesh: AbstractMesh): Nullable<RawTexture> {\r\n if (this.needInitialSkinMatrix && mesh._transformMatrixTexture) {\r\n return mesh._transformMatrixTexture;\r\n }\r\n\r\n return this._transformMatrixTexture;\r\n }\r\n\r\n /**\r\n * Gets the current hosting scene\r\n * @returns a scene object\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Gets a string representing the current skeleton data\r\n * @param fullDetails defines a boolean indicating if we want a verbose version\r\n * @returns a string representing the current skeleton data\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n var ret = `Name: ${this.name}, nBones: ${this.bones.length}`;\r\n ret += `, nAnimationRanges: ${this._ranges ? Object.keys(this._ranges).length : \"none\"}`;\r\n if (fullDetails) {\r\n ret += \", Ranges: {\";\r\n let first = true;\r\n for (let name in this._ranges) {\r\n if (first) {\r\n ret += \", \";\r\n first = false;\r\n }\r\n ret += name;\r\n }\r\n ret += \"}\";\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Get bone's index searching by name\r\n * @param name defines bone's name to search for\r\n * @return the indice of the bone. Returns -1 if not found\r\n */\r\n public getBoneIndexByName(name: string): number {\r\n for (var boneIndex = 0, cache = this.bones.length; boneIndex < cache; boneIndex++) {\r\n if (this.bones[boneIndex].name === name) {\r\n return boneIndex;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Create a new animation range\r\n * @param name defines the name of the range\r\n * @param from defines the start key\r\n * @param to defines the end key\r\n */\r\n public createAnimationRange(name: string, from: number, to: number): void {\r\n // check name not already in use\r\n if (!this._ranges[name]) {\r\n this._ranges[name] = new AnimationRange(name, from, to);\r\n for (var i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n this.bones[i].animations[0].createRange(name, from, to);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Delete a specific animation range\r\n * @param name defines the name of the range\r\n * @param deleteFrames defines if frames must be removed as well\r\n */\r\n public deleteAnimationRange(name: string, deleteFrames = true): void {\r\n for (var i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n this.bones[i].animations[0].deleteRange(name, deleteFrames);\r\n }\r\n }\r\n this._ranges[name] = null; // said much faster than 'delete this._range[name]'\r\n }\r\n\r\n /**\r\n * Gets a specific animation range\r\n * @param name defines the name of the range to look for\r\n * @returns the requested animation range or null if not found\r\n */\r\n public getAnimationRange(name: string): Nullable<AnimationRange> {\r\n return this._ranges[name] || null;\r\n }\r\n\r\n /**\r\n * Gets the list of all animation ranges defined on this skeleton\r\n * @returns an array\r\n */\r\n public getAnimationRanges(): Nullable<AnimationRange>[] {\r\n var animationRanges: Nullable<AnimationRange>[] = [];\r\n var name: string;\r\n for (name in this._ranges) {\r\n animationRanges.push(this._ranges[name]);\r\n }\r\n return animationRanges;\r\n }\r\n\r\n /**\r\n * Copy animation range from a source skeleton.\r\n * This is not for a complete retargeting, only between very similar skeleton's with only possible bone length differences\r\n * @param source defines the source skeleton\r\n * @param name defines the name of the range to copy\r\n * @param rescaleAsRequired defines if rescaling must be applied if required\r\n * @returns true if operation was successful\r\n */\r\n public copyAnimationRange(source: Skeleton, name: string, rescaleAsRequired = false): boolean {\r\n if (this._ranges[name] || !source.getAnimationRange(name)) {\r\n return false;\r\n }\r\n var ret = true;\r\n var frameOffset = this._getHighestAnimationFrame() + 1;\r\n\r\n // make a dictionary of source skeleton's bones, so exact same order or doubly nested loop is not required\r\n var boneDict: { [key: string]: Bone } = {};\r\n var sourceBones = source.bones;\r\n var nBones: number;\r\n var i: number;\r\n for (i = 0, nBones = sourceBones.length; i < nBones; i++) {\r\n boneDict[sourceBones[i].name] = sourceBones[i];\r\n }\r\n\r\n if (this.bones.length !== sourceBones.length) {\r\n Logger.Warn(`copyAnimationRange: this rig has ${this.bones.length} bones, while source as ${sourceBones.length}`);\r\n ret = false;\r\n }\r\n\r\n var skelDimensionsRatio = (rescaleAsRequired && this.dimensionsAtRest && source.dimensionsAtRest) ? this.dimensionsAtRest.divide(source.dimensionsAtRest) : null;\r\n\r\n for (i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n var boneName = this.bones[i].name;\r\n var sourceBone = boneDict[boneName];\r\n if (sourceBone) {\r\n ret = ret && this.bones[i].copyAnimationRange(sourceBone, name, frameOffset, rescaleAsRequired, skelDimensionsRatio);\r\n } else {\r\n Logger.Warn(\"copyAnimationRange: not same rig, missing source bone \" + boneName);\r\n ret = false;\r\n }\r\n }\r\n // do not call createAnimationRange(), since it also is done to bones, which was already done\r\n var range = source.getAnimationRange(name);\r\n if (range) {\r\n this._ranges[name] = new AnimationRange(name, range.from + frameOffset, range.to + frameOffset);\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Forces the skeleton to go to rest pose\r\n */\r\n public returnToRest(): void {\r\n for (const bone of this.bones) {\r\n if (bone._index !== -1) {\r\n bone.returnToRest();\r\n }\r\n }\r\n }\r\n\r\n private _getHighestAnimationFrame(): number {\r\n var ret = 0;\r\n for (var i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n var highest = this.bones[i].animations[0].getHighestFrame();\r\n if (ret < highest) {\r\n ret = highest;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Begin a specific animation range\r\n * @param name defines the name of the range to start\r\n * @param loop defines if looping must be turned on (false by default)\r\n * @param speedRatio defines the speed ratio to apply (1 by default)\r\n * @param onAnimationEnd defines a callback which will be called when animation will end\r\n * @returns a new animatable\r\n */\r\n public beginAnimation(name: string, loop?: boolean, speedRatio?: number, onAnimationEnd?: () => void): Nullable<Animatable> {\r\n var range = this.getAnimationRange(name);\r\n\r\n if (!range) {\r\n return null;\r\n }\r\n\r\n return this._scene.beginAnimation(this, range.from, range.to, loop, speedRatio, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Convert the keyframes for a range of animation on a skeleton to be relative to a given reference frame.\r\n * @param skeleton defines the Skeleton containing the animation range to convert\r\n * @param referenceFrame defines the frame that keyframes in the range will be relative to\r\n * @param range defines the name of the AnimationRange belonging to the Skeleton to convert\r\n * @returns the original skeleton\r\n */\r\n public static MakeAnimationAdditive(skeleton: Skeleton, referenceFrame = 0, range: string): Nullable<Skeleton> {\r\n var rangeValue = skeleton.getAnimationRange(range);\r\n\r\n // We can't make a range additive if it doesn't exist\r\n if (!rangeValue) {\r\n return null;\r\n }\r\n\r\n // Find any current scene-level animatable belonging to the target that matches the range\r\n var sceneAnimatables = skeleton._scene.getAllAnimatablesByTarget(skeleton);\r\n var rangeAnimatable: Nullable<Animatable> = null;\r\n\r\n for (let index = 0; index < sceneAnimatables.length; index++) {\r\n let sceneAnimatable = sceneAnimatables[index];\r\n\r\n if (sceneAnimatable.fromFrame === rangeValue?.from && sceneAnimatable.toFrame === rangeValue?.to) {\r\n rangeAnimatable = sceneAnimatable;\r\n break;\r\n }\r\n }\r\n\r\n // Convert the animations belonging to the skeleton to additive keyframes\r\n var animatables = skeleton.getAnimatables();\r\n\r\n for (let index = 0; index < animatables.length; index++) {\r\n let animatable = animatables[index];\r\n let animations = animatable.animations;\r\n\r\n if (!animations) {\r\n continue;\r\n }\r\n\r\n for (var animIndex = 0; animIndex < animations.length; animIndex++) {\r\n Animation.MakeAnimationAdditive(animations[animIndex], referenceFrame, range);\r\n }\r\n }\r\n\r\n // Mark the scene-level animatable as additive\r\n if (rangeAnimatable) {\r\n rangeAnimatable.isAdditive = true;\r\n }\r\n\r\n return skeleton;\r\n }\r\n\r\n /** @hidden */\r\n public _markAsDirty(): void {\r\n this._isDirty = true;\r\n }\r\n\r\n /** @hidden */\r\n public _registerMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n this._meshesWithPoseMatrix.push(mesh);\r\n }\r\n\r\n /** @hidden */\r\n public _unregisterMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n var index = this._meshesWithPoseMatrix.indexOf(mesh);\r\n\r\n if (index > -1) {\r\n this._meshesWithPoseMatrix.splice(index, 1);\r\n }\r\n }\r\n\r\n private _computeTransformMatrices(targetMatrix: Float32Array, initialSkinMatrix: Nullable<Matrix>): void {\r\n\r\n this.onBeforeComputeObservable.notifyObservers(this);\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n var bone = this.bones[index];\r\n bone._childUpdateId++;\r\n var parentBone = bone.getParent();\r\n\r\n if (parentBone) {\r\n bone.getLocalMatrix().multiplyToRef(parentBone.getWorldMatrix(), bone.getWorldMatrix());\r\n } else {\r\n if (initialSkinMatrix) {\r\n bone.getLocalMatrix().multiplyToRef(initialSkinMatrix, bone.getWorldMatrix());\r\n } else {\r\n bone.getWorldMatrix().copyFrom(bone.getLocalMatrix());\r\n }\r\n }\r\n\r\n if (bone._index !== -1) {\r\n var mappedIndex = bone._index === null ? index : bone._index;\r\n bone.getInvertedAbsoluteTransform().multiplyToArray(bone.getWorldMatrix(), targetMatrix, mappedIndex * 16);\r\n }\r\n }\r\n\r\n this._identity.copyToArray(targetMatrix, this.bones.length * 16);\r\n }\r\n\r\n /**\r\n * Build all resources required to render a skeleton\r\n */\r\n public prepare(): void {\r\n // Update the local matrix of bones with linked transform nodes.\r\n if (this._numBonesWithLinkedTransformNode > 0) {\r\n for (const bone of this.bones) {\r\n if (bone._linkedTransformNode) {\r\n // Computing the world matrix also computes the local matrix.\r\n bone._linkedTransformNode.computeWorldMatrix();\r\n bone._matrix = bone._linkedTransformNode._localMatrix;\r\n }\r\n }\r\n }\r\n\r\n if (!this._isDirty) {\r\n return;\r\n }\r\n\r\n if (this.needInitialSkinMatrix) {\r\n for (var index = 0; index < this._meshesWithPoseMatrix.length; index++) {\r\n var mesh = this._meshesWithPoseMatrix[index];\r\n\r\n var poseMatrix = mesh.getPoseMatrix();\r\n\r\n if (!mesh._bonesTransformMatrices || mesh._bonesTransformMatrices.length !== 16 * (this.bones.length + 1)) {\r\n mesh._bonesTransformMatrices = new Float32Array(16 * (this.bones.length + 1));\r\n }\r\n\r\n if (this._synchronizedWithMesh !== mesh) {\r\n this._synchronizedWithMesh = mesh;\r\n\r\n // Prepare bones\r\n for (var boneIndex = 0; boneIndex < this.bones.length; boneIndex++) {\r\n var bone = this.bones[boneIndex];\r\n\r\n if (!bone.getParent()) {\r\n var matrix = bone.getBaseMatrix();\r\n matrix.multiplyToRef(poseMatrix, TmpVectors.Matrix[1]);\r\n bone._updateDifferenceMatrix(TmpVectors.Matrix[1]);\r\n }\r\n }\r\n\r\n if (this.isUsingTextureForMatrices) {\r\n const textureWidth = (this.bones.length + 1) * 4;\r\n if (!mesh._transformMatrixTexture || mesh._transformMatrixTexture.getSize().width !== textureWidth) {\r\n\r\n if (mesh._transformMatrixTexture) {\r\n mesh._transformMatrixTexture.dispose();\r\n }\r\n\r\n mesh._transformMatrixTexture = RawTexture.CreateRGBATexture(mesh._bonesTransformMatrices, (this.bones.length + 1) * 4, 1, this._scene, false, false, 1, 1);\r\n }\r\n }\r\n }\r\n\r\n this._computeTransformMatrices(mesh._bonesTransformMatrices, poseMatrix);\r\n\r\n if (this.isUsingTextureForMatrices && mesh._transformMatrixTexture) {\r\n mesh._transformMatrixTexture.update(mesh._bonesTransformMatrices);\r\n }\r\n }\r\n } else {\r\n if (!this._transformMatrices || this._transformMatrices.length !== 16 * (this.bones.length + 1)) {\r\n this._transformMatrices = new Float32Array(16 * (this.bones.length + 1));\r\n\r\n if (this.isUsingTextureForMatrices) {\r\n if (this._transformMatrixTexture) {\r\n this._transformMatrixTexture.dispose();\r\n }\r\n\r\n this._transformMatrixTexture = RawTexture.CreateRGBATexture(this._transformMatrices, (this.bones.length + 1) * 4, 1, this._scene, false, false, 1, 1);\r\n }\r\n }\r\n\r\n this._computeTransformMatrices(this._transformMatrices, null);\r\n\r\n if (this.isUsingTextureForMatrices && this._transformMatrixTexture) {\r\n this._transformMatrixTexture.update(this._transformMatrices);\r\n }\r\n }\r\n\r\n this._isDirty = false;\r\n\r\n this._scene._activeBones.addCount(this.bones.length, false);\r\n }\r\n\r\n /**\r\n * Gets the list of animatables currently running for this skeleton\r\n * @returns an array of animatables\r\n */\r\n public getAnimatables(): IAnimatable[] {\r\n if (!this._animatables || this._animatables.length !== this.bones.length) {\r\n this._animatables = [];\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n this._animatables.push(this.bones[index]);\r\n }\r\n }\r\n\r\n return this._animatables;\r\n }\r\n\r\n /**\r\n * Clone the current skeleton\r\n * @param name defines the name of the new skeleton\r\n * @param id defines the id of the new skeleton\r\n * @returns the new skeleton\r\n */\r\n public clone(name: string, id?: string): Skeleton {\r\n var result = new Skeleton(name, id || name, this._scene);\r\n\r\n result.needInitialSkinMatrix = this.needInitialSkinMatrix;\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n var source = this.bones[index];\r\n var parentBone = null;\r\n\r\n let parent = source.getParent();\r\n if (parent) {\r\n var parentIndex = this.bones.indexOf(parent);\r\n parentBone = result.bones[parentIndex];\r\n }\r\n\r\n var bone = new Bone(source.name, result, parentBone, source.getBaseMatrix().clone(), source.getRestPose().clone());\r\n bone._index = source._index;\r\n\r\n if (source._linkedTransformNode) {\r\n bone.linkTransformNode(source._linkedTransformNode);\r\n }\r\n\r\n DeepCopier.DeepCopy(source.animations, bone.animations);\r\n }\r\n\r\n if (this._ranges) {\r\n result._ranges = {};\r\n for (var rangeName in this._ranges) {\r\n let range = this._ranges[rangeName];\r\n\r\n if (range) {\r\n result._ranges[rangeName] = range.clone();\r\n }\r\n }\r\n }\r\n\r\n this._isDirty = true;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Enable animation blending for this skeleton\r\n * @param blendingSpeed defines the blending speed to apply\r\n * @see https://doc.babylonjs.com/babylon101/animations#animation-blending\r\n */\r\n public enableBlending(blendingSpeed = 0.01) {\r\n this.bones.forEach((bone) => {\r\n bone.animations.forEach((animation: Animation) => {\r\n animation.enableBlending = true;\r\n animation.blendingSpeed = blendingSpeed;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Releases all resources associated with the current skeleton\r\n */\r\n public dispose() {\r\n this._meshesWithPoseMatrix = [];\r\n\r\n // Animations\r\n this.getScene().stopAnimation(this);\r\n\r\n // Remove from scene\r\n this.getScene().removeSkeleton(this);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.skeletons.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.skeletons.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (this._transformMatrixTexture) {\r\n this._transformMatrixTexture.dispose();\r\n this._transformMatrixTexture = null;\r\n }\r\n }\r\n\r\n /**\r\n * Serialize the skeleton in a JSON object\r\n * @returns a JSON object\r\n */\r\n public serialize(): any {\r\n var serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.id = this.id;\r\n\r\n if (this.dimensionsAtRest) {\r\n serializationObject.dimensionsAtRest = this.dimensionsAtRest.asArray();\r\n }\r\n\r\n serializationObject.bones = [];\r\n\r\n serializationObject.needInitialSkinMatrix = this.needInitialSkinMatrix;\r\n\r\n for (var index = 0; index < this.bones.length; index++) {\r\n var bone = this.bones[index];\r\n let parent = bone.getParent();\r\n\r\n var serializedBone: any = {\r\n parentBoneIndex: parent ? this.bones.indexOf(parent) : -1,\r\n index: bone.getIndex(),\r\n name: bone.name,\r\n id: bone.id,\r\n matrix: bone.getBaseMatrix().toArray(),\r\n rest: bone.getRestPose().toArray(),\r\n linkedTransformNodeId: bone.getTransformNode()?.id\r\n };\r\n\r\n serializationObject.bones.push(serializedBone);\r\n\r\n if (bone.length) {\r\n serializedBone.length = bone.length;\r\n }\r\n\r\n if (bone.metadata) {\r\n serializedBone.metadata = bone.metadata;\r\n }\r\n\r\n if (bone.animations && bone.animations.length > 0) {\r\n serializedBone.animation = bone.animations[0].serialize();\r\n }\r\n\r\n serializationObject.ranges = [];\r\n for (var name in this._ranges) {\r\n let source = this._ranges[name];\r\n\r\n if (!source) {\r\n continue;\r\n }\r\n\r\n var range: any = {};\r\n range.name = name;\r\n range.from = source.from;\r\n range.to = source.to;\r\n serializationObject.ranges.push(range);\r\n }\r\n }\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Creates a new skeleton from serialized data\r\n * @param parsedSkeleton defines the serialized data\r\n * @param scene defines the hosting scene\r\n * @returns a new skeleton\r\n */\r\n public static Parse(parsedSkeleton: any, scene: Scene): Skeleton {\r\n var skeleton = new Skeleton(parsedSkeleton.name, parsedSkeleton.id, scene);\r\n if (parsedSkeleton.dimensionsAtRest) {\r\n skeleton.dimensionsAtRest = Vector3.FromArray(parsedSkeleton.dimensionsAtRest);\r\n }\r\n\r\n skeleton.needInitialSkinMatrix = parsedSkeleton.needInitialSkinMatrix;\r\n\r\n let index: number;\r\n for (index = 0; index < parsedSkeleton.bones.length; index++) {\r\n var parsedBone = parsedSkeleton.bones[index];\r\n var parsedBoneIndex = parsedSkeleton.bones[index].index;\r\n var parentBone = null;\r\n if (parsedBone.parentBoneIndex > -1) {\r\n parentBone = skeleton.bones[parsedBone.parentBoneIndex];\r\n }\r\n\r\n var rest: Nullable<Matrix> = parsedBone.rest ? Matrix.FromArray(parsedBone.rest) : null;\r\n var bone = new Bone(parsedBone.name, skeleton, parentBone, Matrix.FromArray(parsedBone.matrix), rest, null, parsedBoneIndex);\r\n\r\n if (parsedBone.id !== undefined && parsedBone.id !== null) {\r\n bone.id = parsedBone.id;\r\n }\r\n\r\n if (parsedBone.length) {\r\n bone.length = parsedBone.length;\r\n }\r\n\r\n if (parsedBone.metadata) {\r\n bone.metadata = parsedBone.metadata;\r\n }\r\n\r\n if (parsedBone.animation) {\r\n bone.animations.push(Animation.Parse(parsedBone.animation));\r\n }\r\n\r\n if (parsedBone.linkedTransformNodeId !== undefined && parsedBone.linkedTransformNodeId !== null) {\r\n skeleton._hasWaitingData = true;\r\n bone._waitingTransformNodeId = parsedBone.linkedTransformNodeId;\r\n }\r\n }\r\n\r\n // placed after bones, so createAnimationRange can cascade down\r\n if (parsedSkeleton.ranges) {\r\n for (index = 0; index < parsedSkeleton.ranges.length; index++) {\r\n var data = parsedSkeleton.ranges[index];\r\n skeleton.createAnimationRange(data.name, data.from, data.to);\r\n }\r\n }\r\n return skeleton;\r\n }\r\n\r\n /**\r\n * Compute all node absolute transforms\r\n * @param forceUpdate defines if computation must be done even if cache is up to date\r\n */\r\n public computeAbsoluteTransforms(forceUpdate = false): void {\r\n\r\n var renderId = this._scene.getRenderId();\r\n\r\n if (this._lastAbsoluteTransformsUpdateId != renderId || forceUpdate) {\r\n this.bones[0].computeAbsoluteTransforms();\r\n this._lastAbsoluteTransformsUpdateId = renderId;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Gets the root pose matrix\r\n * @returns a matrix\r\n */\r\n public getPoseMatrix(): Nullable<Matrix> {\r\n var poseMatrix: Nullable<Matrix> = null;\r\n\r\n if (this._meshesWithPoseMatrix.length > 0) {\r\n poseMatrix = this._meshesWithPoseMatrix[0].getPoseMatrix();\r\n }\r\n\r\n return poseMatrix;\r\n }\r\n\r\n /**\r\n * Sorts bones per internal index\r\n */\r\n public sortBones(): void {\r\n var bones = new Array<Bone>();\r\n var visited = new Array<boolean>(this.bones.length);\r\n for (var index = 0; index < this.bones.length; index++) {\r\n this._sortBones(index, bones, visited);\r\n }\r\n\r\n this.bones = bones;\r\n }\r\n\r\n private _sortBones(index: number, bones: Bone[], visited: boolean[]): void {\r\n if (visited[index]) {\r\n return;\r\n }\r\n\r\n visited[index] = true;\r\n\r\n var bone = this.bones[index];\r\n if (bone._index === undefined) {\r\n bone._index = index;\r\n }\r\n\r\n var parentBone = bone.getParent();\r\n if (parentBone) {\r\n this._sortBones(this.bones.indexOf(parentBone), bones, visited);\r\n }\r\n\r\n bones.push(bone);\r\n }\r\n\r\n /**\r\n * Set the current local matrix as the restPose for all bones in the skeleton.\r\n */\r\n public setCurrentPoseAsRest(): void {\r\n this.bones.forEach((b) => {\r\n b.setCurrentPoseAsRest();\r\n });\r\n }\r\n}\r\n"]}
@@ -308,6 +308,10 @@ export declare class VertexBuffer {
308
308
  * Colors
309
309
  */
310
310
  static readonly ColorKind = "color";
311
+ /**
312
+ * Instance Colors
313
+ */
314
+ static readonly ColorInstanceKind = "instanceColor";
311
315
  /**
312
316
  * Matrix indices (for bones)
313
317
  */
package/Buffers/buffer.js CHANGED
@@ -147,7 +147,13 @@ var Buffer = /** @class */ (function () {
147
147
  }
148
148
  if (this._updatable) { // update buffer
149
149
  this._engine.updateDynamicVertexBuffer(this._buffer, data, useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT, (vertexCount ? vertexCount * this.byteStride : undefined));
150
- this._data = null;
150
+ if (offset === 0 && vertexCount === undefined) {
151
+ // Keep the data if we easily can
152
+ this._data = data;
153
+ }
154
+ else {
155
+ this._data = null;
156
+ }
151
157
  }
152
158
  };
153
159
  /** @hidden */
@@ -495,7 +501,7 @@ var VertexBuffer = /** @class */ (function () {
495
501
  case VertexBuffer.FLOAT:
496
502
  return 4;
497
503
  default:
498
- throw new Error("Invalid type '" + type + "'");
504
+ throw new Error("Invalid type '".concat(type, "'"));
499
505
  }
500
506
  };
501
507
  /**
@@ -574,7 +580,7 @@ var VertexBuffer = /** @class */ (function () {
574
580
  return dataView.getFloat32(byteOffset, true);
575
581
  }
576
582
  default: {
577
- throw new Error("Invalid component type " + type);
583
+ throw new Error("Invalid component type ".concat(type));
578
584
  }
579
585
  }
580
586
  };
@@ -648,6 +654,10 @@ var VertexBuffer = /** @class */ (function () {
648
654
  * Colors
649
655
  */
650
656
  VertexBuffer.ColorKind = "color";
657
+ /**
658
+ * Instance Colors
659
+ */
660
+ VertexBuffer.ColorInstanceKind = "instanceColor";
651
661
  /**
652
662
  * Matrix indices (for bones)
653
663
  */
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../sourceES6/core/Buffers/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable, DataArray, FloatArray } from \"../types\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { DataBuffer } from \"./dataBuffer\";\r\nimport { SliceTools } from \"../Misc/sliceTools\";\r\n\r\n/**\r\n * Class used to store data that will be store in GPU memory\r\n */\r\nexport class Buffer {\r\n private _engine: ThinEngine;\r\n private _buffer: Nullable<DataBuffer>;\r\n /** @hidden */\r\n public _data: Nullable<DataArray>;\r\n private _updatable: boolean;\r\n private _instanced: boolean;\r\n private _divisor: number;\r\n private _isAlreadyOwned = false;\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this buffer\r\n * @param updatable whether the data is updatable\r\n * @param stride the stride (optional)\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param useBytes set to true if the stride in in bytes (optional)\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n */\r\n constructor(engine: any, data: DataArray | DataBuffer, updatable: boolean, stride = 0, postponeInternalCreation = false, instanced = false, useBytes = false, divisor?: number) {\r\n if (engine.getScene) { // old versions of VertexBuffer accepted 'mesh' instead of 'engine'\r\n this._engine = engine.getScene().getEngine();\r\n }\r\n else {\r\n this._engine = engine;\r\n }\r\n\r\n this._updatable = updatable;\r\n this._instanced = instanced;\r\n this._divisor = divisor || 1;\r\n\r\n if (data instanceof DataBuffer) {\r\n this._data = null;\r\n this._buffer = data;\r\n } else {\r\n this._data = data;\r\n this._buffer = null;\r\n }\r\n\r\n this.byteStride = useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT;\r\n\r\n if (!postponeInternalCreation) { // by default\r\n this.create();\r\n }\r\n }\r\n\r\n /**\r\n * Create a new VertexBuffer based on the current buffer\r\n * @param kind defines the vertex buffer kind (position, normal, etc.)\r\n * @param offset defines offset in the buffer (0 by default)\r\n * @param size defines the size in floats of attributes (position is 3 for instance)\r\n * @param stride defines the stride size in floats in the buffer (the offset to apply to reach next value when data is interleaved)\r\n * @param instanced defines if the vertex buffer contains indexed data\r\n * @param useBytes defines if the offset and stride are in bytes *\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n * @returns the new vertex buffer\r\n */\r\n public createVertexBuffer(kind: string, offset: number, size: number, stride?: number, instanced?: boolean, useBytes = false, divisor?: number): VertexBuffer {\r\n const byteOffset = useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT;\r\n const byteStride = stride ? (useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT) : this.byteStride;\r\n\r\n // a lot of these parameters are ignored as they are overridden by the buffer\r\n return new VertexBuffer(this._engine, this, kind, this._updatable, true, byteStride, instanced === undefined ? this._instanced : instanced, byteOffset, size, undefined, undefined, true, this._divisor || divisor);\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the Buffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._updatable;\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer;\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / Float32Array.BYTES_PER_ELEMENT;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. Creates the buffer if not used already.\r\n * If the buffer was already used, it will be updated only if it is updatable, otherwise it will do nothing.\r\n * @param data defines the data to store\r\n */\r\n public create(data: Nullable<DataArray> = null): void {\r\n if (!data && this._buffer) {\r\n return; // nothing to do\r\n }\r\n\r\n data = data || this._data;\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n if (!this._buffer) { // create buffer\r\n if (this._updatable) {\r\n this._buffer = this._engine.createDynamicVertexBuffer(data);\r\n this._data = data;\r\n } else {\r\n this._buffer = this._engine.createVertexBuffer(data);\r\n }\r\n } else if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data);\r\n this._data = data;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this._buffer = null;\r\n this.create(this._data);\r\n }\r\n\r\n /**\r\n * Update current buffer data\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this.create(data);\r\n }\r\n\r\n /**\r\n * Updates the data directly.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param vertexCount the vertex count (optional)\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, vertexCount?: number, useBytes: boolean = false): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data, useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT, (vertexCount ? vertexCount * this.byteStride : undefined));\r\n this._data = null;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _increaseReferences() {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (!this._isAlreadyOwned) {\r\n this._isAlreadyOwned = true;\r\n return;\r\n }\r\n\r\n this._buffer.references++;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n if (this._engine._releaseBuffer(this._buffer)) {\r\n this._buffer = null;\r\n this._data = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Specialized buffer used to store vertex data\r\n */\r\nexport class VertexBuffer {\r\n\r\n private static _Counter = 0;\r\n\r\n /** @hidden */\r\n public _buffer: Buffer;\r\n /** @hidden */\r\n public _validOffsetRange: boolean; // used internally by the engine\r\n private _kind: string;\r\n private _size: number;\r\n private _ownsBuffer: boolean;\r\n private _instanced: boolean;\r\n private _instanceDivisor: number;\r\n\r\n /**\r\n * The byte type.\r\n */\r\n public static readonly BYTE = 5120;\r\n\r\n /**\r\n * The unsigned byte type.\r\n */\r\n public static readonly UNSIGNED_BYTE = 5121;\r\n\r\n /**\r\n * The short type.\r\n */\r\n public static readonly SHORT = 5122;\r\n\r\n /**\r\n * The unsigned short type.\r\n */\r\n public static readonly UNSIGNED_SHORT = 5123;\r\n\r\n /**\r\n * The integer type.\r\n */\r\n public static readonly INT = 5124;\r\n\r\n /**\r\n * The unsigned integer type.\r\n */\r\n public static readonly UNSIGNED_INT = 5125;\r\n\r\n /**\r\n * The float type.\r\n */\r\n public static readonly FLOAT = 5126;\r\n\r\n /**\r\n * Gets or sets the instance divisor when in instanced mode\r\n */\r\n public get instanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n public set instanceDivisor(value: number) {\r\n this._instanceDivisor = value;\r\n if (value == 0) {\r\n this._instanced = false;\r\n } else {\r\n this._instanced = true;\r\n }\r\n this._computeHashCode();\r\n }\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Gets the byte offset.\r\n */\r\n public readonly byteOffset: number;\r\n\r\n /**\r\n * Gets whether integer data values should be normalized into a certain range when being casted to a float.\r\n */\r\n public readonly normalized: boolean;\r\n\r\n /**\r\n * Gets the data type of each component in the array.\r\n */\r\n public readonly type: number;\r\n\r\n /**\r\n * Gets the unique id of this vertex buffer\r\n */\r\n public readonly uniqueId: number;\r\n\r\n /**\r\n * Gets a hash code representing the format (type, normalized, size, instanced, stride) of this buffer\r\n * All buffers with the same format will have the same hash code\r\n */\r\n public readonly hashCode: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this vertex buffer\r\n * @param kind the vertex buffer kind\r\n * @param updatable whether the data is updatable\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param stride the stride (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param offset the offset of the data (optional)\r\n * @param size the number of components (optional)\r\n * @param type the type of the component (optional)\r\n * @param normalized whether the data contains normalized data (optional)\r\n * @param useBytes set to true if stride and offset are in bytes (optional)\r\n * @param divisor defines the instance divisor to use (1 by default)\r\n * @param takeBufferOwnership defines if the buffer should be released when the vertex buffer is disposed\r\n */\r\n constructor(engine: any, data: DataArray | Buffer | DataBuffer, kind: string, updatable: boolean, postponeInternalCreation?: boolean, stride?: number,\r\n instanced?: boolean, offset?: number, size?: number, type?: number, normalized = false, useBytes = false, divisor = 1, takeBufferOwnership = false) {\r\n if (data instanceof Buffer) {\r\n this._buffer = data;\r\n this._ownsBuffer = takeBufferOwnership;\r\n\r\n } else {\r\n this._buffer = new Buffer(engine, data, updatable, stride, postponeInternalCreation, instanced, useBytes);\r\n this._ownsBuffer = true;\r\n }\r\n\r\n this.uniqueId = VertexBuffer._Counter++;\r\n this._kind = kind;\r\n\r\n if (type == undefined) {\r\n const data = this.getData();\r\n this.type = VertexBuffer.FLOAT;\r\n if (data instanceof Int8Array) { this.type = VertexBuffer.BYTE; }\r\n else if (data instanceof Uint8Array) { this.type = VertexBuffer.UNSIGNED_BYTE; }\r\n else if (data instanceof Int16Array) { this.type = VertexBuffer.SHORT; }\r\n else if (data instanceof Uint16Array) { this.type = VertexBuffer.UNSIGNED_SHORT; }\r\n else if (data instanceof Int32Array) { this.type = VertexBuffer.INT; }\r\n else if (data instanceof Uint32Array) { this.type = VertexBuffer.UNSIGNED_INT; }\r\n }\r\n else {\r\n this.type = type;\r\n }\r\n\r\n const typeByteLength = VertexBuffer.GetTypeByteLength(this.type);\r\n\r\n if (useBytes) {\r\n this._size = size || (stride ? (stride / typeByteLength) : VertexBuffer.DeduceStride(kind));\r\n this.byteStride = stride || this._buffer.byteStride || (this._size * typeByteLength);\r\n this.byteOffset = offset || 0;\r\n }\r\n else {\r\n this._size = size || stride || VertexBuffer.DeduceStride(kind);\r\n this.byteStride = stride ? (stride * typeByteLength) : (this._buffer.byteStride || (this._size * typeByteLength));\r\n this.byteOffset = (offset || 0) * typeByteLength;\r\n }\r\n\r\n this.normalized = normalized;\r\n\r\n this._instanced = instanced !== undefined ? instanced : false;\r\n this._instanceDivisor = instanced ? divisor : 0;\r\n\r\n this._computeHashCode();\r\n }\r\n\r\n private _computeHashCode(): void {\r\n // note: cast to any because the property is declared readonly\r\n (this.hashCode as any) =\r\n (((this.type - 5120) << 0) +\r\n ((this.normalized ? 1 : 0) << 3) +\r\n (this._size << 4) +\r\n ((this._instanced ? 1 : 0) << 6) +\r\n /* keep 5 bits free */\r\n (this.byteStride << 12));\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n this._buffer._rebuild();\r\n }\r\n\r\n /**\r\n * Returns the kind of the VertexBuffer (string)\r\n * @returns a string\r\n */\r\n public getKind(): string {\r\n return this._kind;\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the VertexBuffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._buffer.isUpdatable();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._buffer.getData();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data as a float array. Float data is constructed if the vertex buffer data cannot be returned directly.\r\n * @param totalVertices number of vertices in the buffer to take into account\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 getFloatData(totalVertices: number, forceCopy?: boolean): Nullable<FloatArray> {\r\n let data = this.getData();\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n const tightlyPackedByteStride = this.getSize() * VertexBuffer.GetTypeByteLength(this.type);\r\n const count = totalVertices * this.getSize();\r\n\r\n if (this.type !== VertexBuffer.FLOAT || this.byteStride !== tightlyPackedByteStride) {\r\n const copy = new Float32Array(count);\r\n this.forEach(count, (value, index) => copy[index] = value);\r\n return copy;\r\n }\r\n\r\n if (!(data instanceof Array || data instanceof Float32Array) || this.byteOffset !== 0 || data.length !== count) {\r\n if (data instanceof Array) {\r\n const offset = this.byteOffset / 4;\r\n return SliceTools.Slice(data, offset, offset + count);\r\n } else if (data instanceof ArrayBuffer) {\r\n return new Float32Array(data, this.byteOffset, count);\r\n } else {\r\n let offset = data.byteOffset + this.byteOffset;\r\n if (forceCopy) {\r\n let result = new Float32Array(count);\r\n let source = new Float32Array(data.buffer, offset, count);\r\n\r\n result.set(source);\r\n\r\n return result;\r\n }\r\n\r\n // Protect against bad data\r\n let remainder = offset % 4;\r\n\r\n if (remainder) {\r\n offset = Math.max(0, offset - remainder);\r\n }\r\n\r\n return new Float32Array(data.buffer, offset, count);\r\n }\r\n }\r\n\r\n if (forceCopy) {\r\n return SliceTools.Slice(data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer.getBuffer();\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the offset as a multiple of the type byte length.\r\n * @returns the offset in bytes\r\n * @deprecated Please use byteOffset instead.\r\n */\r\n public getOffset(): number {\r\n return this.byteOffset / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the number of components or the byte size per vertex attribute\r\n * @param sizeInBytes If true, returns the size in bytes or else the size in number of components of the vertex attribute (default: false)\r\n * @returns the number of components\r\n */\r\n public getSize(sizeInBytes = false): number {\r\n return sizeInBytes ? this._size * VertexBuffer.GetTypeByteLength(this.type) : this._size;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating is the internal buffer of the VertexBuffer is instanced\r\n * @returns true if this buffer is instanced\r\n */\r\n public getIsInstanced(): boolean {\r\n return this._instanced;\r\n }\r\n\r\n /**\r\n * Returns the instancing divisor, zero for non-instanced (integer).\r\n * @returns a number\r\n */\r\n public getInstanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. If the buffer was already used it will be either recreated or updated depending on isUpdatable property\r\n * @param data defines the data to store\r\n */\r\n public create(data?: DataArray): void {\r\n this._buffer.create(data);\r\n }\r\n\r\n /**\r\n * Updates the underlying buffer according to the passed numeric array or Float32Array.\r\n * This function will create a new buffer if the current one is not updatable\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this._buffer.update(data);\r\n }\r\n\r\n /**\r\n * Updates directly the underlying WebGLBuffer according to the passed numeric array or Float32Array.\r\n * Returns the directly updated WebGLBuffer.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, useBytes: boolean = false): void {\r\n this._buffer.updateDirectly(data, offset, undefined, useBytes);\r\n }\r\n\r\n /**\r\n * Disposes the VertexBuffer and the underlying WebGLBuffer.\r\n */\r\n public dispose(): void {\r\n if (this._ownsBuffer) {\r\n this._buffer.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of this vertex buffer as numbers.\r\n * @param count the number of values to enumerate\r\n * @param callback the callback function called for each value\r\n */\r\n public forEach(count: number, callback: (value: number, index: number) => void): void {\r\n VertexBuffer.ForEach(this._buffer.getData()!, this.byteOffset, this.byteStride, this._size, this.type, count, this.normalized, callback);\r\n }\r\n\r\n // Enums\r\n /**\r\n * Positions\r\n */\r\n public static readonly PositionKind = \"position\";\r\n /**\r\n * Normals\r\n */\r\n public static readonly NormalKind = \"normal\";\r\n /**\r\n * Tangents\r\n */\r\n public static readonly TangentKind = \"tangent\";\r\n /**\r\n * Texture coordinates\r\n */\r\n public static readonly UVKind = \"uv\";\r\n /**\r\n * Texture coordinates 2\r\n */\r\n public static readonly UV2Kind = \"uv2\";\r\n /**\r\n * Texture coordinates 3\r\n */\r\n public static readonly UV3Kind = \"uv3\";\r\n /**\r\n * Texture coordinates 4\r\n */\r\n public static readonly UV4Kind = \"uv4\";\r\n /**\r\n * Texture coordinates 5\r\n */\r\n public static readonly UV5Kind = \"uv5\";\r\n /**\r\n * Texture coordinates 6\r\n */\r\n public static readonly UV6Kind = \"uv6\";\r\n /**\r\n * Colors\r\n */\r\n public static readonly ColorKind = \"color\";\r\n /**\r\n * Matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesKind = \"matricesIndices\";\r\n /**\r\n * Matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsKind = \"matricesWeights\";\r\n /**\r\n * Additional matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesExtraKind = \"matricesIndicesExtra\";\r\n /**\r\n * Additional matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsExtraKind = \"matricesWeightsExtra\";\r\n\r\n /**\r\n * Deduces the stride given a kind.\r\n * @param kind The kind string to deduce\r\n * @returns The deduced stride\r\n */\r\n public static DeduceStride(kind: string): number {\r\n switch (kind) {\r\n case VertexBuffer.UVKind:\r\n case VertexBuffer.UV2Kind:\r\n case VertexBuffer.UV3Kind:\r\n case VertexBuffer.UV4Kind:\r\n case VertexBuffer.UV5Kind:\r\n case VertexBuffer.UV6Kind:\r\n return 2;\r\n case VertexBuffer.NormalKind:\r\n case VertexBuffer.PositionKind:\r\n return 3;\r\n case VertexBuffer.ColorKind:\r\n case VertexBuffer.MatricesIndicesKind:\r\n case VertexBuffer.MatricesIndicesExtraKind:\r\n case VertexBuffer.MatricesWeightsKind:\r\n case VertexBuffer.MatricesWeightsExtraKind:\r\n case VertexBuffer.TangentKind:\r\n return 4;\r\n default:\r\n throw new Error(\"Invalid kind '\" + kind + \"'\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the byte length of the given type.\r\n * @param type the type\r\n * @returns the number of bytes\r\n */\r\n public static GetTypeByteLength(type: number): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE:\r\n case VertexBuffer.UNSIGNED_BYTE:\r\n return 1;\r\n case VertexBuffer.SHORT:\r\n case VertexBuffer.UNSIGNED_SHORT:\r\n return 2;\r\n case VertexBuffer.INT:\r\n case VertexBuffer.UNSIGNED_INT:\r\n case VertexBuffer.FLOAT:\r\n return 4;\r\n default:\r\n throw new Error(`Invalid type '${type}'`);\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of the given parameters as numbers.\r\n * @param data the data to enumerate\r\n * @param byteOffset the byte offset of the data\r\n * @param byteStride the byte stride of the data\r\n * @param componentCount the number of components per element\r\n * @param componentType the type of the component\r\n * @param count the number of values to enumerate\r\n * @param normalized whether the data is normalized\r\n * @param callback the callback function called for each value\r\n */\r\n public static ForEach(data: DataArray, byteOffset: number, byteStride: number, componentCount: number, componentType: number, count: number, normalized: boolean, callback: (value: number, index: number) => void): void {\r\n if (data instanceof Array) {\r\n let offset = byteOffset / 4;\r\n const stride = byteStride / 4;\r\n for (let index = 0; index < count; index += componentCount) {\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n callback(data[offset + componentIndex], index + componentIndex);\r\n }\r\n offset += stride;\r\n }\r\n }\r\n else {\r\n const dataView = data instanceof ArrayBuffer ? new DataView(data) : new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n const componentByteLength = VertexBuffer.GetTypeByteLength(componentType);\r\n for (let index = 0; index < count; index += componentCount) {\r\n let componentByteOffset = byteOffset;\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n const value = VertexBuffer._GetFloatValue(dataView, componentType, componentByteOffset, normalized);\r\n callback(value, index + componentIndex);\r\n componentByteOffset += componentByteLength;\r\n }\r\n byteOffset += byteStride;\r\n }\r\n }\r\n }\r\n\r\n private static _GetFloatValue(dataView: DataView, type: number, byteOffset: number, normalized: boolean): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE: {\r\n let value = dataView.getInt8(byteOffset);\r\n if (normalized) {\r\n value = Math.max(value / 127, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_BYTE: {\r\n let value = dataView.getUint8(byteOffset);\r\n if (normalized) {\r\n value = value / 255;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.SHORT: {\r\n let value = dataView.getInt16(byteOffset, true);\r\n if (normalized) {\r\n value = Math.max(value / 32767, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_SHORT: {\r\n let value = dataView.getUint16(byteOffset, true);\r\n if (normalized) {\r\n value = value / 65535;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.INT: {\r\n return dataView.getInt32(byteOffset, true);\r\n }\r\n case VertexBuffer.UNSIGNED_INT: {\r\n return dataView.getUint32(byteOffset, true);\r\n }\r\n case VertexBuffer.FLOAT: {\r\n return dataView.getFloat32(byteOffset, true);\r\n }\r\n default: {\r\n throw new Error(`Invalid component type ${type}`);\r\n }\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../sourceES6/core/Buffers/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable, DataArray, FloatArray } from \"../types\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { DataBuffer } from \"./dataBuffer\";\r\nimport { SliceTools } from \"../Misc/sliceTools\";\r\n\r\n/**\r\n * Class used to store data that will be store in GPU memory\r\n */\r\nexport class Buffer {\r\n private _engine: ThinEngine;\r\n private _buffer: Nullable<DataBuffer>;\r\n /** @hidden */\r\n public _data: Nullable<DataArray>;\r\n private _updatable: boolean;\r\n private _instanced: boolean;\r\n private _divisor: number;\r\n private _isAlreadyOwned = false;\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this buffer\r\n * @param updatable whether the data is updatable\r\n * @param stride the stride (optional)\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param useBytes set to true if the stride in in bytes (optional)\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n */\r\n constructor(engine: any, data: DataArray | DataBuffer, updatable: boolean, stride = 0, postponeInternalCreation = false, instanced = false, useBytes = false, divisor?: number) {\r\n if (engine.getScene) { // old versions of VertexBuffer accepted 'mesh' instead of 'engine'\r\n this._engine = engine.getScene().getEngine();\r\n }\r\n else {\r\n this._engine = engine;\r\n }\r\n\r\n this._updatable = updatable;\r\n this._instanced = instanced;\r\n this._divisor = divisor || 1;\r\n\r\n if (data instanceof DataBuffer) {\r\n this._data = null;\r\n this._buffer = data;\r\n } else {\r\n this._data = data;\r\n this._buffer = null;\r\n }\r\n\r\n this.byteStride = useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT;\r\n\r\n if (!postponeInternalCreation) { // by default\r\n this.create();\r\n }\r\n }\r\n\r\n /**\r\n * Create a new VertexBuffer based on the current buffer\r\n * @param kind defines the vertex buffer kind (position, normal, etc.)\r\n * @param offset defines offset in the buffer (0 by default)\r\n * @param size defines the size in floats of attributes (position is 3 for instance)\r\n * @param stride defines the stride size in floats in the buffer (the offset to apply to reach next value when data is interleaved)\r\n * @param instanced defines if the vertex buffer contains indexed data\r\n * @param useBytes defines if the offset and stride are in bytes *\r\n * @param divisor sets an optional divisor for instances (1 by default)\r\n * @returns the new vertex buffer\r\n */\r\n public createVertexBuffer(kind: string, offset: number, size: number, stride?: number, instanced?: boolean, useBytes = false, divisor?: number): VertexBuffer {\r\n const byteOffset = useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT;\r\n const byteStride = stride ? (useBytes ? stride : stride * Float32Array.BYTES_PER_ELEMENT) : this.byteStride;\r\n\r\n // a lot of these parameters are ignored as they are overridden by the buffer\r\n return new VertexBuffer(this._engine, this, kind, this._updatable, true, byteStride, instanced === undefined ? this._instanced : instanced, byteOffset, size, undefined, undefined, true, this._divisor || divisor);\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the Buffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._updatable;\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer;\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / Float32Array.BYTES_PER_ELEMENT;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. Creates the buffer if not used already.\r\n * If the buffer was already used, it will be updated only if it is updatable, otherwise it will do nothing.\r\n * @param data defines the data to store\r\n */\r\n public create(data: Nullable<DataArray> = null): void {\r\n if (!data && this._buffer) {\r\n return; // nothing to do\r\n }\r\n\r\n data = data || this._data;\r\n\r\n if (!data) {\r\n return;\r\n }\r\n\r\n if (!this._buffer) { // create buffer\r\n if (this._updatable) {\r\n this._buffer = this._engine.createDynamicVertexBuffer(data);\r\n this._data = data;\r\n } else {\r\n this._buffer = this._engine.createVertexBuffer(data);\r\n }\r\n } else if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data);\r\n this._data = data;\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this._buffer = null;\r\n this.create(this._data);\r\n }\r\n\r\n /**\r\n * Update current buffer data\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this.create(data);\r\n }\r\n\r\n /**\r\n * Updates the data directly.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param vertexCount the vertex count (optional)\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, vertexCount?: number, useBytes: boolean = false): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (this._updatable) { // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data, useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT, (vertexCount ? vertexCount * this.byteStride : undefined));\r\n if (offset === 0 && vertexCount === undefined) {\r\n // Keep the data if we easily can\r\n this._data = data;\r\n }\r\n else {\r\n this._data = null;\r\n }\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _increaseReferences() {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n if (!this._isAlreadyOwned) {\r\n this._isAlreadyOwned = true;\r\n return;\r\n }\r\n\r\n this._buffer.references++;\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n if (this._engine._releaseBuffer(this._buffer)) {\r\n this._buffer = null;\r\n this._data = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Specialized buffer used to store vertex data\r\n */\r\nexport class VertexBuffer {\r\n\r\n private static _Counter = 0;\r\n\r\n /** @hidden */\r\n public _buffer: Buffer;\r\n /** @hidden */\r\n public _validOffsetRange: boolean; // used internally by the engine\r\n private _kind: string;\r\n private _size: number;\r\n private _ownsBuffer: boolean;\r\n private _instanced: boolean;\r\n private _instanceDivisor: number;\r\n\r\n /**\r\n * The byte type.\r\n */\r\n public static readonly BYTE = 5120;\r\n\r\n /**\r\n * The unsigned byte type.\r\n */\r\n public static readonly UNSIGNED_BYTE = 5121;\r\n\r\n /**\r\n * The short type.\r\n */\r\n public static readonly SHORT = 5122;\r\n\r\n /**\r\n * The unsigned short type.\r\n */\r\n public static readonly UNSIGNED_SHORT = 5123;\r\n\r\n /**\r\n * The integer type.\r\n */\r\n public static readonly INT = 5124;\r\n\r\n /**\r\n * The unsigned integer type.\r\n */\r\n public static readonly UNSIGNED_INT = 5125;\r\n\r\n /**\r\n * The float type.\r\n */\r\n public static readonly FLOAT = 5126;\r\n\r\n /**\r\n * Gets or sets the instance divisor when in instanced mode\r\n */\r\n public get instanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n public set instanceDivisor(value: number) {\r\n this._instanceDivisor = value;\r\n if (value == 0) {\r\n this._instanced = false;\r\n } else {\r\n this._instanced = true;\r\n }\r\n this._computeHashCode();\r\n }\r\n\r\n /**\r\n * Gets the byte stride.\r\n */\r\n public readonly byteStride: number;\r\n\r\n /**\r\n * Gets the byte offset.\r\n */\r\n public readonly byteOffset: number;\r\n\r\n /**\r\n * Gets whether integer data values should be normalized into a certain range when being casted to a float.\r\n */\r\n public readonly normalized: boolean;\r\n\r\n /**\r\n * Gets the data type of each component in the array.\r\n */\r\n public readonly type: number;\r\n\r\n /**\r\n * Gets the unique id of this vertex buffer\r\n */\r\n public readonly uniqueId: number;\r\n\r\n /**\r\n * Gets a hash code representing the format (type, normalized, size, instanced, stride) of this buffer\r\n * All buffers with the same format will have the same hash code\r\n */\r\n public readonly hashCode: number;\r\n\r\n /**\r\n * Constructor\r\n * @param engine the engine\r\n * @param data the data to use for this vertex buffer\r\n * @param kind the vertex buffer kind\r\n * @param updatable whether the data is updatable\r\n * @param postponeInternalCreation whether to postpone creating the internal WebGL buffer (optional)\r\n * @param stride the stride (optional)\r\n * @param instanced whether the buffer is instanced (optional)\r\n * @param offset the offset of the data (optional)\r\n * @param size the number of components (optional)\r\n * @param type the type of the component (optional)\r\n * @param normalized whether the data contains normalized data (optional)\r\n * @param useBytes set to true if stride and offset are in bytes (optional)\r\n * @param divisor defines the instance divisor to use (1 by default)\r\n * @param takeBufferOwnership defines if the buffer should be released when the vertex buffer is disposed\r\n */\r\n constructor(engine: any, data: DataArray | Buffer | DataBuffer, kind: string, updatable: boolean, postponeInternalCreation?: boolean, stride?: number,\r\n instanced?: boolean, offset?: number, size?: number, type?: number, normalized = false, useBytes = false, divisor = 1, takeBufferOwnership = false) {\r\n if (data instanceof Buffer) {\r\n this._buffer = data;\r\n this._ownsBuffer = takeBufferOwnership;\r\n\r\n } else {\r\n this._buffer = new Buffer(engine, data, updatable, stride, postponeInternalCreation, instanced, useBytes);\r\n this._ownsBuffer = true;\r\n }\r\n\r\n this.uniqueId = VertexBuffer._Counter++;\r\n this._kind = kind;\r\n\r\n if (type == undefined) {\r\n const data = this.getData();\r\n this.type = VertexBuffer.FLOAT;\r\n if (data instanceof Int8Array) { this.type = VertexBuffer.BYTE; }\r\n else if (data instanceof Uint8Array) { this.type = VertexBuffer.UNSIGNED_BYTE; }\r\n else if (data instanceof Int16Array) { this.type = VertexBuffer.SHORT; }\r\n else if (data instanceof Uint16Array) { this.type = VertexBuffer.UNSIGNED_SHORT; }\r\n else if (data instanceof Int32Array) { this.type = VertexBuffer.INT; }\r\n else if (data instanceof Uint32Array) { this.type = VertexBuffer.UNSIGNED_INT; }\r\n }\r\n else {\r\n this.type = type;\r\n }\r\n\r\n const typeByteLength = VertexBuffer.GetTypeByteLength(this.type);\r\n\r\n if (useBytes) {\r\n this._size = size || (stride ? (stride / typeByteLength) : VertexBuffer.DeduceStride(kind));\r\n this.byteStride = stride || this._buffer.byteStride || (this._size * typeByteLength);\r\n this.byteOffset = offset || 0;\r\n }\r\n else {\r\n this._size = size || stride || VertexBuffer.DeduceStride(kind);\r\n this.byteStride = stride ? (stride * typeByteLength) : (this._buffer.byteStride || (this._size * typeByteLength));\r\n this.byteOffset = (offset || 0) * typeByteLength;\r\n }\r\n\r\n this.normalized = normalized;\r\n\r\n this._instanced = instanced !== undefined ? instanced : false;\r\n this._instanceDivisor = instanced ? divisor : 0;\r\n\r\n this._computeHashCode();\r\n }\r\n\r\n private _computeHashCode(): void {\r\n // note: cast to any because the property is declared readonly\r\n (this.hashCode as any) =\r\n (((this.type - 5120) << 0) +\r\n ((this.normalized ? 1 : 0) << 3) +\r\n (this._size << 4) +\r\n ((this._instanced ? 1 : 0) << 6) +\r\n /* keep 5 bits free */\r\n (this.byteStride << 12));\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n if (!this._buffer) {\r\n return;\r\n }\r\n\r\n this._buffer._rebuild();\r\n }\r\n\r\n /**\r\n * Returns the kind of the VertexBuffer (string)\r\n * @returns a string\r\n */\r\n public getKind(): string {\r\n return this._kind;\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets a boolean indicating if the VertexBuffer is updatable?\r\n * @returns true if the buffer is updatable\r\n */\r\n public isUpdatable(): boolean {\r\n return this._buffer.isUpdatable();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data\r\n * @returns a DataArray or null\r\n */\r\n public getData(): Nullable<DataArray> {\r\n return this._buffer.getData();\r\n }\r\n\r\n /**\r\n * Gets current buffer's data as a float array. Float data is constructed if the vertex buffer data cannot be returned directly.\r\n * @param totalVertices number of vertices in the buffer to take into account\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 getFloatData(totalVertices: number, forceCopy?: boolean): Nullable<FloatArray> {\r\n let data = this.getData();\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n const tightlyPackedByteStride = this.getSize() * VertexBuffer.GetTypeByteLength(this.type);\r\n const count = totalVertices * this.getSize();\r\n\r\n if (this.type !== VertexBuffer.FLOAT || this.byteStride !== tightlyPackedByteStride) {\r\n const copy = new Float32Array(count);\r\n this.forEach(count, (value, index) => copy[index] = value);\r\n return copy;\r\n }\r\n\r\n if (!(data instanceof Array || data instanceof Float32Array) || this.byteOffset !== 0 || data.length !== count) {\r\n if (data instanceof Array) {\r\n const offset = this.byteOffset / 4;\r\n return SliceTools.Slice(data, offset, offset + count);\r\n } else if (data instanceof ArrayBuffer) {\r\n return new Float32Array(data, this.byteOffset, count);\r\n } else {\r\n let offset = data.byteOffset + this.byteOffset;\r\n if (forceCopy) {\r\n let result = new Float32Array(count);\r\n let source = new Float32Array(data.buffer, offset, count);\r\n\r\n result.set(source);\r\n\r\n return result;\r\n }\r\n\r\n // Protect against bad data\r\n let remainder = offset % 4;\r\n\r\n if (remainder) {\r\n offset = Math.max(0, offset - remainder);\r\n }\r\n\r\n return new Float32Array(data.buffer, offset, count);\r\n }\r\n }\r\n\r\n if (forceCopy) {\r\n return SliceTools.Slice(data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Gets underlying native buffer\r\n * @returns underlying native buffer\r\n */\r\n public getBuffer(): Nullable<DataBuffer> {\r\n return this._buffer.getBuffer();\r\n }\r\n\r\n /**\r\n * Gets the stride in float32 units (i.e. byte stride / 4).\r\n * May not be an integer if the byte stride is not divisible by 4.\r\n * @returns the stride in float32 units\r\n * @deprecated Please use byteStride instead.\r\n */\r\n public getStrideSize(): number {\r\n return this.byteStride / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the offset as a multiple of the type byte length.\r\n * @returns the offset in bytes\r\n * @deprecated Please use byteOffset instead.\r\n */\r\n public getOffset(): number {\r\n return this.byteOffset / VertexBuffer.GetTypeByteLength(this.type);\r\n }\r\n\r\n /**\r\n * Returns the number of components or the byte size per vertex attribute\r\n * @param sizeInBytes If true, returns the size in bytes or else the size in number of components of the vertex attribute (default: false)\r\n * @returns the number of components\r\n */\r\n public getSize(sizeInBytes = false): number {\r\n return sizeInBytes ? this._size * VertexBuffer.GetTypeByteLength(this.type) : this._size;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating is the internal buffer of the VertexBuffer is instanced\r\n * @returns true if this buffer is instanced\r\n */\r\n public getIsInstanced(): boolean {\r\n return this._instanced;\r\n }\r\n\r\n /**\r\n * Returns the instancing divisor, zero for non-instanced (integer).\r\n * @returns a number\r\n */\r\n public getInstanceDivisor(): number {\r\n return this._instanceDivisor;\r\n }\r\n\r\n // Methods\r\n\r\n /**\r\n * Store data into the buffer. If the buffer was already used it will be either recreated or updated depending on isUpdatable property\r\n * @param data defines the data to store\r\n */\r\n public create(data?: DataArray): void {\r\n this._buffer.create(data);\r\n }\r\n\r\n /**\r\n * Updates the underlying buffer according to the passed numeric array or Float32Array.\r\n * This function will create a new buffer if the current one is not updatable\r\n * @param data defines the data to store\r\n */\r\n public update(data: DataArray): void {\r\n this._buffer.update(data);\r\n }\r\n\r\n /**\r\n * Updates directly the underlying WebGLBuffer according to the passed numeric array or Float32Array.\r\n * Returns the directly updated WebGLBuffer.\r\n * @param data the new data\r\n * @param offset the new offset\r\n * @param useBytes set to true if the offset is in bytes\r\n */\r\n public updateDirectly(data: DataArray, offset: number, useBytes: boolean = false): void {\r\n this._buffer.updateDirectly(data, offset, undefined, useBytes);\r\n }\r\n\r\n /**\r\n * Disposes the VertexBuffer and the underlying WebGLBuffer.\r\n */\r\n public dispose(): void {\r\n if (this._ownsBuffer) {\r\n this._buffer.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of this vertex buffer as numbers.\r\n * @param count the number of values to enumerate\r\n * @param callback the callback function called for each value\r\n */\r\n public forEach(count: number, callback: (value: number, index: number) => void): void {\r\n VertexBuffer.ForEach(this._buffer.getData()!, this.byteOffset, this.byteStride, this._size, this.type, count, this.normalized, callback);\r\n }\r\n\r\n // Enums\r\n /**\r\n * Positions\r\n */\r\n public static readonly PositionKind = \"position\";\r\n /**\r\n * Normals\r\n */\r\n public static readonly NormalKind = \"normal\";\r\n /**\r\n * Tangents\r\n */\r\n public static readonly TangentKind = \"tangent\";\r\n /**\r\n * Texture coordinates\r\n */\r\n public static readonly UVKind = \"uv\";\r\n /**\r\n * Texture coordinates 2\r\n */\r\n public static readonly UV2Kind = \"uv2\";\r\n /**\r\n * Texture coordinates 3\r\n */\r\n public static readonly UV3Kind = \"uv3\";\r\n /**\r\n * Texture coordinates 4\r\n */\r\n public static readonly UV4Kind = \"uv4\";\r\n /**\r\n * Texture coordinates 5\r\n */\r\n public static readonly UV5Kind = \"uv5\";\r\n /**\r\n * Texture coordinates 6\r\n */\r\n public static readonly UV6Kind = \"uv6\";\r\n /**\r\n * Colors\r\n */\r\n public static readonly ColorKind = \"color\";\r\n /**\r\n * Instance Colors\r\n */\r\n public static readonly ColorInstanceKind = \"instanceColor\";\r\n /**\r\n * Matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesKind = \"matricesIndices\";\r\n /**\r\n * Matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsKind = \"matricesWeights\";\r\n /**\r\n * Additional matrix indices (for bones)\r\n */\r\n public static readonly MatricesIndicesExtraKind = \"matricesIndicesExtra\";\r\n /**\r\n * Additional matrix weights (for bones)\r\n */\r\n public static readonly MatricesWeightsExtraKind = \"matricesWeightsExtra\";\r\n\r\n /**\r\n * Deduces the stride given a kind.\r\n * @param kind The kind string to deduce\r\n * @returns The deduced stride\r\n */\r\n public static DeduceStride(kind: string): number {\r\n switch (kind) {\r\n case VertexBuffer.UVKind:\r\n case VertexBuffer.UV2Kind:\r\n case VertexBuffer.UV3Kind:\r\n case VertexBuffer.UV4Kind:\r\n case VertexBuffer.UV5Kind:\r\n case VertexBuffer.UV6Kind:\r\n return 2;\r\n case VertexBuffer.NormalKind:\r\n case VertexBuffer.PositionKind:\r\n return 3;\r\n case VertexBuffer.ColorKind:\r\n case VertexBuffer.MatricesIndicesKind:\r\n case VertexBuffer.MatricesIndicesExtraKind:\r\n case VertexBuffer.MatricesWeightsKind:\r\n case VertexBuffer.MatricesWeightsExtraKind:\r\n case VertexBuffer.TangentKind:\r\n return 4;\r\n default:\r\n throw new Error(\"Invalid kind '\" + kind + \"'\");\r\n }\r\n }\r\n\r\n /**\r\n * Gets the byte length of the given type.\r\n * @param type the type\r\n * @returns the number of bytes\r\n */\r\n public static GetTypeByteLength(type: number): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE:\r\n case VertexBuffer.UNSIGNED_BYTE:\r\n return 1;\r\n case VertexBuffer.SHORT:\r\n case VertexBuffer.UNSIGNED_SHORT:\r\n return 2;\r\n case VertexBuffer.INT:\r\n case VertexBuffer.UNSIGNED_INT:\r\n case VertexBuffer.FLOAT:\r\n return 4;\r\n default:\r\n throw new Error(`Invalid type '${type}'`);\r\n }\r\n }\r\n\r\n /**\r\n * Enumerates each value of the given parameters as numbers.\r\n * @param data the data to enumerate\r\n * @param byteOffset the byte offset of the data\r\n * @param byteStride the byte stride of the data\r\n * @param componentCount the number of components per element\r\n * @param componentType the type of the component\r\n * @param count the number of values to enumerate\r\n * @param normalized whether the data is normalized\r\n * @param callback the callback function called for each value\r\n */\r\n public static ForEach(data: DataArray, byteOffset: number, byteStride: number, componentCount: number, componentType: number, count: number, normalized: boolean, callback: (value: number, index: number) => void): void {\r\n if (data instanceof Array) {\r\n let offset = byteOffset / 4;\r\n const stride = byteStride / 4;\r\n for (let index = 0; index < count; index += componentCount) {\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n callback(data[offset + componentIndex], index + componentIndex);\r\n }\r\n offset += stride;\r\n }\r\n }\r\n else {\r\n const dataView = data instanceof ArrayBuffer ? new DataView(data) : new DataView(data.buffer, data.byteOffset, data.byteLength);\r\n const componentByteLength = VertexBuffer.GetTypeByteLength(componentType);\r\n for (let index = 0; index < count; index += componentCount) {\r\n let componentByteOffset = byteOffset;\r\n for (let componentIndex = 0; componentIndex < componentCount; componentIndex++) {\r\n const value = VertexBuffer._GetFloatValue(dataView, componentType, componentByteOffset, normalized);\r\n callback(value, index + componentIndex);\r\n componentByteOffset += componentByteLength;\r\n }\r\n byteOffset += byteStride;\r\n }\r\n }\r\n }\r\n\r\n private static _GetFloatValue(dataView: DataView, type: number, byteOffset: number, normalized: boolean): number {\r\n switch (type) {\r\n case VertexBuffer.BYTE: {\r\n let value = dataView.getInt8(byteOffset);\r\n if (normalized) {\r\n value = Math.max(value / 127, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_BYTE: {\r\n let value = dataView.getUint8(byteOffset);\r\n if (normalized) {\r\n value = value / 255;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.SHORT: {\r\n let value = dataView.getInt16(byteOffset, true);\r\n if (normalized) {\r\n value = Math.max(value / 32767, -1);\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.UNSIGNED_SHORT: {\r\n let value = dataView.getUint16(byteOffset, true);\r\n if (normalized) {\r\n value = value / 65535;\r\n }\r\n return value;\r\n }\r\n case VertexBuffer.INT: {\r\n return dataView.getInt32(byteOffset, true);\r\n }\r\n case VertexBuffer.UNSIGNED_INT: {\r\n return dataView.getUint32(byteOffset, true);\r\n }\r\n case VertexBuffer.FLOAT: {\r\n return dataView.getFloat32(byteOffset, true);\r\n }\r\n default: {\r\n throw new Error(`Invalid component type ${type}`);\r\n }\r\n }\r\n }\r\n}"]}
@@ -39,6 +39,7 @@ export declare class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
39
39
  */
40
40
  _allowCameraRotation: boolean;
41
41
  private _currentActiveButton;
42
+ private _contextMenuBind;
42
43
  /**
43
44
  * Manage the mouse inputs to control the movement of a free camera.
44
45
  * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs
@@ -152,7 +152,10 @@ var FreeCameraMouseInput = /** @class */ (function () {
152
152
  }
153
153
  };
154
154
  this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);
155
- element && element.addEventListener("contextmenu", this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native
155
+ if (element) {
156
+ this._contextMenuBind = this.onContextMenu.bind(this);
157
+ element.addEventListener("contextmenu", this._contextMenuBind, false); // TODO: We need to figure out how to handle this for Native
158
+ }
156
159
  };
157
160
  /**
158
161
  * Called on JS contextmenu event.
@@ -168,10 +171,10 @@ var FreeCameraMouseInput = /** @class */ (function () {
168
171
  FreeCameraMouseInput.prototype.detachControl = function (ignored) {
169
172
  if (this._observer) {
170
173
  this.camera.getScene().onPointerObservable.remove(this._observer);
171
- if (this.onContextMenu) {
174
+ if (this._contextMenuBind) {
172
175
  var engine = this.camera.getEngine();
173
176
  var element = engine.getInputElement();
174
- element && element.removeEventListener("contextmenu", this.onContextMenu);
177
+ element && element.removeEventListener("contextmenu", this._contextMenuBind);
175
178
  }
176
179
  if (this.onPointerMovedObservable) {
177
180
  this.onPointerMovedObservable.clear();