@babylonjs/core 5.32.0 → 5.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/abstractActionManager.d.ts +1 -1
- package/Actions/abstractActionManager.js +1 -1
- package/Actions/abstractActionManager.js.map +1 -1
- package/Actions/action.d.ts +1 -1
- package/Actions/action.js +1 -1
- package/Actions/action.js.map +1 -1
- package/Actions/actionManager.d.ts +18 -18
- package/Actions/actionManager.js +18 -18
- package/Actions/actionManager.js.map +1 -1
- package/Actions/directActions.d.ts +10 -10
- package/Actions/directActions.js +10 -10
- package/Actions/directActions.js.map +1 -1
- package/Actions/interpolateValueAction.d.ts +1 -1
- package/Actions/interpolateValueAction.js +1 -1
- package/Actions/interpolateValueAction.js.map +1 -1
- package/Animations/animatable.d.ts +2 -2
- package/Animations/animatable.js +2 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animationGroup.d.ts +3 -3
- package/Animations/animationGroup.js +3 -3
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/easing.d.ts +14 -14
- package/Animations/easing.js +13 -13
- package/Animations/easing.js.map +1 -1
- package/Audio/Interfaces/IAudioEngine.d.ts +2 -2
- package/Audio/Interfaces/IAudioEngine.js.map +1 -1
- package/Audio/Interfaces/ISoundOptions.d.ts +3 -3
- package/Audio/Interfaces/ISoundOptions.js.map +1 -1
- package/Audio/analyser.d.ts +1 -1
- package/Audio/analyser.js +1 -1
- package/Audio/analyser.js.map +1 -1
- package/Audio/audioEngine.d.ts +2 -2
- package/Audio/audioEngine.js +2 -2
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.d.ts +4 -4
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.d.ts +13 -13
- package/Audio/sound.js +13 -13
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.d.ts +5 -5
- package/Audio/soundTrack.js +5 -5
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.d.ts +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Cameras/bouncingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/framingBehavior.js +1 -1
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +8 -0
- package/Behaviors/Meshes/pointerDragBehavior.js +9 -3
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.d.ts +1 -1
- package/Bones/bone.js +1 -1
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.d.ts +1 -1
- package/Bones/boneIKController.js +1 -1
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.d.ts +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.d.ts +3 -3
- package/Bones/skeleton.js +2 -2
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +2 -2
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +3 -3
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.d.ts +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.d.ts +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.d.ts +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js +4 -4
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +3 -3
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.d.ts +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +2 -2
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +2 -2
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +3 -2
- package/Cameras/Inputs/freeCameraMouseInput.js +10 -7
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.d.ts +2 -2
- package/Cameras/Inputs/freeCameraTouchInput.js +4 -4
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
- package/Cameras/VR/vrCameraMetrics.js +1 -1
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +2 -2
- package/Cameras/VR/vrExperienceHelper.js +2 -2
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.d.ts +2 -2
- package/Cameras/VR/webVRCamera.js +2 -2
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +9 -9
- package/Cameras/arcRotateCamera.js +9 -9
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/arcRotateCameraInputsManager.d.ts +1 -1
- package/Cameras/arcRotateCameraInputsManager.js +1 -1
- package/Cameras/arcRotateCameraInputsManager.js.map +1 -1
- package/Cameras/camera.d.ts +4 -4
- package/Cameras/camera.js +4 -4
- package/Cameras/camera.js.map +1 -1
- package/Cameras/cameraInputsManager.d.ts +1 -1
- package/Cameras/cameraInputsManager.js +1 -1
- package/Cameras/cameraInputsManager.js.map +1 -1
- package/Cameras/flyCamera.d.ts +1 -1
- package/Cameras/flyCamera.js +1 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/flyCameraInputsManager.d.ts +1 -1
- package/Cameras/flyCameraInputsManager.js +1 -1
- package/Cameras/flyCameraInputsManager.js.map +1 -1
- package/Cameras/followCamera.d.ts +4 -4
- package/Cameras/followCamera.js +4 -4
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/followCameraInputsManager.d.ts +1 -1
- package/Cameras/followCameraInputsManager.js +1 -1
- package/Cameras/followCameraInputsManager.js.map +1 -1
- package/Cameras/freeCamera.d.ts +3 -3
- package/Cameras/freeCamera.js +3 -3
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/freeCameraInputsManager.d.ts +1 -1
- package/Cameras/freeCameraInputsManager.js +1 -1
- package/Cameras/freeCameraInputsManager.js.map +1 -1
- package/Cameras/gamepadCamera.d.ts +2 -2
- package/Cameras/gamepadCamera.js +2 -2
- package/Cameras/gamepadCamera.js.map +1 -1
- package/Cameras/targetCamera.d.ts +2 -2
- package/Cameras/targetCamera.js +2 -2
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.d.ts +2 -2
- package/Cameras/touchCamera.js +2 -2
- package/Cameras/touchCamera.js.map +1 -1
- package/Cameras/universalCamera.d.ts +2 -2
- package/Cameras/universalCamera.js +2 -2
- package/Cameras/universalCamera.js.map +1 -1
- package/Cameras/virtualJoysticksCamera.d.ts +2 -2
- package/Cameras/virtualJoysticksCamera.js +2 -2
- package/Cameras/virtualJoysticksCamera.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Culling/Octrees/octree.d.ts +2 -2
- package/Culling/Octrees/octree.js +2 -2
- package/Culling/Octrees/octree.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -1
- package/Culling/Octrees/octreeBlock.js +1 -1
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.d.ts +3 -3
- package/Culling/Octrees/octreeSceneComponent.js +1 -1
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingInfo.d.ts +3 -3
- package/Culling/boundingInfo.js +2 -2
- package/Culling/boundingInfo.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/rayHelper.d.ts +2 -2
- package/Debug/rayHelper.js +2 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Engines/Extensions/engine.alpha.d.ts +2 -2
- package/Engines/Extensions/engine.alpha.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.d.ts +2 -2
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +8 -8
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.uniformBuffer.d.ts +3 -3
- package/Engines/Extensions/engine.uniformBuffer.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +2 -2
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Extensions/engine.webVR.d.ts +1 -1
- package/Engines/Extensions/engine.webVR.js.map +1 -1
- package/Engines/Processors/shaderProcessor.d.ts +2 -2
- package/Engines/Processors/shaderProcessor.js +2 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +11 -9
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/constants.d.ts +17 -17
- package/Engines/constants.js +17 -17
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +12 -12
- package/Engines/engine.js +11 -11
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +2 -2
- package/Engines/nativeEngine.js +23 -2
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +5 -5
- package/Engines/nullEngine.js +5 -5
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +8 -8
- package/Engines/thinEngine.js +6 -6
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +4 -4
- package/Engines/webgpuEngine.js +1 -1
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/gamepadSceneComponent.d.ts +1 -1
- package/Gamepads/gamepadSceneComponent.js.map +1 -1
- package/Gizmos/gizmo.d.ts +6 -7
- package/Gizmos/gizmo.js +43 -36
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +17 -7
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +4 -0
- package/Gizmos/positionGizmo.js +21 -0
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +4 -0
- package/Gizmos/rotationGizmo.js +20 -0
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +2 -0
- package/Gizmos/scaleGizmo.js +10 -0
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +7 -7
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.js +34 -25
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/engineInstrumentation.d.ts +2 -2
- package/Instrumentation/engineInstrumentation.js +2 -2
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.d.ts +2 -2
- package/Instrumentation/sceneInstrumentation.js +2 -2
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayerSceneComponent.d.ts +2 -2
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +3 -3
- package/LensFlares/lensFlare.js +3 -3
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +2 -2
- package/LensFlares/lensFlareSystem.js +2 -2
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/LensFlares/lensFlareSystemSceneComponent.d.ts +1 -1
- package/LensFlares/lensFlareSystemSceneComponent.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +2 -2
- package/Lights/Shadows/shadowGenerator.js +2 -2
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.d.ts +2 -2
- package/Lights/directionalLight.js +2 -2
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/hemisphericLight.d.ts +1 -1
- package/Lights/hemisphericLight.js +1 -1
- package/Lights/hemisphericLight.js.map +1 -1
- package/Lights/light.d.ts +1 -1
- package/Lights/light.js +1 -1
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.d.ts +2 -2
- package/Lights/pointLight.js +2 -2
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.d.ts +2 -2
- package/Lights/spotLight.js +2 -2
- package/Lights/spotLight.js.map +1 -1
- package/Loading/loadingScreen.d.ts +2 -2
- package/Loading/loadingScreen.js +1 -1
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/reciprocalBlock.js +6 -2
- package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +1 -1
- package/Materials/PBR/pbrMaterial.js +1 -1
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/Textures/Packer/packer.d.ts +1 -1
- package/Materials/Textures/Packer/packer.js +1 -1
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js +2 -2
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.d.ts +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +2 -2
- package/Materials/Textures/cubeTexture.js +2 -2
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.d.ts +3 -3
- package/Materials/Textures/mirrorTexture.js +3 -3
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +3 -3
- package/Materials/Textures/refractionTexture.js +3 -3
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +10 -10
- package/Materials/Textures/texture.js +10 -10
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +2 -2
- package/Materials/Textures/videoTexture.js +2 -2
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/effect.d.ts +20 -2
- package/Materials/effect.js +28 -4
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +1 -0
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +1 -1
- package/Materials/fresnelParameters.js +1 -1
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/material.d.ts +1 -1
- package/Materials/material.js.map +1 -1
- package/Materials/multiMaterial.d.ts +2 -2
- package/Materials/multiMaterial.js +2 -2
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +2 -2
- package/Materials/shaderMaterial.js +2 -2
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +1 -1
- package/Materials/shadowDepthWrapper.js +2 -2
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +18 -18
- package/Materials/standardMaterial.js +6 -6
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.path.d.ts +7 -7
- package/Maths/math.path.js +7 -7
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +4 -4
- package/Maths/math.vector.js +4 -4
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.d.ts +3 -3
- package/Meshes/Builders/boxBuilder.js +3 -3
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.d.ts +1 -1
- package/Meshes/Builders/capsuleBuilder.js +1 -1
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.d.ts +2 -2
- package/Meshes/Builders/cylinderBuilder.js +2 -2
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.d.ts +1 -1
- package/Meshes/Builders/decalBuilder.js +1 -1
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/discBuilder.d.ts +2 -2
- package/Meshes/Builders/discBuilder.js +2 -2
- package/Meshes/Builders/discBuilder.js.map +1 -1
- package/Meshes/Builders/geodesicBuilder.d.ts +1 -1
- package/Meshes/Builders/geodesicBuilder.js +1 -1
- package/Meshes/Builders/geodesicBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
- package/Meshes/Builders/goldbergBuilder.js +1 -1
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +4 -4
- package/Meshes/Builders/groundBuilder.js +4 -4
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.d.ts +2 -2
- package/Meshes/Builders/icoSphereBuilder.js +2 -2
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/Builders/latheBuilder.d.ts +2 -2
- package/Meshes/Builders/latheBuilder.js +2 -2
- package/Meshes/Builders/latheBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.d.ts +6 -6
- package/Meshes/Builders/linesBuilder.js +6 -6
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/planeBuilder.d.ts +2 -2
- package/Meshes/Builders/planeBuilder.js +2 -2
- package/Meshes/Builders/planeBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.d.ts +1 -1
- package/Meshes/Builders/polygonBuilder.js +1 -1
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.d.ts +3 -3
- package/Meshes/Builders/polyhedronBuilder.js +3 -3
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.d.ts +4 -4
- package/Meshes/Builders/ribbonBuilder.js +4 -4
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/shapeBuilder.d.ts +9 -9
- package/Meshes/Builders/shapeBuilder.js +9 -9
- package/Meshes/Builders/shapeBuilder.js.map +1 -1
- package/Meshes/Builders/sphereBuilder.d.ts +2 -2
- package/Meshes/Builders/sphereBuilder.js +2 -2
- package/Meshes/Builders/sphereBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +2 -2
- package/Meshes/Builders/tiledBoxBuilder.js +2 -2
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +2 -2
- package/Meshes/Builders/tiledPlaneBuilder.js +2 -2
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Builders/torusBuilder.d.ts +2 -2
- package/Meshes/Builders/torusBuilder.js +2 -2
- package/Meshes/Builders/torusBuilder.js.map +1 -1
- package/Meshes/Builders/torusKnotBuilder.d.ts +2 -2
- package/Meshes/Builders/torusKnotBuilder.js +2 -2
- package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
- package/Meshes/Builders/tubeBuilder.d.ts +4 -4
- package/Meshes/Builders/tubeBuilder.js +4 -4
- package/Meshes/Builders/tubeBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +35 -35
- package/Meshes/abstractMesh.js +34 -34
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +3 -3
- package/Meshes/instancedMesh.js +1 -1
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/linesMesh.d.ts +2 -2
- package/Meshes/linesMesh.js +2 -2
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +36 -36
- package/Meshes/mesh.js +9 -17
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/meshLODLevel.d.ts +1 -1
- package/Meshes/meshLODLevel.js +1 -1
- package/Meshes/meshLODLevel.js.map +1 -1
- package/Meshes/meshSimplification.d.ts +6 -6
- package/Meshes/meshSimplification.js +4 -4
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshSimplificationSceneComponent.d.ts +1 -1
- package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
- package/Meshes/polygonMesh.d.ts +2 -2
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +1 -1
- package/Meshes/transformNode.js +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/assetsManager.d.ts +2 -2
- package/Misc/assetsManager.js +2 -2
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/iInspectable.d.ts +1 -1
- package/Misc/iInspectable.js.map +1 -1
- package/Misc/sceneOptimizer.d.ts +12 -12
- package/Misc/sceneOptimizer.js +12 -12
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/screenshotTools.d.ts +10 -10
- package/Misc/screenshotTools.js +10 -10
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/tools.d.ts +4 -4
- package/Misc/tools.js +4 -4
- package/Misc/tools.js.map +1 -1
- package/Misc/videoRecorder.d.ts +1 -1
- package/Misc/videoRecorder.js +1 -1
- package/Misc/videoRecorder.js.map +1 -1
- package/Morph/morphTarget.d.ts +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +1 -1
- package/Morph/morphTargetManager.js +1 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/IOfflineProvider.d.ts +1 -1
- package/Offline/IOfflineProvider.js.map +1 -1
- package/Offline/database.d.ts +1 -1
- package/Offline/database.js +1 -1
- package/Offline/database.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +1 -1
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +1 -1
- package/Particles/baseParticleSystem.js +1 -1
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +1 -1
- package/Particles/gpuParticleSystem.js +1 -1
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +2 -2
- package/Particles/particleSystem.js +2 -2
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +15 -15
- package/Particles/solidParticleSystem.js +13 -13
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Physics/IPhysicsEngine.d.ts +1 -1
- package/Physics/IPhysicsEngine.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -1
- package/Physics/Plugins/ammoJSPlugin.js +1 -1
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/physicsEngine.d.ts +1 -1
- package/Physics/physicsEngine.js +1 -1
- package/Physics/physicsEngine.js.map +1 -1
- package/Physics/physicsEngineComponent.d.ts +3 -3
- package/Physics/physicsEngineComponent.js +2 -2
- package/Physics/physicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.d.ts +12 -12
- package/Physics/physicsHelper.js +6 -6
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +3 -3
- package/Physics/physicsImpostor.js +1 -1
- package/Physics/physicsImpostor.js.map +1 -1
- package/Physics/physicsJoint.d.ts +9 -9
- package/Physics/physicsJoint.js +5 -5
- package/Physics/physicsJoint.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +1 -1
- package/Physics/physicsRaycastResult.js +1 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.d.ts +1 -1
- package/PostProcesses/fxaaPostProcess.js +1 -1
- package/PostProcesses/fxaaPostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +2 -2
- package/PostProcesses/highlightsPostProcess.js +2 -2
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +2 -2
- package/PostProcesses/postProcess.js +1 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +1 -1
- package/PostProcesses/postProcessManager.js +1 -1
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/refractionPostProcess.d.ts +2 -2
- package/PostProcesses/refractionPostProcess.js +2 -2
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.d.ts +2 -2
- package/Probes/reflectionProbe.js +1 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +2 -2
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Sprites/sprite.d.ts +1 -1
- package/Sprites/sprite.js +1 -1
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.d.ts +2 -2
- package/Sprites/spriteManager.js +1 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spritePackedManager.d.ts +1 -1
- package/Sprites/spritePackedManager.js +1 -1
- package/Sprites/spritePackedManager.js.map +1 -1
- package/Sprites/spriteSceneComponent.d.ts +1 -1
- package/Sprites/spriteSceneComponent.js.map +1 -1
- package/Sprites/thinSprite.d.ts +1 -1
- package/Sprites/thinSprite.js +1 -1
- package/Sprites/thinSprite.js.map +1 -1
- package/XR/webXRCamera.d.ts +1 -1
- package/XR/webXRCamera.js +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.d.ts +1 -1
- package/XR/webXRExperienceHelper.js +1 -1
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInputSource.d.ts +1 -1
- package/XR/webXRInputSource.js +1 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +1 -1
- package/XR/webXRSessionManager.js +1 -1
- package/XR/webXRSessionManager.js.map +1 -1
- package/abstractScene.d.ts +9 -9
- package/abstractScene.js +9 -9
- package/abstractScene.js.map +1 -1
- package/node.d.ts +6 -6
- package/node.js +5 -5
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +29 -24
- package/scene.js +24 -18
- package/scene.js.map +1 -1
package/Morph/morphTarget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morphTarget.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Morph/morphTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable, FloatArray } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { serialize, SerializationHelper } from \"../Misc/decorators\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\n\r\ndeclare type Animation = import(\"../Animations/animation\").Animation;\r\n\r\n/**\r\n * Defines a target to use with MorphTargetManager\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_morphtargets\r\n */\r\nexport class MorphTarget implements IAnimatable {\r\n /**\r\n * Gets or sets the list of animations\r\n */\r\n public animations = new Array<Animation>();\r\n\r\n private _scene: Nullable<Scene>;\r\n private _positions: Nullable<FloatArray> = null;\r\n private _normals: Nullable<FloatArray> = null;\r\n private _tangents: Nullable<FloatArray> = null;\r\n private _uvs: Nullable<FloatArray> = null;\r\n private _influence: number;\r\n private _uniqueId = 0;\r\n\r\n /**\r\n * Observable raised when the influence changes\r\n */\r\n public onInfluenceChanged = new Observable<boolean>();\r\n\r\n /** @internal */\r\n public _onDataLayoutChanged = new Observable<void>();\r\n\r\n /**\r\n * Gets or sets the influence of this target (ie. its weight in the overall morphing)\r\n */\r\n public get influence(): number {\r\n return this._influence;\r\n }\r\n\r\n public set influence(influence: number) {\r\n if (this._influence === influence) {\r\n return;\r\n }\r\n\r\n const previous = this._influence;\r\n this._influence = influence;\r\n\r\n if (this.onInfluenceChanged.hasObservers()) {\r\n this.onInfluenceChanged.notifyObservers(previous === 0 || influence === 0);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the id of the morph Target\r\n */\r\n @serialize()\r\n public id: string;\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 && this._scene) {\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 * Creates a new MorphTarget\r\n * @param name defines the name of the target\r\n * @param influence defines the influence to use\r\n * @param scene defines the scene the morphtarget belongs to\r\n */\r\n public constructor(\r\n /** defines the name of the target */\r\n public name: string,\r\n influence = 0,\r\n scene: Nullable<Scene> = null\r\n ) {\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this.influence = influence;\r\n\r\n if (this._scene) {\r\n this._uniqueId = this._scene.getUniqueId();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains position data\r\n */\r\n public get hasPositions(): boolean {\r\n return !!this._positions;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains normal data\r\n */\r\n public get hasNormals(): boolean {\r\n return !!this._normals;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains tangent data\r\n */\r\n public get hasTangents(): boolean {\r\n return !!this._tangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates data\r\n */\r\n public get hasUVs(): boolean {\r\n return !!this._uvs;\r\n }\r\n\r\n /**\r\n * Affects position data to this target\r\n * @param data defines the position data to use\r\n */\r\n public setPositions(data: Nullable<FloatArray>) {\r\n const hadPositions = this.hasPositions;\r\n\r\n this._positions = data;\r\n\r\n if (hadPositions !== this.hasPositions) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position data stored in this target\r\n * @returns a FloatArray containing the position data (or null if not present)\r\n */\r\n public getPositions(): Nullable<FloatArray> {\r\n return this._positions;\r\n }\r\n\r\n /**\r\n * Affects normal data to this target\r\n * @param data defines the normal data to use\r\n */\r\n public setNormals(data: Nullable<FloatArray>) {\r\n const hadNormals = this.hasNormals;\r\n\r\n this._normals = data;\r\n\r\n if (hadNormals !== this.hasNormals) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the normal data stored in this target\r\n * @returns a FloatArray containing the normal data (or null if not present)\r\n */\r\n public getNormals(): Nullable<FloatArray> {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Affects tangent data to this target\r\n * @param data defines the tangent data to use\r\n */\r\n public setTangents(data: Nullable<FloatArray>) {\r\n const hadTangents = this.hasTangents;\r\n\r\n this._tangents = data;\r\n\r\n if (hadTangents !== this.hasTangents) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the tangent data stored in this target\r\n * @returns a FloatArray containing the tangent data (or null if not present)\r\n */\r\n public getTangents(): Nullable<FloatArray> {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates data to this target\r\n * @param data defines the texture coordinates data to use\r\n */\r\n public setUVs(data: Nullable<FloatArray>) {\r\n const hadUVs = this.hasUVs;\r\n\r\n this._uvs = data;\r\n\r\n if (hadUVs !== this.hasUVs) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates data stored in this target\r\n * @returns a FloatArray containing the texture coordinates data (or null if not present)\r\n */\r\n public getUVs(): Nullable<FloatArray> {\r\n return this._uvs;\r\n }\r\n\r\n /**\r\n * Clone the current target\r\n * @returns a new MorphTarget\r\n */\r\n public clone(): MorphTarget {\r\n const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene), this);\r\n\r\n newOne._positions = this._positions;\r\n newOne._normals = this._normals;\r\n newOne._tangents = this._tangents;\r\n newOne._uvs = this._uvs;\r\n\r\n return newOne;\r\n }\r\n\r\n /**\r\n * Serializes the current target into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.influence = this.influence;\r\n\r\n serializationObject.positions = Array.prototype.slice.call(this.getPositions());\r\n if (this.id != null) {\r\n serializationObject.id = this.id;\r\n }\r\n if (this.hasNormals) {\r\n serializationObject.normals = Array.prototype.slice.call(this.getNormals());\r\n }\r\n if (this.hasTangents) {\r\n serializationObject.tangents = Array.prototype.slice.call(this.getTangents());\r\n }\r\n if (this.hasUVs) {\r\n serializationObject.uvs = Array.prototype.slice.call(this.getUVs());\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Returns the string \"MorphTarget\"\r\n * @returns \"MorphTarget\"\r\n */\r\n public getClassName(): string {\r\n return \"MorphTarget\";\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new target from serialized data\r\n * @param serializationObject defines the serialized data to use\r\n * @param scene defines the hosting scene\r\n * @returns a new MorphTarget\r\n */\r\n public static Parse(serializationObject: any, scene?: Scene): MorphTarget {\r\n const result = new MorphTarget(serializationObject.name, serializationObject.influence);\r\n\r\n result.setPositions(serializationObject.positions);\r\n\r\n if (serializationObject.id != null) {\r\n result.id = serializationObject.id;\r\n }\r\n if (serializationObject.normals) {\r\n result.setNormals(serializationObject.normals);\r\n }\r\n if (serializationObject.tangents) {\r\n result.setTangents(serializationObject.tangents);\r\n }\r\n if (serializationObject.uvs) {\r\n result.setUVs(serializationObject.uvs);\r\n }\r\n\r\n // Animations\r\n if (serializationObject.animations) {\r\n for (let animationIndex = 0; animationIndex < serializationObject.animations.length; animationIndex++) {\r\n const parsedAnimation = serializationObject.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n result.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n\r\n if (serializationObject.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n result,\r\n serializationObject.autoAnimateFrom,\r\n serializationObject.autoAnimateTo,\r\n serializationObject.autoAnimateLoop,\r\n serializationObject.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a MorphTarget from mesh data\r\n * @param mesh defines the source mesh\r\n * @param name defines the name to use for the new target\r\n * @param influence defines the influence to attach to the target\r\n * @returns a new MorphTarget\r\n */\r\n public static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget {\r\n if (!name) {\r\n name = mesh.name;\r\n }\r\n\r\n const result = new MorphTarget(name, influence, mesh.getScene());\r\n\r\n result.setPositions(<FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind));\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n result.setNormals(<FloatArray>mesh.getVerticesData(VertexBuffer.NormalKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n result.setTangents(<FloatArray>mesh.getVerticesData(VertexBuffer.TangentKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n result.setUVs(<FloatArray>mesh.getVerticesData(VertexBuffer.UVKind));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"morphTarget.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Morph/morphTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IAnimatable } from \"../Animations/animatable.interface\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable, FloatArray } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { AnimationPropertiesOverride } from \"../Animations/animationPropertiesOverride\";\r\nimport { serialize, SerializationHelper } from \"../Misc/decorators\";\r\nimport { GetClass } from \"../Misc/typeStore\";\r\n\r\ndeclare type Animation = import(\"../Animations/animation\").Animation;\r\n\r\n/**\r\n * Defines a target to use with MorphTargetManager\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTarget implements IAnimatable {\r\n /**\r\n * Gets or sets the list of animations\r\n */\r\n public animations = new Array<Animation>();\r\n\r\n private _scene: Nullable<Scene>;\r\n private _positions: Nullable<FloatArray> = null;\r\n private _normals: Nullable<FloatArray> = null;\r\n private _tangents: Nullable<FloatArray> = null;\r\n private _uvs: Nullable<FloatArray> = null;\r\n private _influence: number;\r\n private _uniqueId = 0;\r\n\r\n /**\r\n * Observable raised when the influence changes\r\n */\r\n public onInfluenceChanged = new Observable<boolean>();\r\n\r\n /** @internal */\r\n public _onDataLayoutChanged = new Observable<void>();\r\n\r\n /**\r\n * Gets or sets the influence of this target (ie. its weight in the overall morphing)\r\n */\r\n public get influence(): number {\r\n return this._influence;\r\n }\r\n\r\n public set influence(influence: number) {\r\n if (this._influence === influence) {\r\n return;\r\n }\r\n\r\n const previous = this._influence;\r\n this._influence = influence;\r\n\r\n if (this.onInfluenceChanged.hasObservers()) {\r\n this.onInfluenceChanged.notifyObservers(previous === 0 || influence === 0);\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the id of the morph Target\r\n */\r\n @serialize()\r\n public id: string;\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 && this._scene) {\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 * Creates a new MorphTarget\r\n * @param name defines the name of the target\r\n * @param influence defines the influence to use\r\n * @param scene defines the scene the morphtarget belongs to\r\n */\r\n public constructor(\r\n /** defines the name of the target */\r\n public name: string,\r\n influence = 0,\r\n scene: Nullable<Scene> = null\r\n ) {\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this.influence = influence;\r\n\r\n if (this._scene) {\r\n this._uniqueId = this._scene.getUniqueId();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains position data\r\n */\r\n public get hasPositions(): boolean {\r\n return !!this._positions;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains normal data\r\n */\r\n public get hasNormals(): boolean {\r\n return !!this._normals;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains tangent data\r\n */\r\n public get hasTangents(): boolean {\r\n return !!this._tangents;\r\n }\r\n\r\n /**\r\n * Gets a boolean defining if the target contains texture coordinates data\r\n */\r\n public get hasUVs(): boolean {\r\n return !!this._uvs;\r\n }\r\n\r\n /**\r\n * Affects position data to this target\r\n * @param data defines the position data to use\r\n */\r\n public setPositions(data: Nullable<FloatArray>) {\r\n const hadPositions = this.hasPositions;\r\n\r\n this._positions = data;\r\n\r\n if (hadPositions !== this.hasPositions) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the position data stored in this target\r\n * @returns a FloatArray containing the position data (or null if not present)\r\n */\r\n public getPositions(): Nullable<FloatArray> {\r\n return this._positions;\r\n }\r\n\r\n /**\r\n * Affects normal data to this target\r\n * @param data defines the normal data to use\r\n */\r\n public setNormals(data: Nullable<FloatArray>) {\r\n const hadNormals = this.hasNormals;\r\n\r\n this._normals = data;\r\n\r\n if (hadNormals !== this.hasNormals) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the normal data stored in this target\r\n * @returns a FloatArray containing the normal data (or null if not present)\r\n */\r\n public getNormals(): Nullable<FloatArray> {\r\n return this._normals;\r\n }\r\n\r\n /**\r\n * Affects tangent data to this target\r\n * @param data defines the tangent data to use\r\n */\r\n public setTangents(data: Nullable<FloatArray>) {\r\n const hadTangents = this.hasTangents;\r\n\r\n this._tangents = data;\r\n\r\n if (hadTangents !== this.hasTangents) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the tangent data stored in this target\r\n * @returns a FloatArray containing the tangent data (or null if not present)\r\n */\r\n public getTangents(): Nullable<FloatArray> {\r\n return this._tangents;\r\n }\r\n\r\n /**\r\n * Affects texture coordinates data to this target\r\n * @param data defines the texture coordinates data to use\r\n */\r\n public setUVs(data: Nullable<FloatArray>) {\r\n const hadUVs = this.hasUVs;\r\n\r\n this._uvs = data;\r\n\r\n if (hadUVs !== this.hasUVs) {\r\n this._onDataLayoutChanged.notifyObservers(undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the texture coordinates data stored in this target\r\n * @returns a FloatArray containing the texture coordinates data (or null if not present)\r\n */\r\n public getUVs(): Nullable<FloatArray> {\r\n return this._uvs;\r\n }\r\n\r\n /**\r\n * Clone the current target\r\n * @returns a new MorphTarget\r\n */\r\n public clone(): MorphTarget {\r\n const newOne = SerializationHelper.Clone(() => new MorphTarget(this.name, this.influence, this._scene), this);\r\n\r\n newOne._positions = this._positions;\r\n newOne._normals = this._normals;\r\n newOne._tangents = this._tangents;\r\n newOne._uvs = this._uvs;\r\n\r\n return newOne;\r\n }\r\n\r\n /**\r\n * Serializes the current target into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.name = this.name;\r\n serializationObject.influence = this.influence;\r\n\r\n serializationObject.positions = Array.prototype.slice.call(this.getPositions());\r\n if (this.id != null) {\r\n serializationObject.id = this.id;\r\n }\r\n if (this.hasNormals) {\r\n serializationObject.normals = Array.prototype.slice.call(this.getNormals());\r\n }\r\n if (this.hasTangents) {\r\n serializationObject.tangents = Array.prototype.slice.call(this.getTangents());\r\n }\r\n if (this.hasUVs) {\r\n serializationObject.uvs = Array.prototype.slice.call(this.getUVs());\r\n }\r\n\r\n // Animations\r\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Returns the string \"MorphTarget\"\r\n * @returns \"MorphTarget\"\r\n */\r\n public getClassName(): string {\r\n return \"MorphTarget\";\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new target from serialized data\r\n * @param serializationObject defines the serialized data to use\r\n * @param scene defines the hosting scene\r\n * @returns a new MorphTarget\r\n */\r\n public static Parse(serializationObject: any, scene?: Scene): MorphTarget {\r\n const result = new MorphTarget(serializationObject.name, serializationObject.influence);\r\n\r\n result.setPositions(serializationObject.positions);\r\n\r\n if (serializationObject.id != null) {\r\n result.id = serializationObject.id;\r\n }\r\n if (serializationObject.normals) {\r\n result.setNormals(serializationObject.normals);\r\n }\r\n if (serializationObject.tangents) {\r\n result.setTangents(serializationObject.tangents);\r\n }\r\n if (serializationObject.uvs) {\r\n result.setUVs(serializationObject.uvs);\r\n }\r\n\r\n // Animations\r\n if (serializationObject.animations) {\r\n for (let animationIndex = 0; animationIndex < serializationObject.animations.length; animationIndex++) {\r\n const parsedAnimation = serializationObject.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n result.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n\r\n if (serializationObject.autoAnimate && scene) {\r\n scene.beginAnimation(\r\n result,\r\n serializationObject.autoAnimateFrom,\r\n serializationObject.autoAnimateTo,\r\n serializationObject.autoAnimateLoop,\r\n serializationObject.autoAnimateSpeed || 1.0\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a MorphTarget from mesh data\r\n * @param mesh defines the source mesh\r\n * @param name defines the name to use for the new target\r\n * @param influence defines the influence to attach to the target\r\n * @returns a new MorphTarget\r\n */\r\n public static FromMesh(mesh: AbstractMesh, name?: string, influence?: number): MorphTarget {\r\n if (!name) {\r\n name = mesh.name;\r\n }\r\n\r\n const result = new MorphTarget(name, influence, mesh.getScene());\r\n\r\n result.setPositions(<FloatArray>mesh.getVerticesData(VertexBuffer.PositionKind));\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n result.setNormals(<FloatArray>mesh.getVerticesData(VertexBuffer.NormalKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n result.setTangents(<FloatArray>mesh.getVerticesData(VertexBuffer.TangentKind));\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n result.setUVs(<FloatArray>mesh.getVerticesData(VertexBuffer.UVKind));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
|
|
@@ -6,7 +6,7 @@ import { RawTexture2DArray } from "../Materials/Textures/rawTexture2DArray";
|
|
|
6
6
|
import type { AbstractScene } from "../abstractScene";
|
|
7
7
|
/**
|
|
8
8
|
* This class is used to deform meshes using morphing between different targets
|
|
9
|
-
* @see https://doc.babylonjs.com/
|
|
9
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets
|
|
10
10
|
*/
|
|
11
11
|
export declare class MorphTargetManager implements IDisposable {
|
|
12
12
|
/** Enable storing morph target data into textures when set to true (true by default) */
|
|
@@ -6,7 +6,7 @@ import { MorphTarget } from "./morphTarget.js";
|
|
|
6
6
|
import { RawTexture2DArray } from "../Materials/Textures/rawTexture2DArray.js";
|
|
7
7
|
/**
|
|
8
8
|
* This class is used to deform meshes using morphing between different targets
|
|
9
|
-
* @see https://doc.babylonjs.com/
|
|
9
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets
|
|
10
10
|
*/
|
|
11
11
|
export class MorphTargetManager {
|
|
12
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morphTargetManager.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Morph/morphTargetManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { MorphTarget } from \"./morphTarget\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { RawTexture2DArray } from \"../Materials/Textures/rawTexture2DArray\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\n/**\r\n * This class is used to deform meshes using morphing between different targets\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_morphtargets\r\n */\r\nexport class MorphTargetManager implements IDisposable {\r\n /** Enable storing morph target data into textures when set to true (true by default) */\r\n public static EnableTextureStorage = true;\r\n\r\n private _targets = new Array<MorphTarget>();\r\n private _targetInfluenceChangedObservers = new Array<Nullable<Observer<boolean>>>();\r\n private _targetDataLayoutChangedObservers = new Array<Nullable<Observer<void>>>();\r\n private _activeTargets = new SmartArray<MorphTarget>(16);\r\n private _scene: Nullable<Scene>;\r\n private _influences: Float32Array;\r\n private _morphTargetTextureIndices: Float32Array;\r\n private _supportsNormals = false;\r\n private _supportsTangents = false;\r\n private _supportsUVs = false;\r\n private _vertexCount = 0;\r\n private _textureVertexStride = 0;\r\n private _textureWidth = 0;\r\n private _textureHeight = 1;\r\n private _uniqueId = 0;\r\n private _tempInfluences = new Array<number>();\r\n private _canUseTextureForTargets = false;\r\n private _blockCounter = 0;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /** @internal */\r\n public _targetStoreTexture: Nullable<RawTexture2DArray>;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if influencers must be optimized (eg. recompiling the shader if less influencers are used)\r\n */\r\n public optimizeInfluencers = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals must be morphed\r\n */\r\n public enableNormalMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if tangents must be morphed\r\n */\r\n public enableTangentMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if UV must be morphed\r\n */\r\n public enableUVMorphing = true;\r\n\r\n /**\r\n * Sets a boolean indicating that adding new target or updating an existing target will not update the underlying data buffers\r\n */\r\n public set areUpdatesFrozen(block: boolean) {\r\n if (block) {\r\n this._blockCounter++;\r\n } else {\r\n this._blockCounter--;\r\n if (this._blockCounter <= 0) {\r\n this._blockCounter = 0;\r\n\r\n this._syncActiveTargets(true);\r\n }\r\n }\r\n }\r\n\r\n public get areUpdatesFrozen() {\r\n return this._blockCounter > 0;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTargetManager\r\n * @param scene defines the current scene\r\n */\r\n public constructor(scene: Nullable<Scene> = null) {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n this._scene = scene;\r\n\r\n if (this._scene) {\r\n this._scene.morphTargetManagers.push(this);\r\n\r\n this._uniqueId = this._scene.getUniqueId();\r\n\r\n const engineCaps = this._scene.getEngine().getCaps();\r\n this._canUseTextureForTargets =\r\n engineCaps.canUseGLVertexID && engineCaps.textureFloat && engineCaps.maxVertexTextureImageUnits > 0 && engineCaps.texture2DArrayMaxLayerCount > 1;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices handled by this manager\r\n */\r\n public get vertexCount(): number {\r\n return this._vertexCount;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of normals\r\n */\r\n public get supportsNormals(): boolean {\r\n return this._supportsNormals && this.enableNormalMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of tangents\r\n */\r\n public get supportsTangents(): boolean {\r\n return this._supportsTangents && this.enableTangentMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of texture coordinates\r\n */\r\n public get supportsUVs(): boolean {\r\n return this._supportsUVs && this.enableUVMorphing;\r\n }\r\n\r\n /**\r\n * Gets the number of targets stored in this manager\r\n */\r\n public get numTargets(): number {\r\n return this._targets.length;\r\n }\r\n\r\n /**\r\n * Gets the number of influencers (ie. the number of targets with influences > 0)\r\n */\r\n public get numInfluencers(): number {\r\n return this._activeTargets.length;\r\n }\r\n\r\n /**\r\n * Gets the list of influences (one per target)\r\n */\r\n public get influences(): Float32Array {\r\n return this._influences;\r\n }\r\n\r\n private _useTextureToStoreTargets = true;\r\n /**\r\n * Gets or sets a boolean indicating that targets should be stored as a texture instead of using vertex attributes (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 useTextureToStoreTargets(): boolean {\r\n return this._useTextureToStoreTargets;\r\n }\r\n\r\n public set useTextureToStoreTargets(value: boolean) {\r\n this._useTextureToStoreTargets = value;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the targets are stored into a texture (instead of as attributes)\r\n */\r\n public get isUsingTextureForTargets() {\r\n return MorphTargetManager.EnableTextureStorage && this.useTextureToStoreTargets && this._canUseTextureForTargets;\r\n }\r\n\r\n /**\r\n * Gets the active target at specified index. An active target is a target with an influence > 0\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getActiveTarget(index: number): MorphTarget {\r\n return this._activeTargets.data[index];\r\n }\r\n\r\n /**\r\n * Gets the target at specified index\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getTarget(index: number): MorphTarget {\r\n return this._targets[index];\r\n }\r\n\r\n /**\r\n * Add a new target to this manager\r\n * @param target defines the target to add\r\n */\r\n public addTarget(target: MorphTarget): void {\r\n this._targets.push(target);\r\n this._targetInfluenceChangedObservers.push(\r\n target.onInfluenceChanged.add((needUpdate) => {\r\n this._syncActiveTargets(needUpdate);\r\n })\r\n );\r\n this._targetDataLayoutChangedObservers.push(\r\n target._onDataLayoutChanged.add(() => {\r\n this._syncActiveTargets(true);\r\n })\r\n );\r\n this._syncActiveTargets(true);\r\n }\r\n\r\n /**\r\n * Removes a target from the manager\r\n * @param target defines the target to remove\r\n */\r\n public removeTarget(target: MorphTarget): void {\r\n const index = this._targets.indexOf(target);\r\n if (index >= 0) {\r\n this._targets.splice(index, 1);\r\n\r\n target.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(index, 1)[0]);\r\n target._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(index, 1)[0]);\r\n this._syncActiveTargets(true);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _bind(effect: Effect) {\r\n effect.setFloat3(\"morphTargetTextureInfo\", this._textureVertexStride, this._textureWidth, this._textureHeight);\r\n effect.setFloatArray(\"morphTargetTextureIndices\", this._morphTargetTextureIndices);\r\n effect.setTexture(\"morphTargets\", this._targetStoreTexture);\r\n }\r\n\r\n /**\r\n * Clone the current manager\r\n * @returns a new MorphTargetManager\r\n */\r\n public clone(): MorphTargetManager {\r\n const copy = new MorphTargetManager(this._scene);\r\n\r\n for (const target of this._targets) {\r\n copy.addTarget(target.clone());\r\n }\r\n\r\n copy.enableNormalMorphing = this.enableNormalMorphing;\r\n copy.enableTangentMorphing = this.enableTangentMorphing;\r\n copy.enableUVMorphing = this.enableUVMorphing;\r\n\r\n return copy;\r\n }\r\n\r\n /**\r\n * Serializes the current manager into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.uniqueId;\r\n\r\n serializationObject.targets = [];\r\n for (const target of this._targets) {\r\n serializationObject.targets.push(target.serialize());\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _syncActiveTargets(needUpdate: boolean): void {\r\n if (this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n let influenceCount = 0;\r\n this._activeTargets.reset();\r\n this._supportsNormals = true;\r\n this._supportsTangents = true;\r\n this._supportsUVs = true;\r\n this._vertexCount = 0;\r\n\r\n if (!this._morphTargetTextureIndices || this._morphTargetTextureIndices.length !== this._targets.length) {\r\n this._morphTargetTextureIndices = new Float32Array(this._targets.length);\r\n }\r\n\r\n let targetIndex = -1;\r\n for (const target of this._targets) {\r\n targetIndex++;\r\n if (target.influence === 0 && this.optimizeInfluencers) {\r\n continue;\r\n }\r\n\r\n this._activeTargets.push(target);\r\n this._morphTargetTextureIndices[influenceCount] = targetIndex;\r\n this._tempInfluences[influenceCount++] = target.influence;\r\n\r\n this._supportsNormals = this._supportsNormals && target.hasNormals;\r\n this._supportsTangents = this._supportsTangents && target.hasTangents;\r\n this._supportsUVs = this._supportsUVs && target.hasUVs;\r\n\r\n const positions = target.getPositions();\r\n if (positions) {\r\n const vertexCount = positions.length / 3;\r\n if (this._vertexCount === 0) {\r\n this._vertexCount = vertexCount;\r\n } else if (this._vertexCount !== vertexCount) {\r\n Logger.Error(\"Incompatible target. Targets must all have the same vertices count.\");\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (!this._influences || this._influences.length !== influenceCount) {\r\n this._influences = new Float32Array(influenceCount);\r\n }\r\n\r\n for (let index = 0; index < influenceCount; index++) {\r\n this._influences[index] = this._tempInfluences[index];\r\n }\r\n\r\n if (needUpdate) {\r\n this.synchronize();\r\n }\r\n }\r\n\r\n /**\r\n * Synchronize the targets with all the meshes using this morph target manager\r\n */\r\n public synchronize(): void {\r\n if (!this._scene || this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n if (this.isUsingTextureForTargets && this._vertexCount) {\r\n this._textureVertexStride = 1;\r\n\r\n if (this._supportsNormals) {\r\n this._textureVertexStride++;\r\n }\r\n\r\n if (this._supportsTangents) {\r\n this._textureVertexStride++;\r\n }\r\n\r\n if (this._supportsUVs) {\r\n this._textureVertexStride++;\r\n }\r\n\r\n this._textureWidth = this._vertexCount * this._textureVertexStride;\r\n this._textureHeight = 1;\r\n\r\n const maxTextureSize = this._scene.getEngine().getCaps().maxTextureSize;\r\n if (this._textureWidth > maxTextureSize) {\r\n this._textureHeight = Math.ceil(this._textureWidth / maxTextureSize);\r\n this._textureWidth = maxTextureSize;\r\n }\r\n\r\n let mustUpdateTexture = true;\r\n if (this._targetStoreTexture) {\r\n const textureSize = this._targetStoreTexture.getSize();\r\n if (textureSize.width === this._textureWidth && textureSize.height === this._textureHeight && this._targetStoreTexture.depth === this._targets.length) {\r\n mustUpdateTexture = false;\r\n }\r\n }\r\n\r\n if (mustUpdateTexture) {\r\n if (this._targetStoreTexture) {\r\n this._targetStoreTexture.dispose();\r\n }\r\n\r\n const targetCount = this._targets.length;\r\n const data = new Float32Array(targetCount * this._textureWidth * this._textureHeight * 4);\r\n\r\n let offset = 0;\r\n for (let index = 0; index < targetCount; index++) {\r\n const target = this._targets[index];\r\n\r\n const positions = target.getPositions();\r\n const normals = target.getNormals();\r\n const uvs = target.getUVs();\r\n const tangents = target.getTangents();\r\n\r\n if (!positions) {\r\n if (index === 0) {\r\n Logger.Error(\"Invalid morph target. Target must have positions.\");\r\n }\r\n return;\r\n }\r\n\r\n offset = index * this._textureWidth * this._textureHeight * 4;\r\n for (let vertex = 0; vertex < this._vertexCount; vertex++) {\r\n data[offset] = positions[vertex * 3];\r\n data[offset + 1] = positions[vertex * 3 + 1];\r\n data[offset + 2] = positions[vertex * 3 + 2];\r\n\r\n offset += 4;\r\n\r\n if (normals) {\r\n data[offset] = normals[vertex * 3];\r\n data[offset + 1] = normals[vertex * 3 + 1];\r\n data[offset + 2] = normals[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (uvs) {\r\n data[offset] = uvs[vertex * 2];\r\n data[offset + 1] = uvs[vertex * 2 + 1];\r\n offset += 4;\r\n }\r\n\r\n if (tangents) {\r\n data[offset] = tangents[vertex * 3];\r\n data[offset + 1] = tangents[vertex * 3 + 1];\r\n data[offset + 2] = tangents[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n }\r\n }\r\n\r\n this._targetStoreTexture = RawTexture2DArray.CreateRGBATexture(\r\n data,\r\n this._textureWidth,\r\n this._textureHeight,\r\n targetCount,\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 // Flag meshes as dirty to resync with the active targets\r\n for (const mesh of this._scene.meshes) {\r\n if ((<any>mesh).morphTargetManager === this) {\r\n (<Mesh>mesh)._syncGeometryWithMorphTargetManager();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose() {\r\n if (this._targetStoreTexture) {\r\n this._targetStoreTexture.dispose();\r\n }\r\n\r\n this._targetStoreTexture = null;\r\n\r\n // Remove from scene\r\n if (this._scene) {\r\n this._scene.removeMorphTargetManager(this);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.morphTargetManagers.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.morphTargetManagers.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n }\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new MorphTargetManager from serialized data\r\n * @param serializationObject defines the serialized data\r\n * @param scene defines the hosting scene\r\n * @returns the new MorphTargetManager\r\n */\r\n public static Parse(serializationObject: any, scene: Scene): MorphTargetManager {\r\n const result = new MorphTargetManager(scene);\r\n\r\n result._uniqueId = serializationObject.id;\r\n\r\n for (const targetData of serializationObject.targets) {\r\n result.addTarget(MorphTarget.Parse(targetData, scene));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"morphTargetManager.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Morph/morphTargetManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport { MorphTarget } from \"./morphTarget\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { RawTexture2DArray } from \"../Materials/Textures/rawTexture2DArray\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\n/**\r\n * This class is used to deform meshes using morphing between different targets\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/morphTargets\r\n */\r\nexport class MorphTargetManager implements IDisposable {\r\n /** Enable storing morph target data into textures when set to true (true by default) */\r\n public static EnableTextureStorage = true;\r\n\r\n private _targets = new Array<MorphTarget>();\r\n private _targetInfluenceChangedObservers = new Array<Nullable<Observer<boolean>>>();\r\n private _targetDataLayoutChangedObservers = new Array<Nullable<Observer<void>>>();\r\n private _activeTargets = new SmartArray<MorphTarget>(16);\r\n private _scene: Nullable<Scene>;\r\n private _influences: Float32Array;\r\n private _morphTargetTextureIndices: Float32Array;\r\n private _supportsNormals = false;\r\n private _supportsTangents = false;\r\n private _supportsUVs = false;\r\n private _vertexCount = 0;\r\n private _textureVertexStride = 0;\r\n private _textureWidth = 0;\r\n private _textureHeight = 1;\r\n private _uniqueId = 0;\r\n private _tempInfluences = new Array<number>();\r\n private _canUseTextureForTargets = false;\r\n private _blockCounter = 0;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /** @internal */\r\n public _targetStoreTexture: Nullable<RawTexture2DArray>;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if influencers must be optimized (eg. recompiling the shader if less influencers are used)\r\n */\r\n public optimizeInfluencers = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals must be morphed\r\n */\r\n public enableNormalMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if tangents must be morphed\r\n */\r\n public enableTangentMorphing = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if UV must be morphed\r\n */\r\n public enableUVMorphing = true;\r\n\r\n /**\r\n * Sets a boolean indicating that adding new target or updating an existing target will not update the underlying data buffers\r\n */\r\n public set areUpdatesFrozen(block: boolean) {\r\n if (block) {\r\n this._blockCounter++;\r\n } else {\r\n this._blockCounter--;\r\n if (this._blockCounter <= 0) {\r\n this._blockCounter = 0;\r\n\r\n this._syncActiveTargets(true);\r\n }\r\n }\r\n }\r\n\r\n public get areUpdatesFrozen() {\r\n return this._blockCounter > 0;\r\n }\r\n\r\n /**\r\n * Creates a new MorphTargetManager\r\n * @param scene defines the current scene\r\n */\r\n public constructor(scene: Nullable<Scene> = null) {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n this._scene = scene;\r\n\r\n if (this._scene) {\r\n this._scene.morphTargetManagers.push(this);\r\n\r\n this._uniqueId = this._scene.getUniqueId();\r\n\r\n const engineCaps = this._scene.getEngine().getCaps();\r\n this._canUseTextureForTargets =\r\n engineCaps.canUseGLVertexID && engineCaps.textureFloat && engineCaps.maxVertexTextureImageUnits > 0 && engineCaps.texture2DArrayMaxLayerCount > 1;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the unique ID of this manager\r\n */\r\n public get uniqueId(): number {\r\n return this._uniqueId;\r\n }\r\n\r\n /**\r\n * Gets the number of vertices handled by this manager\r\n */\r\n public get vertexCount(): number {\r\n return this._vertexCount;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of normals\r\n */\r\n public get supportsNormals(): boolean {\r\n return this._supportsNormals && this.enableNormalMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of tangents\r\n */\r\n public get supportsTangents(): boolean {\r\n return this._supportsTangents && this.enableTangentMorphing;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this manager supports morphing of texture coordinates\r\n */\r\n public get supportsUVs(): boolean {\r\n return this._supportsUVs && this.enableUVMorphing;\r\n }\r\n\r\n /**\r\n * Gets the number of targets stored in this manager\r\n */\r\n public get numTargets(): number {\r\n return this._targets.length;\r\n }\r\n\r\n /**\r\n * Gets the number of influencers (ie. the number of targets with influences > 0)\r\n */\r\n public get numInfluencers(): number {\r\n return this._activeTargets.length;\r\n }\r\n\r\n /**\r\n * Gets the list of influences (one per target)\r\n */\r\n public get influences(): Float32Array {\r\n return this._influences;\r\n }\r\n\r\n private _useTextureToStoreTargets = true;\r\n /**\r\n * Gets or sets a boolean indicating that targets should be stored as a texture instead of using vertex attributes (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 useTextureToStoreTargets(): boolean {\r\n return this._useTextureToStoreTargets;\r\n }\r\n\r\n public set useTextureToStoreTargets(value: boolean) {\r\n this._useTextureToStoreTargets = value;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the targets are stored into a texture (instead of as attributes)\r\n */\r\n public get isUsingTextureForTargets() {\r\n return MorphTargetManager.EnableTextureStorage && this.useTextureToStoreTargets && this._canUseTextureForTargets;\r\n }\r\n\r\n /**\r\n * Gets the active target at specified index. An active target is a target with an influence > 0\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getActiveTarget(index: number): MorphTarget {\r\n return this._activeTargets.data[index];\r\n }\r\n\r\n /**\r\n * Gets the target at specified index\r\n * @param index defines the index to check\r\n * @returns the requested target\r\n */\r\n public getTarget(index: number): MorphTarget {\r\n return this._targets[index];\r\n }\r\n\r\n /**\r\n * Add a new target to this manager\r\n * @param target defines the target to add\r\n */\r\n public addTarget(target: MorphTarget): void {\r\n this._targets.push(target);\r\n this._targetInfluenceChangedObservers.push(\r\n target.onInfluenceChanged.add((needUpdate) => {\r\n this._syncActiveTargets(needUpdate);\r\n })\r\n );\r\n this._targetDataLayoutChangedObservers.push(\r\n target._onDataLayoutChanged.add(() => {\r\n this._syncActiveTargets(true);\r\n })\r\n );\r\n this._syncActiveTargets(true);\r\n }\r\n\r\n /**\r\n * Removes a target from the manager\r\n * @param target defines the target to remove\r\n */\r\n public removeTarget(target: MorphTarget): void {\r\n const index = this._targets.indexOf(target);\r\n if (index >= 0) {\r\n this._targets.splice(index, 1);\r\n\r\n target.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(index, 1)[0]);\r\n target._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(index, 1)[0]);\r\n this._syncActiveTargets(true);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _bind(effect: Effect) {\r\n effect.setFloat3(\"morphTargetTextureInfo\", this._textureVertexStride, this._textureWidth, this._textureHeight);\r\n effect.setFloatArray(\"morphTargetTextureIndices\", this._morphTargetTextureIndices);\r\n effect.setTexture(\"morphTargets\", this._targetStoreTexture);\r\n }\r\n\r\n /**\r\n * Clone the current manager\r\n * @returns a new MorphTargetManager\r\n */\r\n public clone(): MorphTargetManager {\r\n const copy = new MorphTargetManager(this._scene);\r\n\r\n for (const target of this._targets) {\r\n copy.addTarget(target.clone());\r\n }\r\n\r\n copy.enableNormalMorphing = this.enableNormalMorphing;\r\n copy.enableTangentMorphing = this.enableTangentMorphing;\r\n copy.enableUVMorphing = this.enableUVMorphing;\r\n\r\n return copy;\r\n }\r\n\r\n /**\r\n * Serializes the current manager into a Serialization object\r\n * @returns the serialized object\r\n */\r\n public serialize(): any {\r\n const serializationObject: any = {};\r\n\r\n serializationObject.id = this.uniqueId;\r\n\r\n serializationObject.targets = [];\r\n for (const target of this._targets) {\r\n serializationObject.targets.push(target.serialize());\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _syncActiveTargets(needUpdate: boolean): void {\r\n if (this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n let influenceCount = 0;\r\n this._activeTargets.reset();\r\n this._supportsNormals = true;\r\n this._supportsTangents = true;\r\n this._supportsUVs = true;\r\n this._vertexCount = 0;\r\n\r\n if (!this._morphTargetTextureIndices || this._morphTargetTextureIndices.length !== this._targets.length) {\r\n this._morphTargetTextureIndices = new Float32Array(this._targets.length);\r\n }\r\n\r\n let targetIndex = -1;\r\n for (const target of this._targets) {\r\n targetIndex++;\r\n if (target.influence === 0 && this.optimizeInfluencers) {\r\n continue;\r\n }\r\n\r\n this._activeTargets.push(target);\r\n this._morphTargetTextureIndices[influenceCount] = targetIndex;\r\n this._tempInfluences[influenceCount++] = target.influence;\r\n\r\n this._supportsNormals = this._supportsNormals && target.hasNormals;\r\n this._supportsTangents = this._supportsTangents && target.hasTangents;\r\n this._supportsUVs = this._supportsUVs && target.hasUVs;\r\n\r\n const positions = target.getPositions();\r\n if (positions) {\r\n const vertexCount = positions.length / 3;\r\n if (this._vertexCount === 0) {\r\n this._vertexCount = vertexCount;\r\n } else if (this._vertexCount !== vertexCount) {\r\n Logger.Error(\"Incompatible target. Targets must all have the same vertices count.\");\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (!this._influences || this._influences.length !== influenceCount) {\r\n this._influences = new Float32Array(influenceCount);\r\n }\r\n\r\n for (let index = 0; index < influenceCount; index++) {\r\n this._influences[index] = this._tempInfluences[index];\r\n }\r\n\r\n if (needUpdate) {\r\n this.synchronize();\r\n }\r\n }\r\n\r\n /**\r\n * Synchronize the targets with all the meshes using this morph target manager\r\n */\r\n public synchronize(): void {\r\n if (!this._scene || this.areUpdatesFrozen) {\r\n return;\r\n }\r\n\r\n if (this.isUsingTextureForTargets && this._vertexCount) {\r\n this._textureVertexStride = 1;\r\n\r\n if (this._supportsNormals) {\r\n this._textureVertexStride++;\r\n }\r\n\r\n if (this._supportsTangents) {\r\n this._textureVertexStride++;\r\n }\r\n\r\n if (this._supportsUVs) {\r\n this._textureVertexStride++;\r\n }\r\n\r\n this._textureWidth = this._vertexCount * this._textureVertexStride;\r\n this._textureHeight = 1;\r\n\r\n const maxTextureSize = this._scene.getEngine().getCaps().maxTextureSize;\r\n if (this._textureWidth > maxTextureSize) {\r\n this._textureHeight = Math.ceil(this._textureWidth / maxTextureSize);\r\n this._textureWidth = maxTextureSize;\r\n }\r\n\r\n let mustUpdateTexture = true;\r\n if (this._targetStoreTexture) {\r\n const textureSize = this._targetStoreTexture.getSize();\r\n if (textureSize.width === this._textureWidth && textureSize.height === this._textureHeight && this._targetStoreTexture.depth === this._targets.length) {\r\n mustUpdateTexture = false;\r\n }\r\n }\r\n\r\n if (mustUpdateTexture) {\r\n if (this._targetStoreTexture) {\r\n this._targetStoreTexture.dispose();\r\n }\r\n\r\n const targetCount = this._targets.length;\r\n const data = new Float32Array(targetCount * this._textureWidth * this._textureHeight * 4);\r\n\r\n let offset = 0;\r\n for (let index = 0; index < targetCount; index++) {\r\n const target = this._targets[index];\r\n\r\n const positions = target.getPositions();\r\n const normals = target.getNormals();\r\n const uvs = target.getUVs();\r\n const tangents = target.getTangents();\r\n\r\n if (!positions) {\r\n if (index === 0) {\r\n Logger.Error(\"Invalid morph target. Target must have positions.\");\r\n }\r\n return;\r\n }\r\n\r\n offset = index * this._textureWidth * this._textureHeight * 4;\r\n for (let vertex = 0; vertex < this._vertexCount; vertex++) {\r\n data[offset] = positions[vertex * 3];\r\n data[offset + 1] = positions[vertex * 3 + 1];\r\n data[offset + 2] = positions[vertex * 3 + 2];\r\n\r\n offset += 4;\r\n\r\n if (normals) {\r\n data[offset] = normals[vertex * 3];\r\n data[offset + 1] = normals[vertex * 3 + 1];\r\n data[offset + 2] = normals[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n\r\n if (uvs) {\r\n data[offset] = uvs[vertex * 2];\r\n data[offset + 1] = uvs[vertex * 2 + 1];\r\n offset += 4;\r\n }\r\n\r\n if (tangents) {\r\n data[offset] = tangents[vertex * 3];\r\n data[offset + 1] = tangents[vertex * 3 + 1];\r\n data[offset + 2] = tangents[vertex * 3 + 2];\r\n offset += 4;\r\n }\r\n }\r\n }\r\n\r\n this._targetStoreTexture = RawTexture2DArray.CreateRGBATexture(\r\n data,\r\n this._textureWidth,\r\n this._textureHeight,\r\n targetCount,\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 // Flag meshes as dirty to resync with the active targets\r\n for (const mesh of this._scene.meshes) {\r\n if ((<any>mesh).morphTargetManager === this) {\r\n (<Mesh>mesh)._syncGeometryWithMorphTargetManager();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose() {\r\n if (this._targetStoreTexture) {\r\n this._targetStoreTexture.dispose();\r\n }\r\n\r\n this._targetStoreTexture = null;\r\n\r\n // Remove from scene\r\n if (this._scene) {\r\n this._scene.removeMorphTargetManager(this);\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.morphTargetManagers.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.morphTargetManagers.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n }\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new MorphTargetManager from serialized data\r\n * @param serializationObject defines the serialized data\r\n * @param scene defines the hosting scene\r\n * @returns the new MorphTargetManager\r\n */\r\n public static Parse(serializationObject: any, scene: Scene): MorphTargetManager {\r\n const result = new MorphTargetManager(scene);\r\n\r\n result._uniqueId = serializationObject.id;\r\n\r\n for (const targetData of serializationObject.targets) {\r\n result.addTarget(MorphTarget.Parse(targetData, scene));\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IOfflineProvider.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Offline/IOfflineProvider.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Class used to enable access to offline support\r\n * @see https://doc.babylonjs.com/
|
|
1
|
+
{"version":3,"file":"IOfflineProvider.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Offline/IOfflineProvider.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Class used to enable access to offline support\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimizeCached\r\n */\r\nexport interface IOfflineProvider {\r\n /**\r\n * Gets a boolean indicating if scene must be saved in the database\r\n */\r\n enableSceneOffline: boolean;\r\n\r\n /**\r\n * Gets a boolean indicating if textures must be saved in the database\r\n */\r\n enableTexturesOffline: boolean;\r\n\r\n /**\r\n * Open the offline support and make it available\r\n * @param successCallback defines the callback to call on success\r\n * @param errorCallback defines the callback to call on error\r\n */\r\n open(successCallback: () => void, errorCallback: () => void): void;\r\n\r\n /**\r\n * Loads an image from the offline support\r\n * @param url defines the url to load from\r\n * @param image defines the target DOM image\r\n */\r\n loadImage(url: string, image: HTMLImageElement): void;\r\n\r\n /**\r\n * Loads a file from offline support\r\n * @param url defines the URL to load from\r\n * @param sceneLoaded defines a callback to call on success\r\n * @param progressCallBack defines a callback to call when progress changed\r\n * @param errorCallback defines a callback to call on error\r\n * @param useArrayBuffer defines a boolean to use array buffer instead of text string\r\n */\r\n loadFile(url: string, sceneLoaded: (data: any) => void, progressCallBack?: (data: any) => void, errorCallback?: () => void, useArrayBuffer?: boolean): void;\r\n}\r\n"]}
|
package/Offline/database.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { IOfflineProvider } from "./IOfflineProvider";
|
|
2
2
|
/**
|
|
3
3
|
* Class used to enable access to IndexedDB
|
|
4
|
-
* @see https://doc.babylonjs.com/
|
|
4
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimizeCached
|
|
5
5
|
*/
|
|
6
6
|
export declare class Database implements IOfflineProvider {
|
|
7
7
|
private _currentSceneUrl;
|
package/Offline/database.js
CHANGED
|
@@ -9,7 +9,7 @@ Engine.OfflineProviderFactory = (urlToScene, callbackManifestChecked, disableMan
|
|
|
9
9
|
};
|
|
10
10
|
/**
|
|
11
11
|
* Class used to enable access to IndexedDB
|
|
12
|
-
* @see https://doc.babylonjs.com/
|
|
12
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimizeCached
|
|
13
13
|
*/
|
|
14
14
|
export class Database {
|
|
15
15
|
/**
|
package/Offline/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Offline/database.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { GetTGAHeader } from \"../Misc/tga\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport type { IOfflineProvider } from \"./IOfflineProvider\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\n\r\n// Sets the default offline provider to Babylon.js\r\nEngine.OfflineProviderFactory = (urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) => {\r\n return new Database(urlToScene, callbackManifestChecked, disableManifestCheck);\r\n};\r\n\r\n/**\r\n * Class used to enable access to IndexedDB\r\n * @see https://doc.babylonjs.com/how_to/caching_resources_in_indexeddb\r\n */\r\nexport class Database implements IOfflineProvider {\r\n private _currentSceneUrl: string;\r\n private _db: Nullable<IDBDatabase>;\r\n private _enableSceneOffline: boolean;\r\n private _enableTexturesOffline: boolean;\r\n private _manifestVersionFound: number;\r\n private _mustUpdateRessources: boolean;\r\n private _hasReachedQuota: boolean;\r\n private _isSupported: boolean;\r\n\r\n // Handling various flavors of prefixed version of IndexedDB\r\n private _idbFactory = <IDBFactory>(typeof indexedDB !== \"undefined\" ? indexedDB : undefined);\r\n\r\n /** Gets a boolean indicating if the user agent supports blob storage (this value will be updated after creating the first Database object) */\r\n private static _IsUASupportingBlobStorage = true;\r\n\r\n /**\r\n * Gets a boolean indicating if Database storage is enabled (off by default)\r\n */\r\n static IDBStorageEnabled = false;\r\n\r\n /**\r\n * Gets a boolean indicating if scene must be saved in the database\r\n */\r\n public get enableSceneOffline(): boolean {\r\n return this._enableSceneOffline;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if textures must be saved in the database\r\n */\r\n public get enableTexturesOffline(): boolean {\r\n return this._enableTexturesOffline;\r\n }\r\n\r\n /**\r\n * Creates a new Database\r\n * @param urlToScene defines the url to load the scene\r\n * @param callbackManifestChecked defines the callback to use when manifest is checked\r\n * @param disableManifestCheck defines a boolean indicating that we want to skip the manifest validation (it will be considered validated and up to date)\r\n */\r\n constructor(urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) {\r\n this._currentSceneUrl = Database._ReturnFullUrlLocation(urlToScene);\r\n this._db = null;\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n this._manifestVersionFound = 0;\r\n this._mustUpdateRessources = false;\r\n this._hasReachedQuota = false;\r\n\r\n if (!Database.IDBStorageEnabled) {\r\n callbackManifestChecked(true);\r\n } else {\r\n if (disableManifestCheck) {\r\n this._enableSceneOffline = true;\r\n this._enableTexturesOffline = true;\r\n this._manifestVersionFound = 1;\r\n Tools.SetImmediate(() => {\r\n callbackManifestChecked(true);\r\n });\r\n } else {\r\n this._checkManifestFile(callbackManifestChecked);\r\n }\r\n }\r\n }\r\n\r\n private static _ParseURL = (url: string) => {\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n const urlWithoutHash = url.substring(0, url.lastIndexOf(\"#\"));\r\n const fileName = url.substring(urlWithoutHash.lastIndexOf(\"/\") + 1, url.length);\r\n const absLocation = url.substring(0, url.indexOf(fileName, 0));\r\n return absLocation;\r\n };\r\n\r\n private static _ReturnFullUrlLocation = (url: string): string => {\r\n if (url.indexOf(\"http:/\") === -1 && url.indexOf(\"https:/\") === -1 && typeof window !== \"undefined\") {\r\n return Database._ParseURL(window.location.href) + url;\r\n } else {\r\n return url;\r\n }\r\n };\r\n\r\n private _checkManifestFile(callbackManifestChecked: (checked: boolean) => any) {\r\n const noManifestFile = () => {\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n callbackManifestChecked(false);\r\n };\r\n\r\n const createManifestURL = (): string => {\r\n try {\r\n // make sure we have a valid URL.\r\n if (typeof URL === \"function\" && this._currentSceneUrl.indexOf(\"http\") === 0) {\r\n // we don't have the base url, so the URL string must have a protocol\r\n const url = new URL(this._currentSceneUrl);\r\n url.pathname += \".manifest\";\r\n return url.toString();\r\n }\r\n } catch (e) {\r\n // defensive - if this fails for any reason, fall back to the older method\r\n }\r\n\r\n return `${this._currentSceneUrl}.manifest`;\r\n };\r\n\r\n let timeStampUsed = false;\r\n let manifestURL = createManifestURL();\r\n\r\n const xhr = new WebRequest();\r\n\r\n if (navigator.onLine) {\r\n // Adding a timestamp to by-pass browsers' cache\r\n timeStampUsed = true;\r\n manifestURL = manifestURL + (manifestURL.match(/\\?/) == null ? \"?\" : \"&\") + Date.now();\r\n }\r\n xhr.open(\"GET\", manifestURL);\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || Database._ValidateXHRData(xhr, 1)) {\r\n try {\r\n const manifestFile = JSON.parse(xhr.response);\r\n this._enableSceneOffline = manifestFile.enableSceneOffline;\r\n this._enableTexturesOffline = manifestFile.enableTexturesOffline && Database._IsUASupportingBlobStorage;\r\n if (manifestFile.version && !isNaN(parseInt(manifestFile.version))) {\r\n this._manifestVersionFound = manifestFile.version;\r\n }\r\n callbackManifestChecked(true);\r\n } catch (ex) {\r\n noManifestFile();\r\n }\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n if (timeStampUsed) {\r\n timeStampUsed = false;\r\n // Let's retry without the timeStamp\r\n // It could fail when coupled with HTML5 Offline API\r\n const retryManifestURL = createManifestURL();\r\n xhr.open(\"GET\", retryManifestURL);\r\n xhr.send();\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n try {\r\n xhr.send();\r\n } catch (ex) {\r\n Logger.Error(\"Error on XHR send request.\");\r\n callbackManifestChecked(false);\r\n }\r\n }\r\n\r\n /**\r\n * Open the database and make it available\r\n * @param successCallback defines the callback to call on success\r\n * @param errorCallback defines the callback to call on error\r\n */\r\n public open(successCallback: () => void, errorCallback: () => void): void {\r\n const handleError = () => {\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n };\r\n\r\n if (!this._idbFactory || !(this._enableSceneOffline || this._enableTexturesOffline)) {\r\n // Your browser doesn't support IndexedDB\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n } else {\r\n // If the DB hasn't been opened or created yet\r\n if (!this._db) {\r\n this._hasReachedQuota = false;\r\n this._isSupported = true;\r\n\r\n const request: IDBOpenDBRequest = this._idbFactory.open(\"babylonjs\", 1);\r\n\r\n // Could occur if user is blocking the quota for the DB and/or doesn't grant access to IndexedDB\r\n request.onerror = () => {\r\n handleError();\r\n };\r\n\r\n // executes when a version change transaction cannot complete due to other active transactions\r\n request.onblocked = () => {\r\n Logger.Error(\"IDB request blocked. Please reload the page.\");\r\n handleError();\r\n };\r\n\r\n // DB has been opened successfully\r\n request.onsuccess = () => {\r\n this._db = request.result;\r\n successCallback();\r\n };\r\n\r\n // Initialization of the DB. Creating Scenes & Textures stores\r\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\r\n this._db = (<any>event.target).result;\r\n if (this._db) {\r\n try {\r\n this._db.createObjectStore(\"scenes\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"versions\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"textures\", { keyPath: \"textureUrl\" });\r\n } catch (ex) {\r\n Logger.Error(\"Error while creating object stores. Exception: \" + ex.message);\r\n handleError();\r\n }\r\n }\r\n };\r\n }\r\n // DB has already been created and opened\r\n else {\r\n if (successCallback) {\r\n successCallback();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads an image from the database\r\n * @param url defines the url to load from\r\n * @param image defines the target DOM image\r\n */\r\n public loadImage(url: string, image: HTMLImageElement) {\r\n const completeURL = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadImage = () => {\r\n if (!this._hasReachedQuota && this._db !== null) {\r\n // the texture is not yet in the DB, let's try to save it\r\n this._saveImageIntoDBAsync(completeURL, image);\r\n }\r\n // If the texture is not in the DB and we've reached the DB quota limit\r\n // let's load it directly from the web\r\n else {\r\n image.src = url;\r\n }\r\n };\r\n\r\n if (!this._mustUpdateRessources) {\r\n this._loadImageFromDBAsync(completeURL, image, saveAndLoadImage);\r\n }\r\n // First time we're download the images or update requested in the manifest file by a version change\r\n else {\r\n saveAndLoadImage();\r\n }\r\n }\r\n\r\n private _loadImageFromDBAsync(url: string, image: HTMLImageElement, notInDBCallback: () => any) {\r\n if (this._isSupported && this._db !== null) {\r\n let texture: any;\r\n const transaction: IDBTransaction = this._db.transaction([\"textures\"]);\r\n\r\n transaction.onabort = () => {\r\n image.src = url;\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n let blobTextureURL: string;\r\n if (texture && typeof URL === \"function\") {\r\n blobTextureURL = URL.createObjectURL(texture.data);\r\n image.onerror = () => {\r\n Logger.Error(\"Error loading image from blob URL: \" + blobTextureURL + \" switching back to web url: \" + url);\r\n image.src = url;\r\n };\r\n image.src = blobTextureURL;\r\n } else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n const getRequest: IDBRequest = transaction.objectStore(\"textures\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n texture = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading texture \" + url + \" from DB.\");\r\n image.src = url;\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _saveImageIntoDBAsync(url: string, image: HTMLImageElement) {\r\n let blob: Blob;\r\n\r\n if (this._isSupported) {\r\n // In case of error (type not supported or quota exceeded), we're at least sending back XHR data to allow texture loading later on\r\n const generateBlobUrl = () => {\r\n let blobTextureURL;\r\n\r\n if (blob && typeof URL === \"function\") {\r\n try {\r\n blobTextureURL = URL.createObjectURL(blob);\r\n } catch (ex) {\r\n // Chrome is raising a type error if we're setting the oneTimeOnly parameter\r\n blobTextureURL = URL.createObjectURL(blob);\r\n }\r\n }\r\n\r\n if (blobTextureURL) {\r\n image.src = blobTextureURL;\r\n }\r\n };\r\n\r\n if (Database._IsUASupportingBlobStorage) {\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n\r\n xhr.open(\"GET\", url);\r\n xhr.responseType = \"blob\";\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 && this._db) {\r\n // Blob as response\r\n blob = xhr.response;\r\n\r\n const transaction = this._db.transaction([\"textures\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const srcElement = <any>event.target;\r\n const error = srcElement.error;\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n generateBlobUrl();\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n generateBlobUrl();\r\n };\r\n\r\n const newTexture = { textureUrl: url, data: blob };\r\n\r\n try {\r\n // Put the blob into the dabase\r\n const addRequest = transaction.objectStore(\"textures\").put(newTexture);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n generateBlobUrl();\r\n };\r\n } catch (ex) {\r\n // \"DataCloneError\" generated by Chrome when you try to inject blob into IndexedDB\r\n if (ex.code === 25) {\r\n Database._IsUASupportingBlobStorage = false;\r\n this._enableTexturesOffline = false;\r\n }\r\n image.src = url;\r\n }\r\n } else {\r\n image.src = url;\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"Error in XHR request in BABYLON.Database.\");\r\n image.src = url;\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n image.src = url;\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _checkVersionFromDB(url: string, versionLoaded: (version: number) => void) {\r\n const updateVersion = () => {\r\n // the version is not yet in the DB or we need to update it\r\n this._saveVersionIntoDBAsync(url, versionLoaded);\r\n };\r\n this._loadVersionFromDBAsync(url, versionLoaded, updateVersion);\r\n }\r\n\r\n private _loadVersionFromDBAsync(url: string, callback: (version: number) => void, updateInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let version: any;\r\n try {\r\n const transaction = this._db.transaction([\"versions\"]);\r\n\r\n transaction.oncomplete = () => {\r\n if (version) {\r\n // If the version in the JSON file is different from the version in DB\r\n if (this._manifestVersionFound !== version.data) {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n } else {\r\n callback(version.data);\r\n }\r\n }\r\n // version was not found in DB\r\n else {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n callback(-1);\r\n };\r\n\r\n const getRequest = transaction.objectStore(\"versions\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n version = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading version for scene \" + url + \" from DB.\");\r\n callback(-1);\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (READ OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n callback(-1);\r\n }\r\n }\r\n\r\n private _saveVersionIntoDBAsync(url: string, callback: (version: number) => void) {\r\n if (this._isSupported && !this._hasReachedQuota && this._db) {\r\n try {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([\"versions\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.target)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(-1);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(this._manifestVersionFound);\r\n };\r\n\r\n const newVersion = { sceneUrl: url, data: this._manifestVersionFound };\r\n\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(\"versions\").put(newVersion);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add version request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (WRITE OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n callback(-1);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a file from database\r\n * @param url defines the URL to load from\r\n * @param sceneLoaded defines a callback to call on success\r\n * @param progressCallBack defines a callback to call when progress changed\r\n * @param errorCallback defines a callback to call on error\r\n * @param useArrayBuffer defines a boolean to use array buffer instead of text string\r\n */\r\n public loadFile(url: string, sceneLoaded: (data: any) => void, progressCallBack?: (data: any) => void, errorCallback?: () => void, useArrayBuffer?: boolean): void {\r\n const completeUrl = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadFile = () => {\r\n // the scene is not yet in the DB, let's try to save it\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n };\r\n\r\n this._checkVersionFromDB(completeUrl, (version) => {\r\n if (version !== -1) {\r\n if (!this._mustUpdateRessources) {\r\n this._loadFileAsync(completeUrl, sceneLoaded, saveAndLoadFile);\r\n } else {\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n }\r\n } else {\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _loadFileAsync(url: string, callback: (data?: any) => void, notInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n let file: any;\r\n const transaction = this._db.transaction([targetStore]);\r\n\r\n transaction.oncomplete = () => {\r\n if (file) {\r\n callback(file.data);\r\n }\r\n // file was not found in DB\r\n else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n notInDBCallback();\r\n };\r\n\r\n const getRequest = transaction.objectStore(targetStore).get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n file = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading file \" + url + \" from DB.\");\r\n notInDBCallback();\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n callback();\r\n }\r\n }\r\n\r\n private _saveFileAsync(\r\n url: string,\r\n callback: (data?: any) => void,\r\n progressCallback?: (this: XMLHttpRequestEventTarget, ev: ProgressEvent) => any,\r\n useArrayBuffer?: boolean,\r\n errorCallback?: (data?: any) => void\r\n ) {\r\n if (this._isSupported) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n let fileData: any;\r\n xhr.open(\"GET\", url + (url.match(/\\?/) == null ? \"?\" : \"&\") + Date.now());\r\n\r\n if (useArrayBuffer) {\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (progressCallback) {\r\n xhr.onprogress = progressCallback;\r\n }\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || (xhr.status < 400 && Database._ValidateXHRData(xhr, !useArrayBuffer ? 1 : 6))) {\r\n // Blob as response\r\n fileData = !useArrayBuffer ? xhr.responseText : xhr.response;\r\n\r\n if (!this._hasReachedQuota && this._db) {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([targetStore], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.target)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(fileData);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(fileData);\r\n };\r\n\r\n let newFile;\r\n if (targetStore === \"scenes\") {\r\n newFile = { sceneUrl: url, data: fileData, version: this._manifestVersionFound };\r\n } else {\r\n newFile = { textureUrl: url, data: fileData };\r\n }\r\n\r\n try {\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(targetStore).put(newFile);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add file request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n callback(fileData);\r\n }\r\n } else {\r\n callback(fileData);\r\n }\r\n } else {\r\n if (xhr.status >= 400 && errorCallback) {\r\n errorCallback(xhr);\r\n } else {\r\n callback();\r\n }\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"error on XHR request.\");\r\n errorCallback && errorCallback();\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n errorCallback && errorCallback();\r\n }\r\n }\r\n\r\n /**\r\n * Validates if xhr data is correct\r\n * @param xhr defines the request to validate\r\n * @param dataType defines the expected data type\r\n * @returns true if data is correct\r\n */\r\n private static _ValidateXHRData(xhr: WebRequest, dataType = 7): boolean {\r\n // 1 for text (.babylon, manifest and shaders), 2 for TGA, 4 for DDS, 7 for all\r\n\r\n try {\r\n if (dataType & 1) {\r\n if (xhr.responseText && xhr.responseText.length > 0) {\r\n return true;\r\n } else if (dataType === 1) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 2) {\r\n // Check header width and height since there is no \"TGA\" magic number\r\n const tgaHeader = GetTGAHeader(xhr.response);\r\n\r\n if (tgaHeader.width && tgaHeader.height && tgaHeader.width > 0 && tgaHeader.height > 0) {\r\n return true;\r\n } else if (dataType === 2) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 4) {\r\n // Check for the \"DDS\" magic number\r\n const ddsHeader = new Uint8Array(xhr.response, 0, 3);\r\n\r\n if (ddsHeader[0] === 68 && ddsHeader[1] === 68 && ddsHeader[2] === 83) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n } catch (e) {\r\n // Global protection\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Offline/database.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { GetTGAHeader } from \"../Misc/tga\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport type { IOfflineProvider } from \"./IOfflineProvider\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\n\r\n// Sets the default offline provider to Babylon.js\r\nEngine.OfflineProviderFactory = (urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) => {\r\n return new Database(urlToScene, callbackManifestChecked, disableManifestCheck);\r\n};\r\n\r\n/**\r\n * Class used to enable access to IndexedDB\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimizeCached\r\n */\r\nexport class Database implements IOfflineProvider {\r\n private _currentSceneUrl: string;\r\n private _db: Nullable<IDBDatabase>;\r\n private _enableSceneOffline: boolean;\r\n private _enableTexturesOffline: boolean;\r\n private _manifestVersionFound: number;\r\n private _mustUpdateRessources: boolean;\r\n private _hasReachedQuota: boolean;\r\n private _isSupported: boolean;\r\n\r\n // Handling various flavors of prefixed version of IndexedDB\r\n private _idbFactory = <IDBFactory>(typeof indexedDB !== \"undefined\" ? indexedDB : undefined);\r\n\r\n /** Gets a boolean indicating if the user agent supports blob storage (this value will be updated after creating the first Database object) */\r\n private static _IsUASupportingBlobStorage = true;\r\n\r\n /**\r\n * Gets a boolean indicating if Database storage is enabled (off by default)\r\n */\r\n static IDBStorageEnabled = false;\r\n\r\n /**\r\n * Gets a boolean indicating if scene must be saved in the database\r\n */\r\n public get enableSceneOffline(): boolean {\r\n return this._enableSceneOffline;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if textures must be saved in the database\r\n */\r\n public get enableTexturesOffline(): boolean {\r\n return this._enableTexturesOffline;\r\n }\r\n\r\n /**\r\n * Creates a new Database\r\n * @param urlToScene defines the url to load the scene\r\n * @param callbackManifestChecked defines the callback to use when manifest is checked\r\n * @param disableManifestCheck defines a boolean indicating that we want to skip the manifest validation (it will be considered validated and up to date)\r\n */\r\n constructor(urlToScene: string, callbackManifestChecked: (checked: boolean) => any, disableManifestCheck = false) {\r\n this._currentSceneUrl = Database._ReturnFullUrlLocation(urlToScene);\r\n this._db = null;\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n this._manifestVersionFound = 0;\r\n this._mustUpdateRessources = false;\r\n this._hasReachedQuota = false;\r\n\r\n if (!Database.IDBStorageEnabled) {\r\n callbackManifestChecked(true);\r\n } else {\r\n if (disableManifestCheck) {\r\n this._enableSceneOffline = true;\r\n this._enableTexturesOffline = true;\r\n this._manifestVersionFound = 1;\r\n Tools.SetImmediate(() => {\r\n callbackManifestChecked(true);\r\n });\r\n } else {\r\n this._checkManifestFile(callbackManifestChecked);\r\n }\r\n }\r\n }\r\n\r\n private static _ParseURL = (url: string) => {\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n const urlWithoutHash = url.substring(0, url.lastIndexOf(\"#\"));\r\n const fileName = url.substring(urlWithoutHash.lastIndexOf(\"/\") + 1, url.length);\r\n const absLocation = url.substring(0, url.indexOf(fileName, 0));\r\n return absLocation;\r\n };\r\n\r\n private static _ReturnFullUrlLocation = (url: string): string => {\r\n if (url.indexOf(\"http:/\") === -1 && url.indexOf(\"https:/\") === -1 && typeof window !== \"undefined\") {\r\n return Database._ParseURL(window.location.href) + url;\r\n } else {\r\n return url;\r\n }\r\n };\r\n\r\n private _checkManifestFile(callbackManifestChecked: (checked: boolean) => any) {\r\n const noManifestFile = () => {\r\n this._enableSceneOffline = false;\r\n this._enableTexturesOffline = false;\r\n callbackManifestChecked(false);\r\n };\r\n\r\n const createManifestURL = (): string => {\r\n try {\r\n // make sure we have a valid URL.\r\n if (typeof URL === \"function\" && this._currentSceneUrl.indexOf(\"http\") === 0) {\r\n // we don't have the base url, so the URL string must have a protocol\r\n const url = new URL(this._currentSceneUrl);\r\n url.pathname += \".manifest\";\r\n return url.toString();\r\n }\r\n } catch (e) {\r\n // defensive - if this fails for any reason, fall back to the older method\r\n }\r\n\r\n return `${this._currentSceneUrl}.manifest`;\r\n };\r\n\r\n let timeStampUsed = false;\r\n let manifestURL = createManifestURL();\r\n\r\n const xhr = new WebRequest();\r\n\r\n if (navigator.onLine) {\r\n // Adding a timestamp to by-pass browsers' cache\r\n timeStampUsed = true;\r\n manifestURL = manifestURL + (manifestURL.match(/\\?/) == null ? \"?\" : \"&\") + Date.now();\r\n }\r\n xhr.open(\"GET\", manifestURL);\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || Database._ValidateXHRData(xhr, 1)) {\r\n try {\r\n const manifestFile = JSON.parse(xhr.response);\r\n this._enableSceneOffline = manifestFile.enableSceneOffline;\r\n this._enableTexturesOffline = manifestFile.enableTexturesOffline && Database._IsUASupportingBlobStorage;\r\n if (manifestFile.version && !isNaN(parseInt(manifestFile.version))) {\r\n this._manifestVersionFound = manifestFile.version;\r\n }\r\n callbackManifestChecked(true);\r\n } catch (ex) {\r\n noManifestFile();\r\n }\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n if (timeStampUsed) {\r\n timeStampUsed = false;\r\n // Let's retry without the timeStamp\r\n // It could fail when coupled with HTML5 Offline API\r\n const retryManifestURL = createManifestURL();\r\n xhr.open(\"GET\", retryManifestURL);\r\n xhr.send();\r\n } else {\r\n noManifestFile();\r\n }\r\n },\r\n false\r\n );\r\n\r\n try {\r\n xhr.send();\r\n } catch (ex) {\r\n Logger.Error(\"Error on XHR send request.\");\r\n callbackManifestChecked(false);\r\n }\r\n }\r\n\r\n /**\r\n * Open the database and make it available\r\n * @param successCallback defines the callback to call on success\r\n * @param errorCallback defines the callback to call on error\r\n */\r\n public open(successCallback: () => void, errorCallback: () => void): void {\r\n const handleError = () => {\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n };\r\n\r\n if (!this._idbFactory || !(this._enableSceneOffline || this._enableTexturesOffline)) {\r\n // Your browser doesn't support IndexedDB\r\n this._isSupported = false;\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n } else {\r\n // If the DB hasn't been opened or created yet\r\n if (!this._db) {\r\n this._hasReachedQuota = false;\r\n this._isSupported = true;\r\n\r\n const request: IDBOpenDBRequest = this._idbFactory.open(\"babylonjs\", 1);\r\n\r\n // Could occur if user is blocking the quota for the DB and/or doesn't grant access to IndexedDB\r\n request.onerror = () => {\r\n handleError();\r\n };\r\n\r\n // executes when a version change transaction cannot complete due to other active transactions\r\n request.onblocked = () => {\r\n Logger.Error(\"IDB request blocked. Please reload the page.\");\r\n handleError();\r\n };\r\n\r\n // DB has been opened successfully\r\n request.onsuccess = () => {\r\n this._db = request.result;\r\n successCallback();\r\n };\r\n\r\n // Initialization of the DB. Creating Scenes & Textures stores\r\n request.onupgradeneeded = (event: IDBVersionChangeEvent) => {\r\n this._db = (<any>event.target).result;\r\n if (this._db) {\r\n try {\r\n this._db.createObjectStore(\"scenes\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"versions\", { keyPath: \"sceneUrl\" });\r\n this._db.createObjectStore(\"textures\", { keyPath: \"textureUrl\" });\r\n } catch (ex) {\r\n Logger.Error(\"Error while creating object stores. Exception: \" + ex.message);\r\n handleError();\r\n }\r\n }\r\n };\r\n }\r\n // DB has already been created and opened\r\n else {\r\n if (successCallback) {\r\n successCallback();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads an image from the database\r\n * @param url defines the url to load from\r\n * @param image defines the target DOM image\r\n */\r\n public loadImage(url: string, image: HTMLImageElement) {\r\n const completeURL = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadImage = () => {\r\n if (!this._hasReachedQuota && this._db !== null) {\r\n // the texture is not yet in the DB, let's try to save it\r\n this._saveImageIntoDBAsync(completeURL, image);\r\n }\r\n // If the texture is not in the DB and we've reached the DB quota limit\r\n // let's load it directly from the web\r\n else {\r\n image.src = url;\r\n }\r\n };\r\n\r\n if (!this._mustUpdateRessources) {\r\n this._loadImageFromDBAsync(completeURL, image, saveAndLoadImage);\r\n }\r\n // First time we're download the images or update requested in the manifest file by a version change\r\n else {\r\n saveAndLoadImage();\r\n }\r\n }\r\n\r\n private _loadImageFromDBAsync(url: string, image: HTMLImageElement, notInDBCallback: () => any) {\r\n if (this._isSupported && this._db !== null) {\r\n let texture: any;\r\n const transaction: IDBTransaction = this._db.transaction([\"textures\"]);\r\n\r\n transaction.onabort = () => {\r\n image.src = url;\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n let blobTextureURL: string;\r\n if (texture && typeof URL === \"function\") {\r\n blobTextureURL = URL.createObjectURL(texture.data);\r\n image.onerror = () => {\r\n Logger.Error(\"Error loading image from blob URL: \" + blobTextureURL + \" switching back to web url: \" + url);\r\n image.src = url;\r\n };\r\n image.src = blobTextureURL;\r\n } else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n const getRequest: IDBRequest = transaction.objectStore(\"textures\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n texture = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading texture \" + url + \" from DB.\");\r\n image.src = url;\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _saveImageIntoDBAsync(url: string, image: HTMLImageElement) {\r\n let blob: Blob;\r\n\r\n if (this._isSupported) {\r\n // In case of error (type not supported or quota exceeded), we're at least sending back XHR data to allow texture loading later on\r\n const generateBlobUrl = () => {\r\n let blobTextureURL;\r\n\r\n if (blob && typeof URL === \"function\") {\r\n try {\r\n blobTextureURL = URL.createObjectURL(blob);\r\n } catch (ex) {\r\n // Chrome is raising a type error if we're setting the oneTimeOnly parameter\r\n blobTextureURL = URL.createObjectURL(blob);\r\n }\r\n }\r\n\r\n if (blobTextureURL) {\r\n image.src = blobTextureURL;\r\n }\r\n };\r\n\r\n if (Database._IsUASupportingBlobStorage) {\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n\r\n xhr.open(\"GET\", url);\r\n xhr.responseType = \"blob\";\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 && this._db) {\r\n // Blob as response\r\n blob = xhr.response;\r\n\r\n const transaction = this._db.transaction([\"textures\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const srcElement = <any>event.target;\r\n const error = srcElement.error;\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n generateBlobUrl();\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n generateBlobUrl();\r\n };\r\n\r\n const newTexture = { textureUrl: url, data: blob };\r\n\r\n try {\r\n // Put the blob into the dabase\r\n const addRequest = transaction.objectStore(\"textures\").put(newTexture);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n generateBlobUrl();\r\n };\r\n } catch (ex) {\r\n // \"DataCloneError\" generated by Chrome when you try to inject blob into IndexedDB\r\n if (ex.code === 25) {\r\n Database._IsUASupportingBlobStorage = false;\r\n this._enableTexturesOffline = false;\r\n }\r\n image.src = url;\r\n }\r\n } else {\r\n image.src = url;\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"Error in XHR request in BABYLON.Database.\");\r\n image.src = url;\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n image.src = url;\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n image.src = url;\r\n }\r\n }\r\n\r\n private _checkVersionFromDB(url: string, versionLoaded: (version: number) => void) {\r\n const updateVersion = () => {\r\n // the version is not yet in the DB or we need to update it\r\n this._saveVersionIntoDBAsync(url, versionLoaded);\r\n };\r\n this._loadVersionFromDBAsync(url, versionLoaded, updateVersion);\r\n }\r\n\r\n private _loadVersionFromDBAsync(url: string, callback: (version: number) => void, updateInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let version: any;\r\n try {\r\n const transaction = this._db.transaction([\"versions\"]);\r\n\r\n transaction.oncomplete = () => {\r\n if (version) {\r\n // If the version in the JSON file is different from the version in DB\r\n if (this._manifestVersionFound !== version.data) {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n } else {\r\n callback(version.data);\r\n }\r\n }\r\n // version was not found in DB\r\n else {\r\n this._mustUpdateRessources = true;\r\n updateInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n callback(-1);\r\n };\r\n\r\n const getRequest = transaction.objectStore(\"versions\").get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n version = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading version for scene \" + url + \" from DB.\");\r\n callback(-1);\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (READ OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n callback(-1);\r\n }\r\n }\r\n\r\n private _saveVersionIntoDBAsync(url: string, callback: (version: number) => void) {\r\n if (this._isSupported && !this._hasReachedQuota && this._db) {\r\n try {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([\"versions\"], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.target)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(-1);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(this._manifestVersionFound);\r\n };\r\n\r\n const newVersion = { sceneUrl: url, data: this._manifestVersionFound };\r\n\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(\"versions\").put(newVersion);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add version request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n Logger.Error(\"Error while accessing 'versions' object store (WRITE OP). Exception: \" + ex.message);\r\n callback(-1);\r\n }\r\n } else {\r\n callback(-1);\r\n }\r\n }\r\n\r\n /**\r\n * Loads a file from database\r\n * @param url defines the URL to load from\r\n * @param sceneLoaded defines a callback to call on success\r\n * @param progressCallBack defines a callback to call when progress changed\r\n * @param errorCallback defines a callback to call on error\r\n * @param useArrayBuffer defines a boolean to use array buffer instead of text string\r\n */\r\n public loadFile(url: string, sceneLoaded: (data: any) => void, progressCallBack?: (data: any) => void, errorCallback?: () => void, useArrayBuffer?: boolean): void {\r\n const completeUrl = Database._ReturnFullUrlLocation(url);\r\n\r\n const saveAndLoadFile = () => {\r\n // the scene is not yet in the DB, let's try to save it\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n };\r\n\r\n this._checkVersionFromDB(completeUrl, (version) => {\r\n if (version !== -1) {\r\n if (!this._mustUpdateRessources) {\r\n this._loadFileAsync(completeUrl, sceneLoaded, saveAndLoadFile);\r\n } else {\r\n this._saveFileAsync(completeUrl, sceneLoaded, progressCallBack, useArrayBuffer, errorCallback);\r\n }\r\n } else {\r\n if (errorCallback) {\r\n errorCallback();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _loadFileAsync(url: string, callback: (data?: any) => void, notInDBCallback: () => void) {\r\n if (this._isSupported && this._db) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n let file: any;\r\n const transaction = this._db.transaction([targetStore]);\r\n\r\n transaction.oncomplete = () => {\r\n if (file) {\r\n callback(file.data);\r\n }\r\n // file was not found in DB\r\n else {\r\n notInDBCallback();\r\n }\r\n };\r\n\r\n transaction.onabort = () => {\r\n notInDBCallback();\r\n };\r\n\r\n const getRequest = transaction.objectStore(targetStore).get(url);\r\n\r\n getRequest.onsuccess = (event) => {\r\n file = (<any>event.target).result;\r\n };\r\n getRequest.onerror = () => {\r\n Logger.Error(\"Error loading file \" + url + \" from DB.\");\r\n notInDBCallback();\r\n };\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or BabylonJS Database is not open.\");\r\n callback();\r\n }\r\n }\r\n\r\n private _saveFileAsync(\r\n url: string,\r\n callback: (data?: any) => void,\r\n progressCallback?: (this: XMLHttpRequestEventTarget, ev: ProgressEvent) => any,\r\n useArrayBuffer?: boolean,\r\n errorCallback?: (data?: any) => void\r\n ) {\r\n if (this._isSupported) {\r\n let targetStore: string;\r\n if (url.indexOf(\".babylon\") !== -1) {\r\n targetStore = \"scenes\";\r\n } else {\r\n targetStore = \"textures\";\r\n }\r\n\r\n // Create XHR\r\n const xhr = new WebRequest();\r\n let fileData: any;\r\n xhr.open(\"GET\", url + (url.match(/\\?/) == null ? \"?\" : \"&\") + Date.now());\r\n\r\n if (useArrayBuffer) {\r\n xhr.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (progressCallback) {\r\n xhr.onprogress = progressCallback;\r\n }\r\n\r\n xhr.addEventListener(\r\n \"load\",\r\n () => {\r\n if (xhr.status === 200 || (xhr.status < 400 && Database._ValidateXHRData(xhr, !useArrayBuffer ? 1 : 6))) {\r\n // Blob as response\r\n fileData = !useArrayBuffer ? xhr.responseText : xhr.response;\r\n\r\n if (!this._hasReachedQuota && this._db) {\r\n // Open a transaction to the database\r\n const transaction = this._db.transaction([targetStore], \"readwrite\");\r\n\r\n // the transaction could abort because of a QuotaExceededError error\r\n transaction.onabort = (event) => {\r\n try {\r\n //backwards compatibility with ts 1.0, srcElement doesn't have an \"error\" according to ts 1.3\r\n const error = (<any>event.target)[\"error\"];\r\n if (error && error.name === \"QuotaExceededError\") {\r\n this._hasReachedQuota = true;\r\n }\r\n } catch (ex) {}\r\n callback(fileData);\r\n };\r\n\r\n transaction.oncomplete = () => {\r\n callback(fileData);\r\n };\r\n\r\n let newFile;\r\n if (targetStore === \"scenes\") {\r\n newFile = { sceneUrl: url, data: fileData, version: this._manifestVersionFound };\r\n } else {\r\n newFile = { textureUrl: url, data: fileData };\r\n }\r\n\r\n try {\r\n // Put the scene into the database\r\n const addRequest = transaction.objectStore(targetStore).put(newFile);\r\n addRequest.onsuccess = () => {};\r\n addRequest.onerror = () => {\r\n Logger.Error(\"Error in DB add file request in BABYLON.Database.\");\r\n };\r\n } catch (ex) {\r\n callback(fileData);\r\n }\r\n } else {\r\n callback(fileData);\r\n }\r\n } else {\r\n if (xhr.status >= 400 && errorCallback) {\r\n errorCallback(xhr);\r\n } else {\r\n callback();\r\n }\r\n }\r\n },\r\n false\r\n );\r\n\r\n xhr.addEventListener(\r\n \"error\",\r\n () => {\r\n Logger.Error(\"error on XHR request.\");\r\n errorCallback && errorCallback();\r\n },\r\n false\r\n );\r\n\r\n xhr.send();\r\n } else {\r\n Logger.Error(\"Error: IndexedDB not supported by your browser or Babylon.js database is not open.\");\r\n errorCallback && errorCallback();\r\n }\r\n }\r\n\r\n /**\r\n * Validates if xhr data is correct\r\n * @param xhr defines the request to validate\r\n * @param dataType defines the expected data type\r\n * @returns true if data is correct\r\n */\r\n private static _ValidateXHRData(xhr: WebRequest, dataType = 7): boolean {\r\n // 1 for text (.babylon, manifest and shaders), 2 for TGA, 4 for DDS, 7 for all\r\n\r\n try {\r\n if (dataType & 1) {\r\n if (xhr.responseText && xhr.responseText.length > 0) {\r\n return true;\r\n } else if (dataType === 1) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 2) {\r\n // Check header width and height since there is no \"TGA\" magic number\r\n const tgaHeader = GetTGAHeader(xhr.response);\r\n\r\n if (tgaHeader.width && tgaHeader.height && tgaHeader.width > 0 && tgaHeader.height > 0) {\r\n return true;\r\n } else if (dataType === 2) {\r\n return false;\r\n }\r\n }\r\n\r\n if (dataType & 4) {\r\n // Check for the \"DDS\" magic number\r\n const ddsHeader = new Uint8Array(xhr.response, 0, 3);\r\n\r\n if (ddsHeader[0] === 68 && ddsHeader[1] === 68 && ddsHeader[2] === 83) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n } catch (e) {\r\n // Global protection\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
|
|
@@ -554,7 +554,7 @@ export interface IParticleSystem {
|
|
|
554
554
|
*/
|
|
555
555
|
getRampGradients(): Nullable<Array<Color3Gradient>>;
|
|
556
556
|
/** Gets or sets a boolean indicating that ramp gradients must be used
|
|
557
|
-
* @see https://doc.babylonjs.com/
|
|
557
|
+
* @see https://doc.babylonjs.com/features/featuresDeepDive/particles/particle_system/ramps_and_blends
|
|
558
558
|
*/
|
|
559
559
|
useRampGradients: boolean;
|
|
560
560
|
/**
|