@babylonjs/core 5.45.2 → 5.46.0
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.
- package/Actions/condition.js +23 -23
- package/Actions/condition.js.map +1 -1
- package/Animations/animatable.js +48 -48
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +53 -53
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +53 -53
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +36 -36
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +14 -14
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +14 -14
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +47 -47
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +11 -11
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +34 -34
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.js +15 -15
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.js +9 -9
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.js +50 -50
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.js +35 -35
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.js +14 -14
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/dataBuffer.js +6 -6
- package/Buffers/dataBuffer.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +42 -42
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +18 -18
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +178 -178
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js +176 -176
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +90 -90
- package/Cameras/camera.js.map +1 -1
- package/Cameras/flyCamera.js +82 -82
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/freeCamera.js +54 -54
- package/Cameras/freeCamera.js.map +1 -1
- package/Compute/computeShader.js +12 -12
- package/Compute/computeShader.js.map +1 -1
- package/Culling/ray.d.ts +1 -1
- package/Debug/axesViewer.js +12 -12
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/debugLayer.js +21 -21
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +20 -20
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.js +10 -10
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +81 -81
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +31 -31
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +2 -2
- package/Engines/Extensions/engine.computeShader.d.ts +3 -3
- package/Engines/Extensions/engine.multiRender.js +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Native/nativeDataStream.d.ts +1 -1
- package/Engines/Native/nativeHardwareTexture.js +3 -3
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +5 -5
- package/Engines/Native/nativePipelineContext.js +7 -7
- package/Engines/Native/nativePipelineContext.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.js +6 -6
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +4 -4
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +3 -3
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +3 -3
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -6
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +5 -5
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +11 -11
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +7 -7
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +4 -4
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +7 -7
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +9 -9
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +5 -5
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +10 -10
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +6 -6
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +3 -3
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +3 -3
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +3 -3
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/engine.js +134 -134
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +6 -6
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +25 -25
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +25 -25
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +243 -243
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +132 -132
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.js +10 -10
- package/Events/keyboardEvents.js.map +1 -1
- package/Events/pointerEvents.js +9 -9
- package/Events/pointerEvents.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.js +9 -9
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/webVRController.js +13 -13
- package/Gamepads/Controllers/webVRController.js.map +1 -1
- package/Gamepads/gamepad.js +20 -20
- package/Gamepads/gamepad.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +45 -45
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +12 -12
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +74 -74
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +34 -34
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +40 -40
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +23 -23
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +12 -12
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.js +40 -40
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +47 -47
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.js +41 -41
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +18 -18
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/textureDome.js +96 -96
- package/Helpers/textureDome.js.map +1 -1
- package/IAccessibilityTag.d.ts +2 -2
- package/Instrumentation/engineInstrumentation.js +21 -21
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +90 -90
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.js +48 -48
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +32 -32
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +26 -26
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +40 -40
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlare.js +15 -15
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +4 -4
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +18 -18
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +115 -115
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.js +31 -31
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/light.js +72 -72
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js +18 -18
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +30 -30
- package/Lights/spotLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.js +124 -124
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +8 -8
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +14 -14
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +9 -9
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +26 -26
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +34 -34
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +14 -14
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +16 -16
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +7 -7
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js +13 -13
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +30 -30
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +60 -60
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +35 -35
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +50 -50
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +5 -5
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +4 -4
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +52 -52
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js +17 -17
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +5 -5
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +209 -209
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +5 -5
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js +6 -6
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +51 -51
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.js +99 -99
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +61 -61
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/externalTexture.js +16 -16
- package/Materials/Textures/externalTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +44 -44
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +31 -31
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +73 -73
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +47 -47
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.js +6 -6
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +142 -142
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +1 -1
- package/Materials/Textures/texture.js +26 -26
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +1 -1
- package/Materials/Textures/textureSampler.js +20 -20
- package/Materials/Textures/textureSampler.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +6 -6
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +39 -39
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +40 -40
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.js +6 -6
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +9 -9
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +2 -2
- package/Materials/fresnelParameters.js +13 -13
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +5 -5
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +223 -223
- package/Materials/material.js.map +1 -1
- package/Materials/materialPluginBase.js +5 -5
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +14 -14
- package/Materials/materialPluginManager.d.ts +1 -1
- package/Materials/multiMaterial.js +16 -16
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +14 -14
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +100 -100
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js +3 -3
- package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
- package/Maths/math.functions.js +2 -0
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.path.js +11 -11
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +6 -7
- package/Maths/math.vector.js +48 -48
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +2 -2
- package/Meshes/Compression/dracoCompression.js +23 -23
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +9 -9
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/abstractMesh.js +179 -179
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +32 -32
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/goldbergMesh.d.ts +1 -1
- package/Meshes/linesMesh.js +3 -3
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +165 -165
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/polygonMesh.js +5 -5
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/subMesh.js +59 -59
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/transformNode.js +52 -52
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +12 -12
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +3 -3
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/coroutine.d.ts +5 -5
- package/Misc/deferred.js +9 -9
- package/Misc/deferred.js.map +1 -1
- package/Misc/depthReducer.js +7 -7
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +1 -1
- package/Misc/error.d.ts +1 -1
- package/Misc/fileTools.d.ts +5 -5
- package/Misc/filesInput.js +6 -6
- package/Misc/filesInput.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +9 -9
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/observable.js +12 -12
- package/Misc/observable.js.map +1 -1
- package/Misc/perfCounter.js +16 -16
- package/Misc/perfCounter.js.map +1 -1
- package/Misc/sceneOptimizer.js +76 -76
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/stringDictionary.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +67 -67
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +15 -15
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +12 -12
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +28 -28
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.js +18 -18
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/database.js +12 -12
- package/Offline/database.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +25 -25
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +20 -20
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.js +232 -232
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/cloudPoint.js +9 -9
- package/Particles/cloudPoint.js.map +1 -1
- package/Particles/gpuParticleSystem.js +123 -123
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +102 -102
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +18 -18
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.js +23 -23
- package/Particles/solidParticle.js.map +1 -1
- package/Physics/v1/physicsEngine.js +14 -14
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v1/physicsImpostor.js +149 -149
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/physicsEngine.js +14 -14
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +129 -129
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +68 -68
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +6 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +226 -225
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +10 -10
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.js +7 -7
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js +7 -7
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomEffect.js +28 -28
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +7 -7
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js +32 -32
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.js +7 -7
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js +7 -7
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +7 -7
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js +7 -7
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +7 -7
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.js +36 -36
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +7 -7
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +7 -7
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.js +7 -7
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js +7 -7
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +42 -42
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js +41 -41
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.js +15 -15
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +2 -2
- package/PostProcesses/postProcess.js +123 -123
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/refractionPostProcess.js +21 -21
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +7 -7
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +19 -19
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js +7 -7
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.js +14 -14
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.js +7 -7
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +11 -11
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +7 -7
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +36 -36
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +8 -8
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +34 -34
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +8 -8
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +19 -19
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +12 -12
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +18 -18
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +68 -68
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +29 -29
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +44 -44
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +51 -51
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +25 -25
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.js +21 -21
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js +18 -18
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +76 -76
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Sprites/sprite.js +16 -16
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.js +81 -81
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteMap.js +32 -32
- package/Sprites/spriteMap.js.map +1 -1
- package/Sprites/spriteRenderer.js +6 -6
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.js +22 -22
- package/Sprites/thinSprite.js.map +1 -1
- package/States/stencilStateComposer.js +10 -10
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +7 -7
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.d.ts +3 -3
- package/XR/features/WebXRControllerMovement.js +97 -97
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +24 -24
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js +26 -26
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.d.ts +1 -1
- package/XR/features/WebXRFeaturePointSystem.js +6 -6
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -1
- package/XR/features/WebXRHandTracking.js +95 -95
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +21 -21
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +3 -3
- package/XR/motionController/webXRMotionControllerManager.d.ts +1 -1
- package/XR/native/nativeXRFrame.js +3 -3
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +1 -1
- package/XR/webXRLayerWrapper.d.ts +2 -2
- package/XR/webXRLayerWrapper.js +17 -17
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/abstractScene.d.ts +2 -2
- package/node.d.ts +1 -1
- package/node.js +71 -71
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +777 -777
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +12 -12
- package/types.d.ts +11 -11
package/Bones/skeleton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../../lts/core/generated/Bones/skeleton.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport type { Animatable } from \"../Animations/animatable\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { Animation } from \"../Animations/animation\";\r\nimport { AnimationRange } from \"../Animations/animationRange\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { DeepCopier } from \"../Misc/deepCopier\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\n\r\n/**\r\n * Class used to handle skinning animations\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons\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 _absoluteTransformIsDirty = true;\r\n\r\n private _canUseTextureForBones = false;\r\n private _uniqueId = 0;\r\n\r\n /** @internal */\r\n public _numBonesWithLinkedTransformNode = 0;\r\n\r\n /** @internal */\r\n public _hasWaitingData: Nullable<boolean> = null;\r\n\r\n /** @internal */\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/toolsAndResources/inspector#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,\r\n scene: Scene\r\n ) {\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 * @returns 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) {\r\n if (!mesh._bonesTransformMatrices) {\r\n this.prepare();\r\n }\r\n\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 let 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 (const 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 * @returns the indice of the bone. Returns -1 if not found\r\n */\r\n public getBoneIndexByName(name: string): number {\r\n for (let 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 (let 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 (let 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 const animationRanges: Nullable<AnimationRange>[] = [];\r\n let 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 let ret = true;\r\n const 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 const boneDict: { [key: string]: Bone } = {};\r\n const sourceBones = source.bones;\r\n let nBones: number;\r\n let 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 const 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 const boneName = this.bones[i].name;\r\n const 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 const 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 let ret = 0;\r\n for (let i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n const 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 const 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 const 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 const sceneAnimatables = skeleton._scene.getAllAnimatablesByTarget(skeleton);\r\n let rangeAnimatable: Nullable<Animatable> = null;\r\n\r\n for (let index = 0; index < sceneAnimatables.length; index++) {\r\n const 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 const animatables = skeleton.getAnimatables();\r\n\r\n for (let index = 0; index < animatables.length; index++) {\r\n const animatable = animatables[index];\r\n const animations = animatable.animations;\r\n\r\n if (!animations) {\r\n continue;\r\n }\r\n\r\n for (let 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 /** @internal */\r\n public _markAsDirty(): void {\r\n this._isDirty = true;\r\n this._absoluteTransformIsDirty = true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _registerMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n this._meshesWithPoseMatrix.push(mesh);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _unregisterMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n const 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 this.onBeforeComputeObservable.notifyObservers(this);\r\n\r\n for (let index = 0; index < this.bones.length; index++) {\r\n const bone = this.bones[index];\r\n bone._childUpdateId++;\r\n const 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 const 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 const node = bone._linkedTransformNode;\r\n bone.position = node.position;\r\n if (node.rotationQuaternion) {\r\n bone.rotationQuaternion = node.rotationQuaternion;\r\n } else {\r\n bone.rotation = node.rotation;\r\n }\r\n bone.scaling = node.scaling;\r\n }\r\n }\r\n }\r\n\r\n if (this.needInitialSkinMatrix) {\r\n for (const mesh of this._meshesWithPoseMatrix) {\r\n const poseMatrix = mesh.getPoseMatrix();\r\n\r\n let needsUpdate = this._isDirty;\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 needsUpdate = true;\r\n }\r\n\r\n if (!needsUpdate) {\r\n continue;\r\n }\r\n\r\n if (this._synchronizedWithMesh !== mesh) {\r\n this._synchronizedWithMesh = mesh;\r\n\r\n // Prepare bones\r\n for (const bone of this.bones) {\r\n if (!bone.getParent()) {\r\n const 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 if (mesh._transformMatrixTexture) {\r\n mesh._transformMatrixTexture.dispose();\r\n }\r\n\r\n mesh._transformMatrixTexture = RawTexture.CreateRGBATexture(\r\n mesh._bonesTransformMatrices,\r\n (this.bones.length + 1) * 4,\r\n 1,\r\n this._scene,\r\n false,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\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._isDirty) {\r\n return;\r\n }\r\n\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(\r\n this._transformMatrices,\r\n (this.bones.length + 1) * 4,\r\n 1,\r\n this._scene,\r\n false,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\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\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 (let 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 const result = new Skeleton(name, id || name, this._scene);\r\n\r\n result.needInitialSkinMatrix = this.needInitialSkinMatrix;\r\n\r\n for (let index = 0; index < this.bones.length; index++) {\r\n const source = this.bones[index];\r\n let parentBone = null;\r\n\r\n const parent = source.getParent();\r\n if (parent) {\r\n const parentIndex = this.bones.indexOf(parent);\r\n parentBone = result.bones[parentIndex];\r\n }\r\n\r\n const 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 (const rangeName in this._ranges) {\r\n const 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/features/featuresDeepDive/animation/advanced_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.length = 0;\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 const 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 (let index = 0; index < this.bones.length; index++) {\r\n const bone = this.bones[index];\r\n const parent = bone.getParent();\r\n\r\n const 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 (const name in this._ranges) {\r\n const source = this._ranges[name];\r\n\r\n if (!source) {\r\n continue;\r\n }\r\n\r\n const 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 const 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 const parsedBone = parsedSkeleton.bones[index];\r\n const parsedBoneIndex = parsedSkeleton.bones[index].index;\r\n let parentBone = null;\r\n if (parsedBone.parentBoneIndex > -1) {\r\n parentBone = skeleton.bones[parsedBone.parentBoneIndex];\r\n }\r\n\r\n const rest: Nullable<Matrix> = parsedBone.rest ? Matrix.FromArray(parsedBone.rest) : null;\r\n const 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 const 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 if (this._absoluteTransformIsDirty || forceUpdate) {\r\n this.bones[0].computeAbsoluteTransforms();\r\n this._absoluteTransformIsDirty = false;\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 let 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 const bones = new Array<Bone>();\r\n const visited = new Array<boolean>(this.bones.length);\r\n for (let 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 const bone = this.bones[index];\r\n if (!bone) return;\r\n\r\n if (bone._index === undefined) {\r\n bone._index = index;\r\n }\r\n\r\n const 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":["../../../../lts/core/generated/Bones/skeleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKhD;;;GAGG;AACH,MAAM,OAAO,QAAQ;IAkDjB;;;OAGG;IACH,IAAW,6BAA6B;QACpC,OAAO,IAAI,CAAC,8BAA8B,CAAC;IAC/C,CAAC;IAED,IAAW,6BAA6B,CAAC,KAAc;QACnD,IAAI,CAAC,8BAA8B,GAAG,KAAK,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAID;;OAEG;IACH,IAAW,2BAA2B;QAClC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC;SAClD;QACD,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAED,IAAW,2BAA2B,CAAC,KAA4C;QAC/E,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;IAC9C,CAAC;IAeD;;OAEG;IACH,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,sBAAsB,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH;IACI,gCAAgC;IACzB,IAAY;IACnB,8BAA8B;IACvB,EAAU,EACjB,KAAY;QAHL,SAAI,GAAJ,IAAI,CAAQ;QAEZ,OAAE,GAAF,EAAE,CAAQ;QAnHrB;;WAEG;QACI,UAAK,GAAG,IAAI,KAAK,EAAQ,CAAC;QAKjC;;WAEG;QACI,0BAAqB,GAAG,KAAK,CAAC;QAQ7B,aAAQ,GAAG,IAAI,CAAC;QAGhB,0BAAqB,GAAG,IAAI,KAAK,EAAgB,CAAC;QAElD,cAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAG9B,YAAO,GAAiD,EAAE,CAAC;QAE3D,8BAAyB,GAAG,IAAI,CAAC;QAEjC,2BAAsB,GAAG,KAAK,CAAC;QAC/B,cAAS,GAAG,CAAC,CAAC;QAEtB,gBAAgB;QACT,qCAAgC,GAAG,CAAC,CAAC;QAE5C,gBAAgB;QACT,oBAAe,GAAsB,IAAI,CAAC;QAEjD,gBAAgB;QACT,qBAAgB,GAA4B,IAAI,CAAC;QAExD;;WAEG;QACI,mBAAc,GAAG,KAAK,CAAC;QAEtB,mCAA8B,GAAG,IAAI,CAAC;QActC,iCAA4B,GAA0C,IAAI,CAAC;QAsBnF,SAAS;QAET;;WAEG;QACI,8BAAyB,GAAG,IAAI,UAAU,EAAY,CAAC;QA6B1D,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE9B,uEAAuE;QACvE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;QACrD,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,0BAA0B,GAAG,CAAC,CAAC;IACvG,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;OAGG;IACI,WAAW;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,UAAU;IACV;;;;OAIG;IACI,oBAAoB,CAAC,IAAkB;QAC1C,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;YAED,OAAO,IAAI,CAAC,uBAAwB,CAAC;SACxC;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,IAAkB;QAC/C,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC5D,OAAO,IAAI,CAAC,uBAAuB,CAAC;SACvC;QAED,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,UAAU;IAEV;;;;OAIG;IACI,QAAQ,CAAC,WAAqB;QACjC,IAAI,GAAG,GAAG,SAAS,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7D,GAAG,IAAI,uBAAuB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzF,IAAI,WAAW,EAAE;YACb,GAAG,IAAI,aAAa,CAAC;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC7B,IAAI,KAAK,EAAE;oBACP,GAAG,IAAI,IAAI,CAAC;oBACZ,KAAK,GAAG,KAAK,CAAC;iBACjB;gBACD,GAAG,IAAI,IAAI,CAAC;aACf;YACD,GAAG,IAAI,GAAG,CAAC;SACd;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,IAAY;QAClC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,EAAE,EAAE;YAC/E,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;gBACrC,OAAO,SAAS,CAAC;aACpB;SACJ;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,oBAAoB,CAAC,IAAY,EAAE,IAAY,EAAE,EAAU;QAC9D,gCAAgC;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;oBAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;iBAC3D;aACJ;SACJ;IACL,CAAC;IAED;;;;OAIG;IACI,oBAAoB,CAAC,IAAY,EAAE,YAAY,GAAG,IAAI;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;aAC/D;SACJ;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,mDAAmD;IAClF,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACrB,MAAM,eAAe,GAA+B,EAAE,CAAC;QACvD,IAAI,IAAY,CAAC;QACjB,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5C;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACI,kBAAkB,CAAC,MAAgB,EAAE,IAAY,EAAE,iBAAiB,GAAG,KAAK;QAC/E,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACvD,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QAEzD,0GAA0G;QAC1G,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAS,CAAC;QACd,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YACtD,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;SAClD;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;YAC1C,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,KAAK,CAAC,MAAM,2BAA2B,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YAClH,GAAG,GAAG,KAAK,CAAC;SACf;QAED,MAAM,mBAAmB,GAAG,iBAAiB,IAAI,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjK,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,UAAU,EAAE;gBACZ,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;aACxH;iBAAM;gBACH,MAAM,CAAC,IAAI,CAAC,wDAAwD,GAAG,QAAQ,CAAC,CAAC;gBACjF,GAAG,GAAG,KAAK,CAAC;aACf;SACJ;QACD,6FAA6F;QAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;SACnG;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACI,YAAY;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBACpB,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;SACJ;IACL,CAAC;IAEO,yBAAyB;QAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;gBAC9D,IAAI,GAAG,GAAG,OAAO,EAAE;oBACf,GAAG,GAAG,OAAO,CAAC;iBACjB;aACJ;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACI,cAAc,CAAC,IAAY,EAAE,IAAc,EAAE,UAAmB,EAAE,cAA2B;QAChG,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,IAAI,CAAC;SACf;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,qBAAqB,CAAC,QAAkB,EAAE,cAAc,GAAG,CAAC,EAAE,KAAa;QACrF,MAAM,UAAU,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAErD,qDAAqD;QACrD,IAAI,CAAC,UAAU,EAAE;YACb,OAAO,IAAI,CAAC;SACf;QAED,yFAAyF;QACzF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC7E,IAAI,eAAe,GAAyB,IAAI,CAAC;QAEjD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,eAAe,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAEhD,IAAI,eAAe,CAAC,SAAS,MAAK,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAA,IAAI,eAAe,CAAC,OAAO,MAAK,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,EAAE,CAAA,EAAE;gBAC9F,eAAe,GAAG,eAAe,CAAC;gBAClC,MAAM;aACT;SACJ;QAED,yEAAyE;QACzE,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;YAEzC,IAAI,CAAC,UAAU,EAAE;gBACb,SAAS;aACZ;YAED,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;gBAChE,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;aACjF;SACJ;QAED,8CAA8C;QAC9C,IAAI,eAAe,EAAE;YACjB,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC;SACrC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,gBAAgB;IACT,YAAY;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,2BAA2B,CAAC,IAAkB;QACjD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,6BAA6B,CAAC,IAAkB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC/C;IACL,CAAC;IAEO,yBAAyB,CAAC,YAA0B,EAAE,iBAAmC;QAC7F,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAErD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAEpC,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;aAC3F;iBAAM;gBACH,IAAI,iBAAiB,EAAE;oBACnB,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;iBACjF;qBAAM;oBACH,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;iBACzD;aACJ;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBACpB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/D,IAAI,CAAC,4BAA4B,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;aAC9G;SACJ;QAED,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACI,OAAO;QACV,gEAAgE;QAChE,IAAI,IAAI,CAAC,gCAAgC,GAAG,CAAC,EAAE;YAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC3B,IAAI,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC9B,IAAI,IAAI,CAAC,kBAAkB,EAAE;wBACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;qBACrD;yBAAM;wBACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;qBACjC;oBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;iBAC/B;aACJ;SACJ;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAExC,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBACvG,IAAI,CAAC,uBAAuB,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9E,WAAW,GAAG,IAAI,CAAC;iBACtB;gBAED,IAAI,CAAC,WAAW,EAAE;oBACd,SAAS;iBACZ;gBAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,EAAE;oBACrC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;oBAElC,gBAAgB;oBAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;wBAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;4BACnB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;4BACpC,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BACvD,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;yBACtD;qBACJ;oBAED,IAAI,IAAI,CAAC,yBAAyB,EAAE;wBAChC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBACjD,IAAI,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,YAAY,EAAE;4BAChG,IAAI,IAAI,CAAC,uBAAuB,EAAE;gCAC9B,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;6BAC1C;4BAED,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CACvD,IAAI,CAAC,uBAAuB,EAC5B,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAC3B,CAAC,EACD,IAAI,CAAC,MAAM,EACX,KAAK,EACL,KAAK,EACL,SAAS,CAAC,4BAA4B,EACtC,SAAS,CAAC,iBAAiB,CAC9B,CAAC;yBACL;qBACJ;iBACJ;gBAED,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;gBAEzE,IAAI,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,uBAAuB,EAAE;oBAChE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;iBACrE;aACJ;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,OAAO;aACV;YAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBAC7F,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEzE,IAAI,IAAI,CAAC,yBAAyB,EAAE;oBAChC,IAAI,IAAI,CAAC,uBAAuB,EAAE;wBAC9B,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;qBAC1C;oBAED,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CACvD,IAAI,CAAC,kBAAkB,EACvB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAC3B,CAAC,EACD,IAAI,CAAC,MAAM,EACX,KAAK,EACL,KAAK,EACL,SAAS,CAAC,4BAA4B,EACtC,SAAS,CAAC,iBAAiB,CAC9B,CAAC;iBACL;aACJ;YAED,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAE9D,IAAI,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBAChE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAChE;SACJ;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,cAAc;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACtE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAEvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7C;SACJ;QAED,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,IAAY,EAAE,EAAW;QAClC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3D,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAE1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,UAAU,GAAG,IAAI,CAAC;YAEtB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,MAAM,EAAE;gBACR,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/C,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;aAC1C;YAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YACrH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAE5B,IAAI,MAAM,CAAC,oBAAoB,EAAE;gBAC7B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;aACvD;YAED,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3D;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;gBAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAEtC,IAAI,KAAK,EAAE;oBACP,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;iBAC7C;aACJ;SACJ;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,aAAa,GAAG,IAAI;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAoB,EAAE,EAAE;gBAC7C,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC;gBAChC,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;YAC5C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtC,aAAa;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpC,oBAAoB;QACpB,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACpD;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACvC;IACL,CAAC;IAED;;;OAGG;IACI,SAAS;;QACZ,MAAM,mBAAmB,GAAQ,EAAE,CAAC;QAEpC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,mBAAmB,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAEjC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,mBAAmB,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;SAC1E;QAED,mBAAmB,CAAC,KAAK,GAAG,EAAE,CAAC;QAE/B,mBAAmB,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEvE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAEhC,MAAM,cAAc,GAAQ;gBACxB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE;gBACtC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE;gBAClC,qBAAqB,EAAE,MAAA,IAAI,CAAC,gBAAgB,EAAE,0CAAE,EAAE;aACrD,CAAC;YAEF,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE/C,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aACvC;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC3C;YAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;aAC7D;YAED,mBAAmB,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAElC,IAAI,CAAC,MAAM,EAAE;oBACT,SAAS;iBACZ;gBAED,MAAM,KAAK,GAAQ,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAClB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACzB,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;gBACrB,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1C;SACJ;QACD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,cAAmB,EAAE,KAAY;QACjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7E,IAAI,cAAc,CAAC,gBAAgB,EAAE;YACjC,QAAQ,CAAC,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;SAClF;QAED,QAAQ,CAAC,qBAAqB,GAAG,cAAc,CAAC,qBAAqB,CAAC;QAEtE,IAAI,KAAa,CAAC;QAClB,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;YAC1D,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE;gBACjC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;aAC3D;YAED,MAAM,IAAI,GAAqB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;YAE/H,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,IAAI,UAAU,CAAC,EAAE,KAAK,IAAI,EAAE;gBACvD,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;aAC3B;YAED,IAAI,UAAU,CAAC,MAAM,EAAE;gBACnB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;aACnC;YAED,IAAI,UAAU,CAAC,QAAQ,EAAE;gBACrB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;aACvC;YAED,IAAI,UAAU,CAAC,SAAS,EAAE;gBACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;aAC/D;YAED,IAAI,UAAU,CAAC,qBAAqB,KAAK,SAAS,IAAI,UAAU,CAAC,qBAAqB,KAAK,IAAI,EAAE;gBAC7F,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;gBAChC,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,qBAAqB,CAAC;aACnE;SACJ;QAED,+DAA+D;QAC/D,IAAI,cAAc,CAAC,MAAM,EAAE;YACvB,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3D,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1C,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;aAChE;SACJ;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,yBAAyB,CAAC,WAAW,GAAG,KAAK;QAChD,IAAI,IAAI,CAAC,yBAAyB,IAAI,WAAW,EAAE;YAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;YAC1C,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;SAC1C;IACL,CAAC;IAED;;;OAGG;IACI,aAAa;QAChB,IAAI,UAAU,GAAqB,IAAI,CAAC;QAExC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;SAC9D;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,MAAM,KAAK,GAAG,IAAI,KAAK,EAAQ,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,KAAK,CAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SAC1C;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEO,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,OAAkB;QAC/D,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACV;QAED,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAEtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACvB;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACnE;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,oBAAoB;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import { Bone } from \"./bone\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { RawTexture } from \"../Materials/Textures/rawTexture\";\r\nimport type { Animatable } from \"../Animations/animatable\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { Animation } from \"../Animations/animation\";\r\nimport { AnimationRange } from \"../Animations/animationRange\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { DeepCopier } from \"../Misc/deepCopier\";\r\nimport type { IInspectable } from \"../Misc/iInspectable\";\r\nimport type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\n\r\n/**\r\n * Class used to handle skinning animations\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons\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 _absoluteTransformIsDirty = true;\r\n\r\n private _canUseTextureForBones = false;\r\n private _uniqueId = 0;\r\n\r\n /** @internal */\r\n public _numBonesWithLinkedTransformNode = 0;\r\n\r\n /** @internal */\r\n public _hasWaitingData: Nullable<boolean> = null;\r\n\r\n /** @internal */\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/toolsAndResources/inspector#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,\r\n scene: Scene\r\n ) {\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 * @returns 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) {\r\n if (!mesh._bonesTransformMatrices) {\r\n this.prepare();\r\n }\r\n\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 let 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 (const 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 * @returns the indice of the bone. Returns -1 if not found\r\n */\r\n public getBoneIndexByName(name: string): number {\r\n for (let 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 (let 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 (let 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 const animationRanges: Nullable<AnimationRange>[] = [];\r\n let 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 let ret = true;\r\n const 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 const boneDict: { [key: string]: Bone } = {};\r\n const sourceBones = source.bones;\r\n let nBones: number;\r\n let 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 const 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 const boneName = this.bones[i].name;\r\n const 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 const 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 let ret = 0;\r\n for (let i = 0, nBones = this.bones.length; i < nBones; i++) {\r\n if (this.bones[i].animations[0]) {\r\n const 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 const 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 const 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 const sceneAnimatables = skeleton._scene.getAllAnimatablesByTarget(skeleton);\r\n let rangeAnimatable: Nullable<Animatable> = null;\r\n\r\n for (let index = 0; index < sceneAnimatables.length; index++) {\r\n const 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 const animatables = skeleton.getAnimatables();\r\n\r\n for (let index = 0; index < animatables.length; index++) {\r\n const animatable = animatables[index];\r\n const animations = animatable.animations;\r\n\r\n if (!animations) {\r\n continue;\r\n }\r\n\r\n for (let 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 /** @internal */\r\n public _markAsDirty(): void {\r\n this._isDirty = true;\r\n this._absoluteTransformIsDirty = true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _registerMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n this._meshesWithPoseMatrix.push(mesh);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _unregisterMeshWithPoseMatrix(mesh: AbstractMesh): void {\r\n const 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 this.onBeforeComputeObservable.notifyObservers(this);\r\n\r\n for (let index = 0; index < this.bones.length; index++) {\r\n const bone = this.bones[index];\r\n bone._childUpdateId++;\r\n const 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 const 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 const node = bone._linkedTransformNode;\r\n bone.position = node.position;\r\n if (node.rotationQuaternion) {\r\n bone.rotationQuaternion = node.rotationQuaternion;\r\n } else {\r\n bone.rotation = node.rotation;\r\n }\r\n bone.scaling = node.scaling;\r\n }\r\n }\r\n }\r\n\r\n if (this.needInitialSkinMatrix) {\r\n for (const mesh of this._meshesWithPoseMatrix) {\r\n const poseMatrix = mesh.getPoseMatrix();\r\n\r\n let needsUpdate = this._isDirty;\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 needsUpdate = true;\r\n }\r\n\r\n if (!needsUpdate) {\r\n continue;\r\n }\r\n\r\n if (this._synchronizedWithMesh !== mesh) {\r\n this._synchronizedWithMesh = mesh;\r\n\r\n // Prepare bones\r\n for (const bone of this.bones) {\r\n if (!bone.getParent()) {\r\n const 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 if (mesh._transformMatrixTexture) {\r\n mesh._transformMatrixTexture.dispose();\r\n }\r\n\r\n mesh._transformMatrixTexture = RawTexture.CreateRGBATexture(\r\n mesh._bonesTransformMatrices,\r\n (this.bones.length + 1) * 4,\r\n 1,\r\n this._scene,\r\n false,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\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._isDirty) {\r\n return;\r\n }\r\n\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(\r\n this._transformMatrices,\r\n (this.bones.length + 1) * 4,\r\n 1,\r\n this._scene,\r\n false,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\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\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 (let 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 const result = new Skeleton(name, id || name, this._scene);\r\n\r\n result.needInitialSkinMatrix = this.needInitialSkinMatrix;\r\n\r\n for (let index = 0; index < this.bones.length; index++) {\r\n const source = this.bones[index];\r\n let parentBone = null;\r\n\r\n const parent = source.getParent();\r\n if (parent) {\r\n const parentIndex = this.bones.indexOf(parent);\r\n parentBone = result.bones[parentIndex];\r\n }\r\n\r\n const 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 (const rangeName in this._ranges) {\r\n const 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/features/featuresDeepDive/animation/advanced_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.length = 0;\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 const 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 (let index = 0; index < this.bones.length; index++) {\r\n const bone = this.bones[index];\r\n const parent = bone.getParent();\r\n\r\n const 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 (const name in this._ranges) {\r\n const source = this._ranges[name];\r\n\r\n if (!source) {\r\n continue;\r\n }\r\n\r\n const 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 const 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 const parsedBone = parsedSkeleton.bones[index];\r\n const parsedBoneIndex = parsedSkeleton.bones[index].index;\r\n let parentBone = null;\r\n if (parsedBone.parentBoneIndex > -1) {\r\n parentBone = skeleton.bones[parsedBone.parentBoneIndex];\r\n }\r\n\r\n const rest: Nullable<Matrix> = parsedBone.rest ? Matrix.FromArray(parsedBone.rest) : null;\r\n const 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 const 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 if (this._absoluteTransformIsDirty || forceUpdate) {\r\n this.bones[0].computeAbsoluteTransforms();\r\n this._absoluteTransformIsDirty = false;\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 let 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 const bones = new Array<Bone>();\r\n const visited = new Array<boolean>(this.bones.length);\r\n for (let 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 const bone = this.bones[index];\r\n if (!bone) return;\r\n\r\n if (bone._index === undefined) {\r\n bone._index = index;\r\n }\r\n\r\n const 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"]}
|
package/Buffers/buffer.js
CHANGED
|
@@ -181,6 +181,20 @@ export class Buffer {
|
|
|
181
181
|
* Specialized buffer used to store vertex data
|
|
182
182
|
*/
|
|
183
183
|
export class VertexBuffer {
|
|
184
|
+
/**
|
|
185
|
+
* Gets or sets the instance divisor when in instanced mode
|
|
186
|
+
*/
|
|
187
|
+
get instanceDivisor() {
|
|
188
|
+
return this._instanceDivisor;
|
|
189
|
+
}
|
|
190
|
+
set instanceDivisor(value) {
|
|
191
|
+
const isInstanced = value != 0;
|
|
192
|
+
this._instanceDivisor = value;
|
|
193
|
+
if (isInstanced !== this._instanced) {
|
|
194
|
+
this._instanced = isInstanced;
|
|
195
|
+
this._computeHashCode();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
184
198
|
/**
|
|
185
199
|
* Constructor
|
|
186
200
|
* @param engine the engine
|
|
@@ -250,20 +264,6 @@ export class VertexBuffer {
|
|
|
250
264
|
this._instanceDivisor = instanced ? divisor : 0;
|
|
251
265
|
this._computeHashCode();
|
|
252
266
|
}
|
|
253
|
-
/**
|
|
254
|
-
* Gets or sets the instance divisor when in instanced mode
|
|
255
|
-
*/
|
|
256
|
-
get instanceDivisor() {
|
|
257
|
-
return this._instanceDivisor;
|
|
258
|
-
}
|
|
259
|
-
set instanceDivisor(value) {
|
|
260
|
-
const isInstanced = value != 0;
|
|
261
|
-
this._instanceDivisor = value;
|
|
262
|
-
if (isInstanced !== this._instanced) {
|
|
263
|
-
this._instanced = isInstanced;
|
|
264
|
-
this._computeHashCode();
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
267
|
_computeHashCode() {
|
|
268
268
|
// note: cast to any because the property is declared readonly
|
|
269
269
|
this.hashCode =
|
package/Buffers/buffer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Buffers/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, DataArray, FloatArray } from \"../types\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { DataBuffer } from \"./dataBuffer\";\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 /** @internal */\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(\r\n engine: any,\r\n data: DataArray | DataBuffer,\r\n updatable: boolean,\r\n stride = 0,\r\n postponeInternalCreation = false,\r\n instanced = false,\r\n useBytes = false,\r\n divisor?: number\r\n ) {\r\n if (engine.getScene) {\r\n // old versions of VertexBuffer accepted 'mesh' instead of 'engine'\r\n this._engine = engine.getScene().getEngine();\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) {\r\n // 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(\r\n this._engine,\r\n this,\r\n kind,\r\n this._updatable,\r\n true,\r\n byteStride,\r\n instanced === undefined ? this._instanced : instanced,\r\n byteOffset,\r\n size,\r\n undefined,\r\n undefined,\r\n true,\r\n this._divisor || divisor\r\n );\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) {\r\n // 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) {\r\n // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data);\r\n this._data = data;\r\n }\r\n }\r\n\r\n /** @internal */\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) {\r\n // update buffer\r\n this._engine.updateDynamicVertexBuffer(\r\n this._buffer,\r\n data,\r\n useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT,\r\n vertexCount ? vertexCount * this.byteStride : undefined\r\n );\r\n if (offset === 0 && vertexCount === undefined) {\r\n // Keep the data if we easily can\r\n this._data = data;\r\n } else {\r\n this._data = null;\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\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 private static _Counter = 0;\r\n\r\n /** @internal */\r\n public _buffer: Buffer;\r\n /** @internal */\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 const isInstanced = value != 0;\r\n this._instanceDivisor = value;\r\n\r\n if (isInstanced !== this._instanced) {\r\n this._instanced = isInstanced;\r\n this._computeHashCode();\r\n }\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(\r\n engine: any,\r\n data: DataArray | Buffer | DataBuffer,\r\n kind: string,\r\n updatable: boolean,\r\n postponeInternalCreation?: boolean,\r\n stride?: number,\r\n instanced?: boolean,\r\n offset?: number,\r\n size?: number,\r\n type?: number,\r\n normalized = false,\r\n useBytes = false,\r\n divisor = 1,\r\n takeBufferOwnership = false\r\n ) {\r\n if (data instanceof Buffer) {\r\n this._buffer = data;\r\n this._ownsBuffer = takeBufferOwnership;\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 vertexData = this.getData();\r\n this.type = VertexBuffer.FLOAT;\r\n if (vertexData instanceof Int8Array) {\r\n this.type = VertexBuffer.BYTE;\r\n } else if (vertexData instanceof Uint8Array) {\r\n this.type = VertexBuffer.UNSIGNED_BYTE;\r\n } else if (vertexData instanceof Int16Array) {\r\n this.type = VertexBuffer.SHORT;\r\n } else if (vertexData instanceof Uint16Array) {\r\n this.type = VertexBuffer.UNSIGNED_SHORT;\r\n } else if (vertexData instanceof Int32Array) {\r\n this.type = VertexBuffer.INT;\r\n } else if (vertexData instanceof Uint32Array) {\r\n 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 } 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 /** @internal */\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 const 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 data.slice(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 const result = new Float32Array(count);\r\n const 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 const 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 data.slice();\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(\r\n data: DataArray,\r\n byteOffset: number,\r\n byteStride: number,\r\n componentCount: number,\r\n componentType: number,\r\n count: number,\r\n normalized: boolean,\r\n callback: (value: number, index: number) => void\r\n ): 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 } 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}\r\n"]}
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Buffers/buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, DataArray, FloatArray } from \"../types\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\nimport { DataBuffer } from \"./dataBuffer\";\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 /** @internal */\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(\r\n engine: any,\r\n data: DataArray | DataBuffer,\r\n updatable: boolean,\r\n stride = 0,\r\n postponeInternalCreation = false,\r\n instanced = false,\r\n useBytes = false,\r\n divisor?: number\r\n ) {\r\n if (engine.getScene) {\r\n // old versions of VertexBuffer accepted 'mesh' instead of 'engine'\r\n this._engine = engine.getScene().getEngine();\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) {\r\n // 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(\r\n this._engine,\r\n this,\r\n kind,\r\n this._updatable,\r\n true,\r\n byteStride,\r\n instanced === undefined ? this._instanced : instanced,\r\n byteOffset,\r\n size,\r\n undefined,\r\n undefined,\r\n true,\r\n this._divisor || divisor\r\n );\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) {\r\n // 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) {\r\n // update buffer\r\n this._engine.updateDynamicVertexBuffer(this._buffer, data);\r\n this._data = data;\r\n }\r\n }\r\n\r\n /** @internal */\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) {\r\n // update buffer\r\n this._engine.updateDynamicVertexBuffer(\r\n this._buffer,\r\n data,\r\n useBytes ? offset : offset * Float32Array.BYTES_PER_ELEMENT,\r\n vertexCount ? vertexCount * this.byteStride : undefined\r\n );\r\n if (offset === 0 && vertexCount === undefined) {\r\n // Keep the data if we easily can\r\n this._data = data;\r\n } else {\r\n this._data = null;\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\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 private static _Counter = 0;\r\n\r\n /** @internal */\r\n public _buffer: Buffer;\r\n /** @internal */\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 const isInstanced = value != 0;\r\n this._instanceDivisor = value;\r\n\r\n if (isInstanced !== this._instanced) {\r\n this._instanced = isInstanced;\r\n this._computeHashCode();\r\n }\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(\r\n engine: any,\r\n data: DataArray | Buffer | DataBuffer,\r\n kind: string,\r\n updatable: boolean,\r\n postponeInternalCreation?: boolean,\r\n stride?: number,\r\n instanced?: boolean,\r\n offset?: number,\r\n size?: number,\r\n type?: number,\r\n normalized = false,\r\n useBytes = false,\r\n divisor = 1,\r\n takeBufferOwnership = false\r\n ) {\r\n if (data instanceof Buffer) {\r\n this._buffer = data;\r\n this._ownsBuffer = takeBufferOwnership;\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 vertexData = this.getData();\r\n this.type = VertexBuffer.FLOAT;\r\n if (vertexData instanceof Int8Array) {\r\n this.type = VertexBuffer.BYTE;\r\n } else if (vertexData instanceof Uint8Array) {\r\n this.type = VertexBuffer.UNSIGNED_BYTE;\r\n } else if (vertexData instanceof Int16Array) {\r\n this.type = VertexBuffer.SHORT;\r\n } else if (vertexData instanceof Uint16Array) {\r\n this.type = VertexBuffer.UNSIGNED_SHORT;\r\n } else if (vertexData instanceof Int32Array) {\r\n this.type = VertexBuffer.INT;\r\n } else if (vertexData instanceof Uint32Array) {\r\n 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 } 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 /** @internal */\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 const 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 data.slice(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 const result = new Float32Array(count);\r\n const 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 const 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 data.slice();\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(\r\n data: DataArray,\r\n byteOffset: number,\r\n byteStride: number,\r\n componentCount: number,\r\n componentType: number,\r\n count: number,\r\n normalized: boolean,\r\n callback: (value: number, index: number) => void\r\n ): 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 } 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}\r\n"]}
|
package/Buffers/dataBuffer.js
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Class used to store gfx data (like WebGLBuffer)
|
|
3
3
|
*/
|
|
4
4
|
export class DataBuffer {
|
|
5
|
+
/**
|
|
6
|
+
* Gets the underlying buffer
|
|
7
|
+
*/
|
|
8
|
+
get underlyingResource() {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
5
11
|
/**
|
|
6
12
|
* Constructs the buffer
|
|
7
13
|
*/
|
|
@@ -18,12 +24,6 @@ export class DataBuffer {
|
|
|
18
24
|
this.is32Bits = false;
|
|
19
25
|
this.uniqueId = DataBuffer._Counter++;
|
|
20
26
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Gets the underlying buffer
|
|
23
|
-
*/
|
|
24
|
-
get underlyingResource() {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
27
|
}
|
|
28
28
|
DataBuffer._Counter = 0;
|
|
29
29
|
//# sourceMappingURL=dataBuffer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataBuffer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Buffers/dataBuffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"dataBuffer.js","sourceRoot":"","sources":["../../../../lts/core/generated/Buffers/dataBuffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,UAAU;IAcnB;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAOD;;OAEG;IACH;QA1BA;;WAEG;QACI,eAAU,GAAW,CAAC,CAAC;QAC9B,qDAAqD;QAC9C,aAAQ,GAAW,CAAC,CAAC;QAC5B;;WAEG;QACI,aAAQ,GAAY,KAAK,CAAC;QAkB7B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC;;AA9Bc,mBAAQ,GAAG,CAAC,CAAC","sourcesContent":["/**\r\n * Class used to store gfx data (like WebGLBuffer)\r\n */\r\nexport class DataBuffer {\r\n private static _Counter = 0;\r\n\r\n /**\r\n * Gets or sets the number of objects referencing this buffer\r\n */\r\n public references: number = 0;\r\n /** Gets or sets the size of the underlying buffer */\r\n public capacity: number = 0;\r\n /**\r\n * Gets or sets a boolean indicating if the buffer contains 32bits indices\r\n */\r\n public is32Bits: boolean = false;\r\n\r\n /**\r\n * Gets the underlying buffer\r\n */\r\n public get underlyingResource(): any {\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the unique id of this buffer\r\n */\r\n public readonly uniqueId: number;\r\n\r\n /**\r\n * Constructs the buffer\r\n */\r\n constructor() {\r\n this.uniqueId = DataBuffer._Counter++;\r\n }\r\n}\r\n"]}
|