@babylonjs/core 5.0.0-beta.5 → 5.0.0-beta.9
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/actionManager.d.ts +1 -1
- package/Actions/actionManager.js +5 -1
- package/Actions/actionManager.js.map +1 -1
- package/Animations/animation.d.ts +2 -2
- package/Animations/animation.js +5 -1
- package/Animations/animation.js.map +1 -1
- package/Audio/analyser.d.ts +2 -1
- package/Audio/analyser.js +5 -0
- package/Audio/analyser.js.map +1 -1
- package/Audio/audioSceneComponent.d.ts +1 -1
- package/Audio/audioSceneComponent.js +5 -0
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.d.ts +1 -1
- package/Audio/sound.js +5 -0
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.d.ts +2 -1
- package/Audio/soundTrack.js +5 -0
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Bones/skeleton.d.ts +0 -6
- package/Bones/skeleton.js +2 -14
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.d.ts +4 -0
- package/Buffers/buffer.js +11 -1
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
- package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
- package/Cameras/VR/vrExperienceHelper.js +1 -0
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.d.ts +2 -1
- package/Cameras/VR/webVRCamera.js +3 -2
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +1 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +1 -1
- package/Cameras/camera.js.map +1 -1
- package/Cameras/deviceOrientationCamera.d.ts +1 -1
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Cameras/flyCamera.d.ts +1 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.d.ts +1 -1
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.d.ts +1 -1
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/gamepadCamera.d.ts +1 -1
- package/Cameras/gamepadCamera.js.map +1 -1
- package/Cameras/targetCamera.d.ts +1 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.d.ts +1 -1
- package/Cameras/touchCamera.js.map +1 -1
- package/Cameras/universalCamera.d.ts +1 -1
- package/Cameras/universalCamera.js.map +1 -1
- package/Cameras/virtualJoysticksCamera.d.ts +1 -1
- package/Cameras/virtualJoysticksCamera.js.map +1 -1
- package/Collisions/collider.d.ts +1 -1
- package/Collisions/collider.js +48 -2
- package/Collisions/collider.js.map +1 -1
- package/Compat/compatibilityOptions.d.ts +9 -0
- package/Compat/compatibilityOptions.js +14 -0
- package/Compat/compatibilityOptions.js.map +1 -0
- package/Compat/index.d.ts +1 -0
- package/Compat/index.js +2 -0
- package/Compat/index.js.map +1 -0
- package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +5 -0
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/ray.js +2 -2
- package/Culling/ray.js.map +1 -1
- package/Debug/axesViewer.d.ts +1 -1
- package/Debug/axesViewer.js +5 -0
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js +5 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/physicsViewer.d.ts +1 -1
- package/Debug/physicsViewer.js +3 -0
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/skeletonViewer.js +3 -4
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/Helpers/eventFactory.js +1 -4
- package/DeviceInput/Helpers/eventFactory.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +4 -2
- package/DeviceInput/InputDevices/deviceEnums.js +3 -1
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +20 -5
- package/DeviceInput/InputDevices/deviceSourceManager.js +68 -7
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +15 -10
- package/DeviceInput/InputDevices/internalDeviceSourceManager.js +25 -31
- package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/nativeDeviceInputSystem.js +3 -2
- package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/webDeviceInputSystem.d.ts +7 -6
- package/DeviceInput/InputDevices/webDeviceInputSystem.js +71 -90
- package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +5 -1
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiview.js +0 -1
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +7 -0
- package/Engines/Extensions/engine.views.js +12 -0
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
- package/Engines/WebGPU/webgpuConstants.js +1 -0
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +14 -7
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.d.ts +46 -26
- package/Engines/engineCapabilities.d.ts +2 -0
- package/Engines/engineCapabilities.js.map +1 -1
- package/Engines/nativeEngine.js +5 -3
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +2 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +8 -0
- package/Engines/renderTargetWrapper.js +20 -0
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +7 -0
- package/Engines/thinEngine.js +21 -3
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +33 -21
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.d.ts +7 -1
- package/Events/keyboardEvents.js +11 -1
- package/Events/keyboardEvents.js.map +1 -1
- package/Gamepads/Controllers/oculusTouchController.js +2 -2
- package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
- package/Gamepads/Controllers/webVRController.d.ts +1 -0
- package/Gamepads/Controllers/webVRController.js +1 -0
- package/Gamepads/Controllers/webVRController.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +0 -10
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +1 -1
- package/Gizmos/gizmo.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +1 -0
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +1 -2
- package/Inputs/scene.inputManager.js +13 -12
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +1 -1
- package/Layers/effectLayer.js +1 -1
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/effectLayerSceneComponent.d.ts +1 -1
- package/Layers/effectLayerSceneComponent.js +7 -3
- package/Layers/effectLayerSceneComponent.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +1 -1
- package/Layers/highlightLayer.js +2 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layerSceneComponent.d.ts +1 -1
- package/Layers/layerSceneComponent.js +7 -3
- package/Layers/layerSceneComponent.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +5 -5
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -9
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +4 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +2 -2
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +2 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +2 -2
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +2 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
- package/Materials/PBR/pbrBaseMaterial.js +2 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.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/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
- package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +1 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +2 -0
- package/Materials/Textures/internalTexture.js +2 -0
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.d.ts +2 -2
- package/Materials/Textures/mirrorTexture.js +5 -1
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +1 -1
- package/Materials/Textures/refractionTexture.js +2 -2
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +1 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +1 -1
- package/Materials/Textures/texture.js +5 -5
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/material.d.ts +1 -1
- package/Materials/material.js +7 -2
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +8 -0
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/multiMaterial.d.ts +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/pushMaterial.d.ts +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js +7 -3
- 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 +2 -1
- package/Materials/standardMaterial.js +4 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.vector.d.ts +4 -2
- package/Maths/math.vector.js +30 -28
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.js +5 -4
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.js +4 -3
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.js +10 -7
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +5 -2
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/discBuilder.js +3 -2
- package/Meshes/Builders/discBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.js +10 -1
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.js +2 -1
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.js +2 -1
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/Builders/planeBuilder.js +5 -4
- package/Meshes/Builders/planeBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.js +6 -2
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +3 -2
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.js +4 -3
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/sphereBuilder.js +2 -1
- package/Meshes/Builders/sphereBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js +4 -0
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/torusBuilder.js +2 -1
- package/Meshes/Builders/torusBuilder.js.map +1 -1
- package/Meshes/Builders/torusKnotBuilder.js +2 -1
- package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +8 -2
- package/Meshes/abstractMesh.js +37 -33
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +1 -1
- package/Meshes/geometry.js +38 -3
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.d.ts +1 -1
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/instancedMesh.js +5 -6
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +1 -1
- package/Meshes/mesh.js +31 -29
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +1 -1
- package/Meshes/mesh.vertexData.js +2 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/subMesh.js +1 -2
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/subMesh.project.js +1 -2
- package/Meshes/subMesh.project.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +5 -0
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/trailMesh.d.ts +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Meshes/transformNode.js +40 -13
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/assetsManager.d.ts +1 -1
- package/Misc/assetsManager.js +2 -1
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/brdfTextureTools.js +4 -1
- package/Misc/brdfTextureTools.js.map +1 -1
- package/Misc/dds.js +7 -0
- package/Misc/dds.js.map +1 -1
- package/Misc/decorators.js +7 -0
- package/Misc/decorators.js.map +1 -1
- package/Misc/deepCopier.js +3 -3
- package/Misc/deepCopier.js.map +1 -1
- package/Misc/error.d.ts +51 -0
- package/Misc/error.js +66 -0
- package/Misc/error.js.map +1 -0
- package/Misc/fileTools.d.ts +4 -4
- package/Misc/fileTools.js +7 -7
- package/Misc/fileTools.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Particles/particleSystem.js +7 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/color.fragment.js +1 -1
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.js +1 -1
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/default.fragment.js +1 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/default.vertex.js +1 -1
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.js +1 -1
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/Sprites/spriteManager.js +4 -4
- package/Sprites/spriteManager.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +3 -3
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/webXRDefaultExperience.js +3 -0
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.js +3 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +1 -0
- package/XR/webXRSessionManager.js +6 -1
- package/XR/webXRSessionManager.js.map +1 -1
- package/assetContainer.d.ts +1 -1
- package/assetContainer.js +5 -4
- package/assetContainer.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/package.json +10 -4
- package/scene.js +11 -10
- package/scene.js.map +1 -1
- package/Misc/baseError.d.ts +0 -7
- package/Misc/baseError.js +0 -18
- package/Misc/baseError.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubemapToSphericalPolynomial.js","sourceRoot":"","sources":["../../../../sourceES6/core/Misc/HighDynamicRange/cubemapToSphericalPolynomial.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport { SphericalPolynomial, SphericalHarmonics } from \"../../Maths/sphericalPolynomial\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Nullable } from \"../../types\";\r\n\r\nimport { CubeMapInfo } from \"./panoramaToCubemap\";\r\nimport { ToLinearSpace } from '../../Maths/math.constants';\r\nimport { Color3 } from '../../Maths/math.color';\r\n\r\nclass FileFaceOrientation {\r\n public name: string;\r\n public worldAxisForNormal: Vector3; // the world axis corresponding to the normal to the face\r\n public worldAxisForFileX: Vector3; // the world axis corresponding to texture right x-axis in file\r\n public worldAxisForFileY: Vector3; // the world axis corresponding to texture down y-axis in file\r\n\r\n public constructor(name: string, worldAxisForNormal: Vector3, worldAxisForFileX: Vector3, worldAxisForFileY: Vector3) {\r\n this.name = name;\r\n this.worldAxisForNormal = worldAxisForNormal;\r\n this.worldAxisForFileX = worldAxisForFileX;\r\n this.worldAxisForFileY = worldAxisForFileY;\r\n }\r\n}\r\n\r\n/**\r\n * Helper class dealing with the extraction of spherical polynomial dataArray\r\n * from a cube map.\r\n */\r\nexport class CubeMapToSphericalPolynomialTools {\r\n\r\n private static FileFaces: FileFaceOrientation[] = [\r\n new FileFaceOrientation(\"right\", new Vector3(1, 0, 0), new Vector3(0, 0, -1), new Vector3(0, -1, 0)), // +X east\r\n new FileFaceOrientation(\"left\", new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, -1, 0)), // -X west\r\n new FileFaceOrientation(\"up\", new Vector3(0, 1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, 1)), // +Y north\r\n new FileFaceOrientation(\"down\", new Vector3(0, -1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, -1)), // -Y south\r\n new FileFaceOrientation(\"front\", new Vector3(0, 0, 1), new Vector3(1, 0, 0), new Vector3(0, -1, 0)), // +Z top\r\n new FileFaceOrientation(\"back\", new Vector3(0, 0, -1), new Vector3(-1, 0, 0), new Vector3(0, -1, 0))// -Z bottom\r\n ];\r\n\r\n /**\r\n * Converts a texture to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param texture The texture to extract the information from.\r\n * @return The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapTextureToSphericalPolynomial(texture: BaseTexture): Nullable<Promise<SphericalPolynomial>> {\r\n if (!texture.isCube) {\r\n // Only supports cube Textures currently.\r\n return null;\r\n }\r\n\r\n texture.getScene()?.getEngine().flushFramebuffer();\r\n\r\n var size = texture.getSize().width;\r\n var rightPromise = texture.readPixels(0, undefined, undefined, false);\r\n var leftPromise = texture.readPixels(1, undefined, undefined, false);\r\n\r\n var upPromise: Nullable<Promise<ArrayBufferView>>;\r\n var downPromise: Nullable<Promise<ArrayBufferView>>;\r\n if (texture.isRenderTarget) {\r\n upPromise = texture.readPixels(3, undefined, undefined, false);\r\n downPromise = texture.readPixels(2, undefined, undefined, false);\r\n }\r\n else {\r\n upPromise = texture.readPixels(2, undefined, undefined, false);\r\n downPromise = texture.readPixels(3, undefined, undefined, false);\r\n }\r\n\r\n var frontPromise = texture.readPixels(4, undefined, undefined, false);\r\n var backPromise = texture.readPixels(5, undefined, undefined, false);\r\n\r\n var gammaSpace = texture.gammaSpace;\r\n // Always read as RGBA.\r\n var format = 5;\r\n var type = 0;\r\n if (texture.textureType == 1 || texture.textureType == 2) {\r\n type = 1;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n Promise.all([leftPromise, rightPromise, upPromise, downPromise, frontPromise, backPromise]).then(([left, right, up, down, front, back]) => {\r\n var cubeInfo: CubeMapInfo = {\r\n size,\r\n right,\r\n left,\r\n up,\r\n down,\r\n front,\r\n back,\r\n format,\r\n type,\r\n gammaSpace,\r\n };\r\n\r\n resolve(this.ConvertCubeMapToSphericalPolynomial(cubeInfo));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Converts a cubemap to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param cubeInfo The Cube map to extract the information from.\r\n * @return The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapToSphericalPolynomial(cubeInfo: CubeMapInfo): SphericalPolynomial {\r\n var sphericalHarmonics = new SphericalHarmonics();\r\n var totalSolidAngle = 0.0;\r\n\r\n // The (u,v) range is [-1,+1], so the distance between each texel is 2/Size.\r\n var du = 2.0 / cubeInfo.size;\r\n var dv = du;\r\n\r\n // The (u,v) of the first texel is half a texel from the corner (-1,-1).\r\n var minUV = du * 0.5 - 1.0;\r\n\r\n for (var faceIndex = 0; faceIndex < 6; faceIndex++) {\r\n var fileFace = this.FileFaces[faceIndex];\r\n var dataArray = (<any>cubeInfo)[fileFace.name];\r\n var v = minUV;\r\n\r\n // TODO: we could perform the summation directly into a SphericalPolynomial (SP), which is more efficient than SphericalHarmonic (SH).\r\n // This is possible because during the summation we do not need the SH-specific properties, e.g. orthogonality.\r\n // Because SP is still linear, so summation is fine in that basis.\r\n const stride = cubeInfo.format === 5 ? 4 : 3;\r\n for (var y = 0; y < cubeInfo.size; y++) {\r\n var u = minUV;\r\n\r\n for (var x = 0; x < cubeInfo.size; x++) {\r\n // World direction (not normalised)\r\n var worldDirection =\r\n fileFace.worldAxisForFileX.scale(u).add(\r\n fileFace.worldAxisForFileY.scale(v)).add(\r\n fileFace.worldAxisForNormal);\r\n worldDirection.normalize();\r\n\r\n var deltaSolidAngle = Math.pow(1.0 + u * u + v * v, -3.0 / 2.0);\r\n\r\n var r = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 0];\r\n var g = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 1];\r\n var b = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 2];\r\n\r\n // Prevent NaN harmonics with extreme HDRI data.\r\n if (isNaN(r)) { r = 0; }\r\n if (isNaN(g)) { g = 0; }\r\n if (isNaN(b)) { b = 0; }\r\n\r\n // Handle Integer types.\r\n if (cubeInfo.type === 0) {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n }\r\n\r\n // Handle Gamma space textures.\r\n if (cubeInfo.gammaSpace) {\r\n r = Math.pow(Scalar.Clamp(r), ToLinearSpace);\r\n g = Math.pow(Scalar.Clamp(g), ToLinearSpace);\r\n b = Math.pow(Scalar.Clamp(b), ToLinearSpace);\r\n }\r\n\r\n // Prevent to explode in case of really high dynamic ranges.\r\n // sh 3 would not be enough to accurately represent it.\r\n const max = 4096;\r\n r = Scalar.Clamp(r, 0, max);\r\n g = Scalar.Clamp(g, 0, max);\r\n b = Scalar.Clamp(b, 0, max);\r\n\r\n var color = new Color3(r, g, b);\r\n\r\n sphericalHarmonics.addLight(worldDirection, color, deltaSolidAngle);\r\n\r\n totalSolidAngle += deltaSolidAngle;\r\n\r\n u += du;\r\n }\r\n\r\n v += dv;\r\n }\r\n }\r\n\r\n // Solid angle for entire sphere is 4*pi\r\n var sphereSolidAngle = 4.0 * Math.PI;\r\n\r\n // Adjust the solid angle to allow for how many faces we processed.\r\n var facesProcessed = 6.0;\r\n var expectedSolidAngle = sphereSolidAngle * facesProcessed / 6.0;\r\n\r\n // Adjust the harmonics so that the accumulated solid angle matches the expected solid angle.\r\n // This is needed because the numerical integration over the cube uses a\r\n // small angle approximation of solid angle for each texel (see deltaSolidAngle),\r\n // and also to compensate for accumulative error due to float precision in the summation.\r\n var correctionFactor = expectedSolidAngle / totalSolidAngle;\r\n sphericalHarmonics.scaleInPlace(correctionFactor);\r\n\r\n sphericalHarmonics.convertIncidentRadianceToIrradiance();\r\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\r\n\r\n return SphericalPolynomial.FromHarmonics(sphericalHarmonics);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"cubemapToSphericalPolynomial.js","sourceRoot":"","sources":["../../../../sourceES6/core/Misc/HighDynamicRange/cubemapToSphericalPolynomial.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport { SphericalPolynomial, SphericalHarmonics } from \"../../Maths/sphericalPolynomial\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Nullable } from \"../../types\";\r\n\r\nimport { CubeMapInfo } from \"./panoramaToCubemap\";\r\nimport { ToLinearSpace } from '../../Maths/math.constants';\r\nimport { Color3 } from '../../Maths/math.color';\r\n\r\nclass FileFaceOrientation {\r\n public name: string;\r\n public worldAxisForNormal: Vector3; // the world axis corresponding to the normal to the face\r\n public worldAxisForFileX: Vector3; // the world axis corresponding to texture right x-axis in file\r\n public worldAxisForFileY: Vector3; // the world axis corresponding to texture down y-axis in file\r\n\r\n public constructor(name: string, worldAxisForNormal: Vector3, worldAxisForFileX: Vector3, worldAxisForFileY: Vector3) {\r\n this.name = name;\r\n this.worldAxisForNormal = worldAxisForNormal;\r\n this.worldAxisForFileX = worldAxisForFileX;\r\n this.worldAxisForFileY = worldAxisForFileY;\r\n }\r\n}\r\n\r\n/**\r\n * Helper class dealing with the extraction of spherical polynomial dataArray\r\n * from a cube map.\r\n */\r\nexport class CubeMapToSphericalPolynomialTools {\r\n\r\n private static FileFaces: FileFaceOrientation[] = [\r\n new FileFaceOrientation(\"right\", new Vector3(1, 0, 0), new Vector3(0, 0, -1), new Vector3(0, -1, 0)), // +X east\r\n new FileFaceOrientation(\"left\", new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, -1, 0)), // -X west\r\n new FileFaceOrientation(\"up\", new Vector3(0, 1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, 1)), // +Y north\r\n new FileFaceOrientation(\"down\", new Vector3(0, -1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, -1)), // -Y south\r\n new FileFaceOrientation(\"front\", new Vector3(0, 0, 1), new Vector3(1, 0, 0), new Vector3(0, -1, 0)), // +Z top\r\n new FileFaceOrientation(\"back\", new Vector3(0, 0, -1), new Vector3(-1, 0, 0), new Vector3(0, -1, 0))// -Z bottom\r\n ];\r\n\r\n /**\r\n * Converts a texture to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param texture The texture to extract the information from.\r\n * @return The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapTextureToSphericalPolynomial(texture: BaseTexture): Nullable<Promise<SphericalPolynomial>> {\r\n if (!texture.isCube) {\r\n // Only supports cube Textures currently.\r\n return null;\r\n }\r\n\r\n texture.getScene()?.getEngine().flushFramebuffer();\r\n\r\n var size = texture.getSize().width;\r\n var rightPromise = texture.readPixels(0, undefined, undefined, false);\r\n var leftPromise = texture.readPixels(1, undefined, undefined, false);\r\n\r\n var upPromise: Nullable<Promise<ArrayBufferView>>;\r\n var downPromise: Nullable<Promise<ArrayBufferView>>;\r\n if (texture.isRenderTarget) {\r\n upPromise = texture.readPixels(3, undefined, undefined, false);\r\n downPromise = texture.readPixels(2, undefined, undefined, false);\r\n }\r\n else {\r\n upPromise = texture.readPixels(2, undefined, undefined, false);\r\n downPromise = texture.readPixels(3, undefined, undefined, false);\r\n }\r\n\r\n var frontPromise = texture.readPixels(4, undefined, undefined, false);\r\n var backPromise = texture.readPixels(5, undefined, undefined, false);\r\n\r\n var gammaSpace = texture.gammaSpace;\r\n // Always read as RGBA.\r\n var format = 5;\r\n var type = 0;\r\n if (texture.textureType == 1 || texture.textureType == 2) {\r\n type = 1;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n Promise.all([leftPromise, rightPromise, upPromise, downPromise, frontPromise, backPromise]).then(([left, right, up, down, front, back]) => {\r\n var cubeInfo: CubeMapInfo = {\r\n size,\r\n right,\r\n left,\r\n up,\r\n down,\r\n front,\r\n back,\r\n format,\r\n type,\r\n gammaSpace,\r\n };\r\n\r\n resolve(this.ConvertCubeMapToSphericalPolynomial(cubeInfo));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Compute the area on the unit sphere of the rectangle defined by (x,y) and the origin\r\n * See https://www.rorydriscoll.com/2012/01/15/cubemap-texel-solid-angle/\r\n */\r\n private static _AreaElement(x: number, y: number): number {\r\n return Math.atan2(x * y, Math.sqrt(x * x + y * y + 1));\r\n }\r\n\r\n /**\r\n * Converts a cubemap to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param cubeInfo The Cube map to extract the information from.\r\n * @return The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapToSphericalPolynomial(cubeInfo: CubeMapInfo): SphericalPolynomial {\r\n var sphericalHarmonics = new SphericalHarmonics();\r\n var totalSolidAngle = 0.0;\r\n\r\n // The (u,v) range is [-1,+1], so the distance between each texel is 2/Size.\r\n var du = 2.0 / cubeInfo.size;\r\n var dv = du;\r\n\r\n var halfTexel = 0.5 * du;\r\n\r\n // The (u,v) of the first texel is half a texel from the corner (-1,-1).\r\n var minUV = halfTexel - 1.0;\r\n\r\n for (var faceIndex = 0; faceIndex < 6; faceIndex++) {\r\n var fileFace = this.FileFaces[faceIndex];\r\n var dataArray = (<any>cubeInfo)[fileFace.name];\r\n var v = minUV;\r\n\r\n // TODO: we could perform the summation directly into a SphericalPolynomial (SP), which is more efficient than SphericalHarmonic (SH).\r\n // This is possible because during the summation we do not need the SH-specific properties, e.g. orthogonality.\r\n // Because SP is still linear, so summation is fine in that basis.\r\n const stride = cubeInfo.format === 5 ? 4 : 3;\r\n for (var y = 0; y < cubeInfo.size; y++) {\r\n var u = minUV;\r\n\r\n for (var x = 0; x < cubeInfo.size; x++) {\r\n // World direction (not normalised)\r\n var worldDirection =\r\n fileFace.worldAxisForFileX.scale(u).add(\r\n fileFace.worldAxisForFileY.scale(v)).add(\r\n fileFace.worldAxisForNormal);\r\n worldDirection.normalize();\r\n\r\n var deltaSolidAngle =\r\n this._AreaElement(u - halfTexel, v - halfTexel) -\r\n this._AreaElement(u - halfTexel, v + halfTexel) -\r\n this._AreaElement(u + halfTexel, v - halfTexel) +\r\n this._AreaElement(u + halfTexel, v + halfTexel);\r\n\r\n var r = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 0];\r\n var g = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 1];\r\n var b = dataArray[(y * cubeInfo.size * stride) + (x * stride) + 2];\r\n\r\n // Prevent NaN harmonics with extreme HDRI data.\r\n if (isNaN(r)) { r = 0; }\r\n if (isNaN(g)) { g = 0; }\r\n if (isNaN(b)) { b = 0; }\r\n\r\n // Handle Integer types.\r\n if (cubeInfo.type === 0) {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n }\r\n\r\n // Handle Gamma space textures.\r\n if (cubeInfo.gammaSpace) {\r\n r = Math.pow(Scalar.Clamp(r), ToLinearSpace);\r\n g = Math.pow(Scalar.Clamp(g), ToLinearSpace);\r\n b = Math.pow(Scalar.Clamp(b), ToLinearSpace);\r\n }\r\n\r\n // Prevent to explode in case of really high dynamic ranges.\r\n // sh 3 would not be enough to accurately represent it.\r\n const max = 4096;\r\n r = Scalar.Clamp(r, 0, max);\r\n g = Scalar.Clamp(g, 0, max);\r\n b = Scalar.Clamp(b, 0, max);\r\n\r\n var color = new Color3(r, g, b);\r\n\r\n sphericalHarmonics.addLight(worldDirection, color, deltaSolidAngle);\r\n\r\n totalSolidAngle += deltaSolidAngle;\r\n\r\n u += du;\r\n }\r\n\r\n v += dv;\r\n }\r\n }\r\n\r\n // Solid angle for entire sphere is 4*pi\r\n var sphereSolidAngle = 4.0 * Math.PI;\r\n\r\n // Adjust the solid angle to allow for how many faces we processed.\r\n var facesProcessed = 6.0;\r\n var expectedSolidAngle = sphereSolidAngle * facesProcessed / 6.0;\r\n\r\n // Adjust the harmonics so that the accumulated solid angle matches the expected solid angle.\r\n // This is needed because the numerical integration over the cube uses a\r\n // small angle approximation of solid angle for each texel (see deltaSolidAngle),\r\n // and also to compensate for accumulative error due to float precision in the summation.\r\n var correctionFactor = expectedSolidAngle / totalSolidAngle;\r\n sphericalHarmonics.scaleInPlace(correctionFactor);\r\n\r\n sphericalHarmonics.convertIncidentRadianceToIrradiance();\r\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\r\n\r\n return SphericalPolynomial.FromHarmonics(sphericalHarmonics);\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EngineInstrumentation } from "../../Instrumentation/engineInstrumentation.js";
|
|
2
2
|
import { PrecisionDate } from "../precisionDate.js";
|
|
3
|
+
import { SceneInstrumentation } from "../../Instrumentation/sceneInstrumentation.js";
|
|
3
4
|
// Dispose which does nothing.
|
|
4
5
|
var defaultDisposeImpl = function () { };
|
|
5
6
|
/**
|
|
@@ -199,21 +200,14 @@ var PerfCollectionStrategy = /** @class */ (function () {
|
|
|
199
200
|
*/
|
|
200
201
|
PerfCollectionStrategy.AbsoluteFpsStrategy = function () {
|
|
201
202
|
return function (scene) {
|
|
202
|
-
var
|
|
203
|
-
|
|
204
|
-
var onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(function () {
|
|
205
|
-
startTime = PrecisionDate.Now;
|
|
206
|
-
});
|
|
207
|
-
var onAfterRenderObserver = scene.onAfterRenderObservable.add(function () {
|
|
208
|
-
timeTaken = PrecisionDate.Now - startTime;
|
|
209
|
-
});
|
|
203
|
+
var sceneInstrumentation = new SceneInstrumentation(scene);
|
|
204
|
+
sceneInstrumentation.captureFrameTime = true;
|
|
210
205
|
return {
|
|
211
206
|
id: "Absolute FPS",
|
|
212
|
-
getData: function () {
|
|
213
|
-
|
|
214
|
-
scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);
|
|
215
|
-
scene.onAfterRenderObservable.remove(onAfterRenderObserver);
|
|
207
|
+
getData: function () {
|
|
208
|
+
return 1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage;
|
|
216
209
|
},
|
|
210
|
+
dispose: defaultDisposeImpl,
|
|
217
211
|
};
|
|
218
212
|
};
|
|
219
213
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performanceViewerCollectionStrategies.js","sourceRoot":"","sources":["../../../../sourceES6/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.ts"],"names":[],"mappings":"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","sourcesContent":["import { EngineInstrumentation } from \"../../Instrumentation/engineInstrumentation\";\r\nimport { Scene } from \"../../scene\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\n\r\n/**\r\n * Defines the general structure of what is necessary for a collection strategy.\r\n */\r\nexport interface IPerfViewerCollectionStrategy {\r\n /**\r\n * The id of the strategy.\r\n */\r\n id: string;\r\n /**\r\n * Function which gets the data for the strategy.\r\n */\r\n getData: () => number;\r\n /**\r\n * Function which does any necessary cleanup. Called when performanceViewerCollector.dispose() is called.\r\n */\r\n dispose: () => void;\r\n}\r\n// Dispose which does nothing.\r\nconst defaultDisposeImpl = () => {};\r\n\r\n/**\r\n * Initializer callback for a strategy\r\n */\r\nexport type PerfStrategyInitialization = (scene: Scene) => IPerfViewerCollectionStrategy;\r\n/**\r\n * Defines the predefined strategies used in the performance viewer.\r\n */\r\nexport class PerfCollectionStrategy {\r\n /**\r\n * Gets the initializer for the strategy used for collection of fps metrics\r\n * @returns the initializer for the fps strategy\r\n */\r\n public static FpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engine = scene.getEngine();\r\n return {\r\n id: \"FPS\",\r\n getData: () => engine.getFps(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of cpu utilization metrics.\r\n * Needs the experimental compute pressure API.\r\n * @returns the initializer for the cpu utilization strategy\r\n */\r\n public static CpuStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let value = 0;\r\n const computePressureObserver = scene.onComputePressureChanged.add((update) => {\r\n value = update.cpuUtilization;\r\n });\r\n return {\r\n id: \"CPU utilization\",\r\n getData: () => value,\r\n dispose: () => scene.onComputePressureChanged.remove(computePressureObserver),\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total meshes metrics.\r\n * @returns the initializer for the total meshes strategy\r\n */\r\n public static TotalMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total meshes\",\r\n getData: () => scene.meshes.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active meshes metrics.\r\n * @returns the initializer for the active meshes strategy\r\n */\r\n public static ActiveMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active meshes\",\r\n getData: () => scene.getActiveMeshes().length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active indices metrics.\r\n * @returns the initializer for the active indices strategy\r\n */\r\n public static ActiveIndicesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active indices\",\r\n getData: () => scene.getActiveIndices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active faces metrics.\r\n * @returns the initializer for the active faces strategy\r\n */\r\n public static ActiveFacesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active faces\",\r\n getData: () => scene.getActiveIndices() / 3,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active bones metrics.\r\n * @returns the initializer for the active bones strategy\r\n */\r\n public static ActiveBonesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active bones\",\r\n getData: () => scene.getActiveBones(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active particles metrics.\r\n * @returns the initializer for the active particles strategy\r\n */\r\n public static ActiveParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active particles\",\r\n getData: () => scene.getActiveParticles(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of draw calls metrics.\r\n * @returns the initializer for the draw calls strategy\r\n */\r\n public static DrawCallsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let drawCalls = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n scene.getEngine()._drawCalls.fetchNewFrame();\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n drawCalls = scene.getEngine()._drawCalls.current;\r\n });\r\n\r\n return {\r\n id: \"Draw calls\",\r\n getData: () => drawCalls,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total lights metrics.\r\n * @returns the initializer for the total lights strategy\r\n */\r\n public static TotalLightsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total lights\",\r\n getData: () => scene.lights.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total vertices metrics.\r\n * @returns the initializer for the total vertices strategy\r\n */\r\n public static TotalVerticesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total vertices\",\r\n getData: () => scene.getTotalVertices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total materials metrics.\r\n * @returns the initializer for the total materials strategy\r\n */\r\n public static TotalMaterialsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total materials\",\r\n getData: () => scene.materials.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total textures metrics.\r\n * @returns the initializer for the total textures strategy\r\n */\r\n public static TotalTexturesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total textures\",\r\n getData: () => scene.textures.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of absolute fps metrics.\r\n * @returns the initializer for the absolute fps strategy\r\n */\r\n public static AbsoluteFpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 1;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Absolute FPS\",\r\n getData: () => 1000.0 / timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of meshes selection time metrics.\r\n * @returns the initializer for the meshes selection time strategy\r\n */\r\n public static MeshesSelectionStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeActiveMeshesObserver = scene.onBeforeActiveMeshesEvaluationObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterActiveMeshesObserver = scene.onAfterActiveMeshesEvaluationObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Meshes Selection\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeActiveMeshesEvaluationObservable.remove(onBeforeActiveMeshesObserver);\r\n scene.onAfterActiveMeshesEvaluationObservable.remove(onAfterActiveMeshesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render targets time metrics.\r\n * @returns the initializer for the render targets time strategy\r\n */\r\n public static RenderTargetsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeRenderTargetsObserver = scene.onBeforeRenderTargetsRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderTargetsObserver = scene.onAfterRenderTargetsRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render Targets\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeRenderTargetsRenderObservable.remove(onBeforeRenderTargetsObserver);\r\n scene.onAfterRenderTargetsRenderObservable.remove(onAfterRenderTargetsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of particles time metrics.\r\n * @returns the initializer for the particles time strategy\r\n */\r\n public static ParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeParticlesObserver = scene.onBeforeParticlesRenderingObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterParticlesObserver = scene.onAfterParticlesRenderingObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Particles\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeParticlesRenderingObservable.remove(onBeforeParticlesObserver);\r\n scene.onAfterParticlesRenderingObservable.remove(onAfterParticlesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of sprites time metrics.\r\n * @returns the initializer for the sprites time strategy\r\n */\r\n public static SpritesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeSpritesObserver = scene.onBeforeSpritesRenderingObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterSpritesObserver = scene.onAfterSpritesRenderingObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Sprites\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeSpritesRenderingObservable?.remove(onBeforeSpritesObserver);\r\n scene.onAfterSpritesRenderingObservable?.remove(onAfterSpritesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of animations time metrics.\r\n * @returns the initializer for the animations time strategy\r\n */\r\n public static AnimationsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterAnimationsObserver = scene.onAfterAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Animations\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterAnimationsObservable.remove(onAfterAnimationsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of physics time metrics.\r\n * @returns the initializer for the physics time strategy\r\n */\r\n public static PhysicsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforePhysicsObserver = scene.onBeforePhysicsObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterPhysicsObserver = scene.onAfterPhysicsObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Physics\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforePhysicsObservable?.remove(onBeforePhysicsObserver);\r\n scene.onAfterPhysicsObservable?.remove(onAfterPhysicsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render time metrics.\r\n * @returns the initializer for the render time strategy\r\n */\r\n public static RenderStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeDrawPhaseObserver = scene.onBeforeDrawPhaseObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterDrawPhaseObserver = scene.onAfterDrawPhaseObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeDrawPhaseObservable.remove(onBeforeDrawPhaseObserver);\r\n scene.onAfterDrawPhaseObservable.remove(onAfterDrawPhaseObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total frame time metrics.\r\n * @returns the initializer for the total frame time strategy\r\n */\r\n public static FrameTotalStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Frame Total\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of inter-frame time metrics.\r\n * @returns the initializer for the inter-frame time strategy\r\n */\r\n public static InterFrameStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n return {\r\n id: \"Inter-frame\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of gpu frame time metrics.\r\n * @returns the initializer for the gpu frame time strategy\r\n */\r\n public static GpuFrameTimeStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\r\n engineInstrumentation.captureGPUFrameTime = true;\r\n return {\r\n id: \"GPU frame time\",\r\n getData: () => Math.max(engineInstrumentation.gpuFrameTimeCounter.current * 0.000001, 0),\r\n dispose: () => {\r\n engineInstrumentation.dispose();\r\n },\r\n };\r\n };\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"performanceViewerCollectionStrategies.js","sourceRoot":"","sources":["../../../../sourceES6/core/Misc/PerformanceViewer/performanceViewerCollectionStrategies.ts"],"names":[],"mappings":"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","sourcesContent":["import { EngineInstrumentation } from \"../../Instrumentation/engineInstrumentation\";\r\nimport { Scene } from \"../../scene\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { SceneInstrumentation } from \"../../Instrumentation/sceneInstrumentation\";\r\n\r\n/**\r\n * Defines the general structure of what is necessary for a collection strategy.\r\n */\r\nexport interface IPerfViewerCollectionStrategy {\r\n /**\r\n * The id of the strategy.\r\n */\r\n id: string;\r\n /**\r\n * Function which gets the data for the strategy.\r\n */\r\n getData: () => number;\r\n /**\r\n * Function which does any necessary cleanup. Called when performanceViewerCollector.dispose() is called.\r\n */\r\n dispose: () => void;\r\n}\r\n// Dispose which does nothing.\r\nconst defaultDisposeImpl = () => {};\r\n\r\n/**\r\n * Initializer callback for a strategy\r\n */\r\nexport type PerfStrategyInitialization = (scene: Scene) => IPerfViewerCollectionStrategy;\r\n/**\r\n * Defines the predefined strategies used in the performance viewer.\r\n */\r\nexport class PerfCollectionStrategy {\r\n /**\r\n * Gets the initializer for the strategy used for collection of fps metrics\r\n * @returns the initializer for the fps strategy\r\n */\r\n public static FpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engine = scene.getEngine();\r\n return {\r\n id: \"FPS\",\r\n getData: () => engine.getFps(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of cpu utilization metrics.\r\n * Needs the experimental compute pressure API.\r\n * @returns the initializer for the cpu utilization strategy\r\n */\r\n public static CpuStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let value = 0;\r\n const computePressureObserver = scene.onComputePressureChanged.add((update) => {\r\n value = update.cpuUtilization;\r\n });\r\n return {\r\n id: \"CPU utilization\",\r\n getData: () => value,\r\n dispose: () => scene.onComputePressureChanged.remove(computePressureObserver),\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total meshes metrics.\r\n * @returns the initializer for the total meshes strategy\r\n */\r\n public static TotalMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total meshes\",\r\n getData: () => scene.meshes.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active meshes metrics.\r\n * @returns the initializer for the active meshes strategy\r\n */\r\n public static ActiveMeshesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active meshes\",\r\n getData: () => scene.getActiveMeshes().length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active indices metrics.\r\n * @returns the initializer for the active indices strategy\r\n */\r\n public static ActiveIndicesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active indices\",\r\n getData: () => scene.getActiveIndices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active faces metrics.\r\n * @returns the initializer for the active faces strategy\r\n */\r\n public static ActiveFacesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active faces\",\r\n getData: () => scene.getActiveIndices() / 3,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active bones metrics.\r\n * @returns the initializer for the active bones strategy\r\n */\r\n public static ActiveBonesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active bones\",\r\n getData: () => scene.getActiveBones(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of active particles metrics.\r\n * @returns the initializer for the active particles strategy\r\n */\r\n public static ActiveParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Active particles\",\r\n getData: () => scene.getActiveParticles(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of draw calls metrics.\r\n * @returns the initializer for the draw calls strategy\r\n */\r\n public static DrawCallsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let drawCalls = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n scene.getEngine()._drawCalls.fetchNewFrame();\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n drawCalls = scene.getEngine()._drawCalls.current;\r\n });\r\n\r\n return {\r\n id: \"Draw calls\",\r\n getData: () => drawCalls,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total lights metrics.\r\n * @returns the initializer for the total lights strategy\r\n */\r\n public static TotalLightsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total lights\",\r\n getData: () => scene.lights.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total vertices metrics.\r\n * @returns the initializer for the total vertices strategy\r\n */\r\n public static TotalVerticesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total vertices\",\r\n getData: () => scene.getTotalVertices(),\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total materials metrics.\r\n * @returns the initializer for the total materials strategy\r\n */\r\n public static TotalMaterialsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total materials\",\r\n getData: () => scene.materials.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total textures metrics.\r\n * @returns the initializer for the total textures strategy\r\n */\r\n public static TotalTexturesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n return {\r\n id: \"Total textures\",\r\n getData: () => scene.textures.length,\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of absolute fps metrics.\r\n * @returns the initializer for the absolute fps strategy\r\n */\r\n public static AbsoluteFpsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const sceneInstrumentation = new SceneInstrumentation(scene);\r\n sceneInstrumentation.captureFrameTime = true;\r\n\r\n return {\r\n id: \"Absolute FPS\",\r\n getData: () => {\r\n return 1000.0 / sceneInstrumentation.frameTimeCounter.lastSecAverage;\r\n },\r\n dispose: defaultDisposeImpl,\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of meshes selection time metrics.\r\n * @returns the initializer for the meshes selection time strategy\r\n */\r\n public static MeshesSelectionStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeActiveMeshesObserver = scene.onBeforeActiveMeshesEvaluationObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterActiveMeshesObserver = scene.onAfterActiveMeshesEvaluationObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Meshes Selection\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeActiveMeshesEvaluationObservable.remove(onBeforeActiveMeshesObserver);\r\n scene.onAfterActiveMeshesEvaluationObservable.remove(onAfterActiveMeshesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render targets time metrics.\r\n * @returns the initializer for the render targets time strategy\r\n */\r\n public static RenderTargetsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeRenderTargetsObserver = scene.onBeforeRenderTargetsRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderTargetsObserver = scene.onAfterRenderTargetsRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render Targets\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeRenderTargetsRenderObservable.remove(onBeforeRenderTargetsObserver);\r\n scene.onAfterRenderTargetsRenderObservable.remove(onAfterRenderTargetsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of particles time metrics.\r\n * @returns the initializer for the particles time strategy\r\n */\r\n public static ParticlesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeParticlesObserver = scene.onBeforeParticlesRenderingObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterParticlesObserver = scene.onAfterParticlesRenderingObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Particles\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeParticlesRenderingObservable.remove(onBeforeParticlesObserver);\r\n scene.onAfterParticlesRenderingObservable.remove(onAfterParticlesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of sprites time metrics.\r\n * @returns the initializer for the sprites time strategy\r\n */\r\n public static SpritesStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeSpritesObserver = scene.onBeforeSpritesRenderingObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterSpritesObserver = scene.onAfterSpritesRenderingObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Sprites\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeSpritesRenderingObservable?.remove(onBeforeSpritesObserver);\r\n scene.onAfterSpritesRenderingObservable?.remove(onAfterSpritesObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of animations time metrics.\r\n * @returns the initializer for the animations time strategy\r\n */\r\n public static AnimationsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterAnimationsObserver = scene.onAfterAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Animations\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterAnimationsObservable.remove(onAfterAnimationsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of physics time metrics.\r\n * @returns the initializer for the physics time strategy\r\n */\r\n public static PhysicsStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforePhysicsObserver = scene.onBeforePhysicsObservable?.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterPhysicsObserver = scene.onAfterPhysicsObservable?.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Physics\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforePhysicsObservable?.remove(onBeforePhysicsObserver);\r\n scene.onAfterPhysicsObservable?.remove(onAfterPhysicsObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of render time metrics.\r\n * @returns the initializer for the render time strategy\r\n */\r\n public static RenderStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeDrawPhaseObserver = scene.onBeforeDrawPhaseObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterDrawPhaseObserver = scene.onAfterDrawPhaseObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Render\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeDrawPhaseObservable.remove(onBeforeDrawPhaseObserver);\r\n scene.onAfterDrawPhaseObservable.remove(onAfterDrawPhaseObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of total frame time metrics.\r\n * @returns the initializer for the total frame time strategy\r\n */\r\n public static FrameTotalStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n return {\r\n id: \"Frame Total\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of inter-frame time metrics.\r\n * @returns the initializer for the inter-frame time strategy\r\n */\r\n public static InterFrameStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n let startTime = PrecisionDate.Now;\r\n let timeTaken = 0;\r\n\r\n const onBeforeAnimationsObserver = scene.onBeforeAnimationsObservable.add(() => {\r\n timeTaken = PrecisionDate.Now - startTime;\r\n });\r\n\r\n const onAfterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n startTime = PrecisionDate.Now;\r\n });\r\n\r\n return {\r\n id: \"Inter-frame\",\r\n getData: () => timeTaken,\r\n dispose: () => {\r\n scene.onBeforeAnimationsObservable.remove(onBeforeAnimationsObserver);\r\n scene.onAfterRenderObservable.remove(onAfterRenderObserver);\r\n },\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Gets the initializer for the strategy used for collection of gpu frame time metrics.\r\n * @returns the initializer for the gpu frame time strategy\r\n */\r\n public static GpuFrameTimeStrategy(): PerfStrategyInitialization {\r\n return (scene) => {\r\n const engineInstrumentation = new EngineInstrumentation(scene.getEngine());\r\n engineInstrumentation.captureGPUFrameTime = true;\r\n return {\r\n id: \"GPU frame time\",\r\n getData: () => Math.max(engineInstrumentation.gpuFrameTimeCounter.current * 0.000001, 0),\r\n dispose: () => {\r\n engineInstrumentation.dispose();\r\n },\r\n };\r\n };\r\n }\r\n}"]}
|
package/Misc/assetsManager.d.ts
CHANGED
|
@@ -823,7 +823,7 @@ export declare class AssetsManager {
|
|
|
823
823
|
* Creates a new AssetsManager
|
|
824
824
|
* @param scene defines the scene to work on
|
|
825
825
|
*/
|
|
826
|
-
constructor(scene
|
|
826
|
+
constructor(scene?: Scene);
|
|
827
827
|
/**
|
|
828
828
|
* Add a ContainerAssetTask to the list of active tasks
|
|
829
829
|
* @param taskName defines the name of the new task
|
package/Misc/assetsManager.js
CHANGED
|
@@ -7,6 +7,7 @@ import { CubeTexture } from "../Materials/Textures/cubeTexture.js";
|
|
|
7
7
|
import { HDRCubeTexture } from "../Materials/Textures/hdrCubeTexture.js";
|
|
8
8
|
import { EquiRectangularCubeTexture } from "../Materials/Textures/equiRectangularCubeTexture.js";
|
|
9
9
|
import { Logger } from "../Misc/logger.js";
|
|
10
|
+
import { EngineStore } from "../Engines/engineStore.js";
|
|
10
11
|
/**
|
|
11
12
|
* Defines the list of states available for a task inside a AssetsManager
|
|
12
13
|
*/
|
|
@@ -723,7 +724,7 @@ var AssetsManager = /** @class */ (function () {
|
|
|
723
724
|
* If set to false, you need to manually call in hideLoadingUI() once your scene is ready.
|
|
724
725
|
*/
|
|
725
726
|
this.autoHideLoadingUI = true;
|
|
726
|
-
this._scene = scene;
|
|
727
|
+
this._scene = scene || EngineStore.LastCreatedScene;
|
|
727
728
|
}
|
|
728
729
|
/**
|
|
729
730
|
* Add a ContainerAssetTask to the list of active tasks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetsManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/assetsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { SceneLoader } from \"../Loading/sceneLoader\";\r\nimport { Tools } from \"./tools\";\r\nimport { Observable } from \"./observable\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { CubeTexture } from \"../Materials/Textures/cubeTexture\";\r\nimport { HDRCubeTexture } from \"../Materials/Textures/hdrCubeTexture\";\r\nimport { EquiRectangularCubeTexture } from \"../Materials/Textures/equiRectangularCubeTexture\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { AnimationGroup } from '../Animations/animationGroup';\r\nimport { AssetContainer } from \"../assetContainer\";\r\n\r\n/**\r\n * Defines the list of states available for a task inside a AssetsManager\r\n */\r\nexport enum AssetTaskState {\r\n /**\r\n * Initialization\r\n */\r\n INIT,\r\n /**\r\n * Running\r\n */\r\n RUNNING,\r\n /**\r\n * Done\r\n */\r\n DONE,\r\n /**\r\n * Error\r\n */\r\n ERROR\r\n}\r\n\r\n/**\r\n * Define an abstract asset task used with a AssetsManager class to load assets into a scene\r\n */\r\nexport abstract class AbstractAssetTask {\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: any) => void;\r\n\r\n /**\r\n * Callback called when the task is not successful\r\n */\r\n public onError: (task: any, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param name defines the name of the task\r\n */\r\n constructor(\r\n /**\r\n * Task name\r\n */public name: string) {\r\n }\r\n\r\n private _isCompleted = false;\r\n private _taskState = AssetTaskState.INIT;\r\n private _errorObject: { message?: string; exception?: any; };\r\n\r\n /**\r\n * Get if the task is completed\r\n */\r\n public get isCompleted(): boolean {\r\n return this._isCompleted;\r\n }\r\n\r\n /**\r\n * Gets the current state of the task\r\n */\r\n public get taskState(): AssetTaskState {\r\n return this._taskState;\r\n }\r\n\r\n /**\r\n * Gets the current error object (if task is in error)\r\n */\r\n public get errorObject(): { message?: string; exception?: any; } {\r\n return this._errorObject;\r\n }\r\n\r\n /**\r\n * Internal only\r\n * @hidden\r\n */\r\n public _setErrorObject(message?: string, exception?: any) {\r\n if (this._errorObject) {\r\n return;\r\n }\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception\r\n };\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public run(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n this._taskState = AssetTaskState.RUNNING;\r\n this.runTask(scene, () => {\r\n this.onDoneCallback(onSuccess, onError);\r\n }, (msg, exception) => {\r\n this.onErrorCallback(onError, msg, exception);\r\n });\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n throw new Error(\"runTask is not implemented\");\r\n }\r\n\r\n /**\r\n * Reset will set the task state back to INIT, so the next load call of the assets manager will execute this task again.\r\n * This can be used with failed tasks that have the reason for failure fixed.\r\n */\r\n public reset() {\r\n this._taskState = AssetTaskState.INIT;\r\n }\r\n\r\n private onErrorCallback(onError: (message?: string, exception?: any) => void, message?: string, exception?: any) {\r\n this._taskState = AssetTaskState.ERROR;\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception\r\n };\r\n\r\n if (this.onError) {\r\n this.onError(this, message, exception);\r\n }\r\n\r\n onError();\r\n }\r\n\r\n private onDoneCallback(onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n try {\r\n this._taskState = AssetTaskState.DONE;\r\n this._isCompleted = true;\r\n\r\n if (this.onSuccess) {\r\n this.onSuccess(this);\r\n }\r\n\r\n onSuccess();\r\n } catch (e) {\r\n this.onErrorCallback(onError, \"Task is done, error executing success callback(s)\", e);\r\n }\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Define the interface used by progress events raised during assets loading\r\n */\r\nexport interface IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n task: AbstractAssetTask;\r\n}\r\n\r\n/**\r\n * Class used to share progress information about assets loading\r\n */\r\nexport class AssetsProgressEvent implements IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n public remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n public totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n public task: AbstractAssetTask;\r\n\r\n /**\r\n * Creates a AssetsProgressEvent\r\n * @param remainingCount defines the number of remaining tasks to process\r\n * @param totalCount defines the total number of tasks\r\n * @param task defines the task that was just processed\r\n */\r\n constructor(remainingCount: number, totalCount: number, task: AbstractAssetTask) {\r\n this.remainingCount = remainingCount;\r\n this.totalCount = totalCount;\r\n this.task = task;\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load assets into a container\r\n */\r\nexport class ContainerAssetTask extends AbstractAssetTask {\r\n /**\r\n * Get the loaded asset container\r\n */\r\n public loadedContainer: AssetContainer;\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: ContainerAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: ContainerAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ContainerAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.LoadAssetContainer(this.rootUrl, this.sceneFilename, scene,\r\n (container: AssetContainer) => {\r\n this.loadedContainer = container;\r\n this.loadedMeshes = container.meshes;\r\n this.loadedParticleSystems = container.particleSystems;\r\n this.loadedSkeletons = container.skeletons;\r\n this.loadedAnimationGroups = container.animationGroups;\r\n onSuccess();\r\n }, null, (scene, message, exception) => {\r\n onError(message, exception);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load meshes\r\n */\r\nexport class MeshAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: MeshAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: MeshAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new MeshAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.ImportMesh(this.meshesNames, this.rootUrl, this.sceneFilename, scene,\r\n (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[]) => {\r\n this.loadedMeshes = meshes;\r\n this.loadedParticleSystems = particleSystems;\r\n this.loadedSkeletons = skeletons;\r\n this.loadedAnimationGroups = animationGroups;\r\n onSuccess();\r\n }, null, (scene, message, exception) => {\r\n onError(message, exception);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load text content\r\n */\r\nexport class TextFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded text string\r\n */\r\n public text: string;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: TextFileAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: TextFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextFileAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(this.url, (data) => {\r\n this.text = data as string;\r\n onSuccess();\r\n }, undefined, false, false, (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load binary data\r\n */\r\nexport class BinaryFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the lodaded data (as an array buffer)\r\n */\r\n public data: ArrayBuffer;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: BinaryFileAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: BinaryFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new BinaryFileAssetTask object\r\n * @param name defines the name of the new task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(this.url, (data) => {\r\n this.data = data as ArrayBuffer;\r\n onSuccess();\r\n }, undefined, true, true, (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load images\r\n */\r\nexport class ImageAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded images\r\n */\r\n public image: HTMLImageElement;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: ImageAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: ImageAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ImageAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the image to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the image to load\r\n */\r\n public url: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n var img = new Image();\r\n\r\n Tools.SetCorsBehavior(this.url, img);\r\n\r\n img.onload = () => {\r\n this.image = img;\r\n onSuccess();\r\n };\r\n\r\n img.onerror = (err: string | Event): any => {\r\n onError(\"Error loading image\", err);\r\n };\r\n\r\n img.src = this.url;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the interface used by texture loading tasks\r\n */\r\nexport interface ITextureAssetTask<TEX extends BaseTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n texture: TEX;\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load 2D textures\r\n */\r\nexport class TextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<Texture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: Texture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: TextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: TextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param noMipmap defines if mipmap should not be generated (default is false)\r\n * @param invertY defines if texture must be inverted on Y axis (default is true)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines if mipmap should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * Defines if texture must be inverted on Y axis (default is true)\r\n */\r\n public invertY: boolean = true,\r\n /**\r\n * Defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n public samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n\r\n var onload = () => {\r\n onSuccess();\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new Texture(this.url, scene, this.noMipmap, this.invertY, this.samplingMode, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load cube textures\r\n */\r\nexport class CubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<CubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: CubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: CubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: CubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new CubeTextureAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n * @param extensions defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param files defines the explicit list of files (undefined by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n */\r\n public url: string,\r\n /**\r\n * Defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n */\r\n public extensions?: string[],\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * Defines the explicit list of files (undefined by default)\r\n */\r\n public files?: string[],\r\n /**\r\n * Defines the prefiltered texture option (default is false)\r\n */\r\n public prefiltered?: boolean) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n\r\n var onload = () => {\r\n onSuccess();\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new CubeTexture(this.url, scene, this.extensions, this.noMipmap, this.files, onload, onerror, undefined, this.prefiltered);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load HDR cube textures\r\n */\r\nexport class HDRCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<HDRCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: HDRCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: HDRCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: HDRCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new HDRCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be) If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param generateHarmonics specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap = false,\r\n /**\r\n * Specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n */\r\n public generateHarmonics = true,\r\n /**\r\n * Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n */\r\n public gammaSpace = false,\r\n /**\r\n * Internal Use Only\r\n */\r\n public reserved = false) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n\r\n var onload = () => {\r\n onSuccess();\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new HDRCubeTexture(this.url, scene, this.size, this.noMipmap, this.generateHarmonics, this.gammaSpace, this.reserved, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load Equirectangular cube textures\r\n */\r\nexport class EquiRectangularCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<EquiRectangularCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: EquiRectangularCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: EquiRectangularCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: EquiRectangularCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new EquiRectangularCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be)\r\n * If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param gammaSpace specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * (default is true)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap: boolean = false,\r\n /**\r\n * Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space,\r\n * but the standard material would require them in Gamma space) (default is true)\r\n */\r\n public gammaSpace: boolean = true) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void): void {\r\n\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new EquiRectangularCubeTexture(this.url, scene, this.size, this.noMipmap, this.gammaSpace, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * This class can be used to easily import assets into a scene\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_assetsmanager\r\n */\r\nexport class AssetsManager {\r\n private _scene: Scene;\r\n private _isLoading = false;\r\n\r\n protected _tasks = new Array<AbstractAssetTask>();\r\n protected _waitingTasksCount = 0;\r\n protected _totalTasksCount = 0;\r\n\r\n /**\r\n * Callback called when all tasks are processed\r\n */\r\n public onFinish: (tasks: AbstractAssetTask[]) => void;\r\n\r\n /**\r\n * Callback called when a task is successful\r\n */\r\n public onTaskSuccess: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task had an error\r\n */\r\n public onTaskError: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task is done (whatever the result is)\r\n */\r\n public onProgress: (remainingCount: number, totalCount: number, task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Observable called when all tasks are processed\r\n */\r\n public onTaskSuccessObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when a task had an error\r\n */\r\n public onTaskErrorObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when all tasks were executed\r\n */\r\n public onTasksDoneObservable = new Observable<AbstractAssetTask[]>();\r\n\r\n /**\r\n * Observable called when a task is done (whatever the result is)\r\n */\r\n public onProgressObservable = new Observable<IAssetsProgressEvent>();\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should use the default loading screen\r\n * @see https://doc.babylonjs.com/how_to/creating_a_custom_loading_screen\r\n */\r\n public useDefaultLoadingScreen = true;\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should automatically hide the loading screen\r\n * when all assets have been downloaded.\r\n * If set to false, you need to manually call in hideLoadingUI() once your scene is ready.\r\n */\r\n public autoHideLoadingUI = true;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param scene defines the scene to work on\r\n */\r\n constructor(scene: Scene) {\r\n this._scene = scene;\r\n }\r\n\r\n /**\r\n * Add a ContainerAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @returns a new ContainerAssetTask object\r\n */\r\n public addContainerTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File): ContainerAssetTask {\r\n var task = new ContainerAssetTask(taskName, meshesNames, rootUrl, sceneFilename);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a MeshAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @returns a new MeshAssetTask object\r\n */\r\n public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File): MeshAssetTask {\r\n var task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new TextFileAssetTask object\r\n */\r\n public addTextFileTask(taskName: string, url: string): TextFileAssetTask {\r\n var task = new TextFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a BinaryFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new BinaryFileAssetTask object\r\n */\r\n public addBinaryFileTask(taskName: string, url: string): BinaryFileAssetTask {\r\n var task = new BinaryFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a ImageAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new ImageAssetTask object\r\n */\r\n public addImageTask(taskName: string, url: string): ImageAssetTask {\r\n var task = new ImageAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param invertY defines if you want to invert Y axis of the loaded texture (false by default)\r\n * @param samplingMode defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default)\r\n * @returns a new TextureAssetTask object\r\n */\r\n public addTextureTask(taskName: string, url: string, noMipmap?: boolean, invertY?: boolean, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE): TextureAssetTask {\r\n var task = new TextureAssetTask(taskName, url, noMipmap, invertY, samplingMode);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a CubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param extensions defines the extension to use to load the cube map (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param files defines the list of files to load (can be null)\r\n * @param prefiltered defines the prefiltered texture option (default is false)\r\n * @returns a new CubeTextureAssetTask object\r\n */\r\n public addCubeTextureTask(taskName: string, url: string, extensions?: string[], noMipmap?: boolean, files?: string[], prefiltered?: boolean): CubeTextureAssetTask {\r\n var task = new CubeTextureAssetTask(taskName, url, extensions, noMipmap, files, prefiltered);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a HDRCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param generateHarmonics defines if you want to automatically generate (true by default)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n * @returns a new HDRCubeTextureAssetTask object\r\n */\r\n public addHDRCubeTextureTask(taskName: string, url: string, size: number, noMipmap = false, generateHarmonics = true, gammaSpace = false, reserved = false): HDRCubeTextureAssetTask {\r\n var task = new HDRCubeTextureAssetTask(taskName, url, size, noMipmap, generateHarmonics, gammaSpace, reserved);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a EquiRectangularCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param gammaSpace Specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those textures in linear space, but the standard material would require them in Gamma space)\r\n * @returns a new EquiRectangularCubeTextureAssetTask object\r\n */\r\n public addEquiRectangularCubeTextureAssetTask(taskName: string, url: string, size: number, noMipmap = false, gammaSpace = true): EquiRectangularCubeTextureAssetTask {\r\n const task = new EquiRectangularCubeTextureAssetTask(taskName, url, size, noMipmap, gammaSpace);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Remove a task from the assets manager.\r\n * @param task the task to remove\r\n */\r\n public removeTask(task: AbstractAssetTask) {\r\n let index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n\r\n private _decreaseWaitingTasksCount(task: AbstractAssetTask): void {\r\n this._waitingTasksCount--;\r\n\r\n try {\r\n if (this.onProgress) {\r\n this.onProgress(\r\n this._waitingTasksCount,\r\n this._totalTasksCount,\r\n task\r\n );\r\n }\r\n\r\n this.onProgressObservable.notifyObservers(\r\n new AssetsProgressEvent(\r\n this._waitingTasksCount,\r\n this._totalTasksCount,\r\n task\r\n )\r\n );\r\n } catch (e) {\r\n Logger.Error(\"Error running progress callbacks.\");\r\n console.log(e);\r\n }\r\n\r\n if (this._waitingTasksCount === 0) {\r\n try {\r\n\r\n var currentTasks = this._tasks.slice();\r\n\r\n if (this.onFinish) {\r\n // Calling onFinish with immutable array of tasks\r\n this.onFinish(currentTasks);\r\n }\r\n\r\n // Let's remove successfull tasks\r\n for (var task of currentTasks) {\r\n if (task.taskState === AssetTaskState.DONE) {\r\n let index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n } catch (e) {\r\n Logger.Error(\"Error running tasks-done callbacks.\");\r\n console.log(e);\r\n }\r\n this._isLoading = false;\r\n if (this.autoHideLoadingUI) {\r\n this._scene.getEngine().hideLoadingUI();\r\n }\r\n }\r\n }\r\n\r\n private _runTask(task: AbstractAssetTask): void {\r\n\r\n let done = () => {\r\n try {\r\n if (this.onTaskSuccess) {\r\n this.onTaskSuccess(task);\r\n }\r\n this.onTaskSuccessObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n } catch (e) {\r\n error(\"Error executing task success callbacks\", e);\r\n }\r\n\r\n };\r\n\r\n let error = (message?: string, exception?: any) => {\r\n task._setErrorObject(message, exception);\r\n\r\n if (this.onTaskError) {\r\n this.onTaskError(task);\r\n } else if (!task.onError) {\r\n Logger.Error(this._formatTaskErrorMessage(task));\r\n }\r\n this.onTaskErrorObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n };\r\n\r\n task.run(this._scene, done, error);\r\n }\r\n\r\n private _formatTaskErrorMessage(task: AbstractAssetTask) {\r\n let errorMessage = \"Unable to complete task \" + task.name;\r\n\r\n if (task.errorObject.message) {\r\n errorMessage += `: ${task.errorObject.message}`;\r\n }\r\n if (task.errorObject.exception) {\r\n errorMessage += `: ${task.errorObject.exception}`;\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Reset the AssetsManager and remove all tasks\r\n * @return the current instance of the AssetsManager\r\n */\r\n public reset(): AssetsManager {\r\n this._isLoading = false;\r\n this._tasks = new Array<AbstractAssetTask>();\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process\r\n * @return the current instance of the AssetsManager\r\n */\r\n public load(): AssetsManager {\r\n if (this._isLoading) {\r\n return this;\r\n }\r\n this._isLoading = true;\r\n this._waitingTasksCount = this._tasks.length;\r\n this._totalTasksCount = this._tasks.length;\r\n\r\n if (this._waitingTasksCount === 0) {\r\n this._isLoading = false;\r\n if (this.onFinish) {\r\n this.onFinish(this._tasks);\r\n }\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n return this;\r\n }\r\n\r\n if (this.useDefaultLoadingScreen) {\r\n this._scene.getEngine().displayLoadingUI();\r\n }\r\n\r\n for (var index = 0; index < this._tasks.length; index++) {\r\n var task = this._tasks[index];\r\n if (task.taskState === AssetTaskState.INIT) {\r\n this._runTask(task);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process as an async operation\r\n * @return a promise returning the list of failed tasks\r\n */\r\n public loadAsync(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (this._isLoading) {\r\n resolve();\r\n return;\r\n }\r\n this.onTasksDoneObservable.addOnce((remainingTasks) => {\r\n if (remainingTasks && remainingTasks.length) {\r\n reject(remainingTasks);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n\r\n this.load();\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"assetsManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/assetsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { SceneLoader } from \"../Loading/sceneLoader\";\r\nimport { Tools } from \"./tools\";\r\nimport { Observable } from \"./observable\";\r\nimport { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { CubeTexture } from \"../Materials/Textures/cubeTexture\";\r\nimport { HDRCubeTexture } from \"../Materials/Textures/hdrCubeTexture\";\r\nimport { EquiRectangularCubeTexture } from \"../Materials/Textures/equiRectangularCubeTexture\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { AnimationGroup } from '../Animations/animationGroup';\r\nimport { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\n/**\r\n * Defines the list of states available for a task inside a AssetsManager\r\n */\r\nexport enum AssetTaskState {\r\n /**\r\n * Initialization\r\n */\r\n INIT,\r\n /**\r\n * Running\r\n */\r\n RUNNING,\r\n /**\r\n * Done\r\n */\r\n DONE,\r\n /**\r\n * Error\r\n */\r\n ERROR\r\n}\r\n\r\n/**\r\n * Define an abstract asset task used with a AssetsManager class to load assets into a scene\r\n */\r\nexport abstract class AbstractAssetTask {\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: any) => void;\r\n\r\n /**\r\n * Callback called when the task is not successful\r\n */\r\n public onError: (task: any, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param name defines the name of the task\r\n */\r\n constructor(\r\n /**\r\n * Task name\r\n */public name: string) {\r\n }\r\n\r\n private _isCompleted = false;\r\n private _taskState = AssetTaskState.INIT;\r\n private _errorObject: { message?: string; exception?: any; };\r\n\r\n /**\r\n * Get if the task is completed\r\n */\r\n public get isCompleted(): boolean {\r\n return this._isCompleted;\r\n }\r\n\r\n /**\r\n * Gets the current state of the task\r\n */\r\n public get taskState(): AssetTaskState {\r\n return this._taskState;\r\n }\r\n\r\n /**\r\n * Gets the current error object (if task is in error)\r\n */\r\n public get errorObject(): { message?: string; exception?: any; } {\r\n return this._errorObject;\r\n }\r\n\r\n /**\r\n * Internal only\r\n * @hidden\r\n */\r\n public _setErrorObject(message?: string, exception?: any) {\r\n if (this._errorObject) {\r\n return;\r\n }\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception\r\n };\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public run(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n this._taskState = AssetTaskState.RUNNING;\r\n this.runTask(scene, () => {\r\n this.onDoneCallback(onSuccess, onError);\r\n }, (msg, exception) => {\r\n this.onErrorCallback(onError, msg, exception);\r\n });\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n throw new Error(\"runTask is not implemented\");\r\n }\r\n\r\n /**\r\n * Reset will set the task state back to INIT, so the next load call of the assets manager will execute this task again.\r\n * This can be used with failed tasks that have the reason for failure fixed.\r\n */\r\n public reset() {\r\n this._taskState = AssetTaskState.INIT;\r\n }\r\n\r\n private onErrorCallback(onError: (message?: string, exception?: any) => void, message?: string, exception?: any) {\r\n this._taskState = AssetTaskState.ERROR;\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception\r\n };\r\n\r\n if (this.onError) {\r\n this.onError(this, message, exception);\r\n }\r\n\r\n onError();\r\n }\r\n\r\n private onDoneCallback(onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n try {\r\n this._taskState = AssetTaskState.DONE;\r\n this._isCompleted = true;\r\n\r\n if (this.onSuccess) {\r\n this.onSuccess(this);\r\n }\r\n\r\n onSuccess();\r\n } catch (e) {\r\n this.onErrorCallback(onError, \"Task is done, error executing success callback(s)\", e);\r\n }\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Define the interface used by progress events raised during assets loading\r\n */\r\nexport interface IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n task: AbstractAssetTask;\r\n}\r\n\r\n/**\r\n * Class used to share progress information about assets loading\r\n */\r\nexport class AssetsProgressEvent implements IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n public remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n public totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n public task: AbstractAssetTask;\r\n\r\n /**\r\n * Creates a AssetsProgressEvent\r\n * @param remainingCount defines the number of remaining tasks to process\r\n * @param totalCount defines the total number of tasks\r\n * @param task defines the task that was just processed\r\n */\r\n constructor(remainingCount: number, totalCount: number, task: AbstractAssetTask) {\r\n this.remainingCount = remainingCount;\r\n this.totalCount = totalCount;\r\n this.task = task;\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load assets into a container\r\n */\r\nexport class ContainerAssetTask extends AbstractAssetTask {\r\n /**\r\n * Get the loaded asset container\r\n */\r\n public loadedContainer: AssetContainer;\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: ContainerAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: ContainerAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ContainerAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.LoadAssetContainer(this.rootUrl, this.sceneFilename, scene,\r\n (container: AssetContainer) => {\r\n this.loadedContainer = container;\r\n this.loadedMeshes = container.meshes;\r\n this.loadedParticleSystems = container.particleSystems;\r\n this.loadedSkeletons = container.skeletons;\r\n this.loadedAnimationGroups = container.animationGroups;\r\n onSuccess();\r\n }, null, (scene, message, exception) => {\r\n onError(message, exception);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load meshes\r\n */\r\nexport class MeshAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: MeshAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: MeshAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new MeshAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.ImportMesh(this.meshesNames, this.rootUrl, this.sceneFilename, scene,\r\n (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[]) => {\r\n this.loadedMeshes = meshes;\r\n this.loadedParticleSystems = particleSystems;\r\n this.loadedSkeletons = skeletons;\r\n this.loadedAnimationGroups = animationGroups;\r\n onSuccess();\r\n }, null, (scene, message, exception) => {\r\n onError(message, exception);\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load text content\r\n */\r\nexport class TextFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded text string\r\n */\r\n public text: string;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: TextFileAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: TextFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextFileAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(this.url, (data) => {\r\n this.text = data as string;\r\n onSuccess();\r\n }, undefined, false, false, (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load binary data\r\n */\r\nexport class BinaryFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the lodaded data (as an array buffer)\r\n */\r\n public data: ArrayBuffer;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: BinaryFileAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: BinaryFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new BinaryFileAssetTask object\r\n * @param name defines the name of the new task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(this.url, (data) => {\r\n this.data = data as ArrayBuffer;\r\n onSuccess();\r\n }, undefined, true, true, (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load images\r\n */\r\nexport class ImageAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded images\r\n */\r\n public image: HTMLImageElement;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: ImageAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: ImageAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ImageAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the image to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the image to load\r\n */\r\n public url: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n var img = new Image();\r\n\r\n Tools.SetCorsBehavior(this.url, img);\r\n\r\n img.onload = () => {\r\n this.image = img;\r\n onSuccess();\r\n };\r\n\r\n img.onerror = (err: string | Event): any => {\r\n onError(\"Error loading image\", err);\r\n };\r\n\r\n img.src = this.url;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the interface used by texture loading tasks\r\n */\r\nexport interface ITextureAssetTask<TEX extends BaseTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n texture: TEX;\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load 2D textures\r\n */\r\nexport class TextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<Texture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: Texture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: TextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: TextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param noMipmap defines if mipmap should not be generated (default is false)\r\n * @param invertY defines if texture must be inverted on Y axis (default is true)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines if mipmap should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * Defines if texture must be inverted on Y axis (default is true)\r\n */\r\n public invertY: boolean = true,\r\n /**\r\n * Defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n public samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n\r\n var onload = () => {\r\n onSuccess();\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new Texture(this.url, scene, this.noMipmap, this.invertY, this.samplingMode, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load cube textures\r\n */\r\nexport class CubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<CubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: CubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: CubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: CubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new CubeTextureAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n * @param extensions defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param files defines the explicit list of files (undefined by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n */\r\n public url: string,\r\n /**\r\n * Defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n */\r\n public extensions?: string[],\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * Defines the explicit list of files (undefined by default)\r\n */\r\n public files?: string[],\r\n /**\r\n * Defines the prefiltered texture option (default is false)\r\n */\r\n public prefiltered?: boolean) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n\r\n var onload = () => {\r\n onSuccess();\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new CubeTexture(this.url, scene, this.extensions, this.noMipmap, this.files, onload, onerror, undefined, this.prefiltered);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load HDR cube textures\r\n */\r\nexport class HDRCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<HDRCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: HDRCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: HDRCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: HDRCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new HDRCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be) If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param generateHarmonics specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap = false,\r\n /**\r\n * Specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n */\r\n public generateHarmonics = true,\r\n /**\r\n * Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n */\r\n public gammaSpace = false,\r\n /**\r\n * Internal Use Only\r\n */\r\n public reserved = false) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n\r\n var onload = () => {\r\n onSuccess();\r\n };\r\n\r\n var onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new HDRCubeTexture(this.url, scene, this.size, this.noMipmap, this.generateHarmonics, this.gammaSpace, this.reserved, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load Equirectangular cube textures\r\n */\r\nexport class EquiRectangularCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<EquiRectangularCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: EquiRectangularCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: EquiRectangularCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: EquiRectangularCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new EquiRectangularCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be)\r\n * If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param gammaSpace specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * (default is true)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap: boolean = false,\r\n /**\r\n * Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space,\r\n * but the standard material would require them in Gamma space) (default is true)\r\n */\r\n public gammaSpace: boolean = true) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void): void {\r\n\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new EquiRectangularCubeTexture(this.url, scene, this.size, this.noMipmap, this.gammaSpace, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * This class can be used to easily import assets into a scene\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_assetsmanager\r\n */\r\nexport class AssetsManager {\r\n private _scene: Scene;\r\n private _isLoading = false;\r\n\r\n protected _tasks = new Array<AbstractAssetTask>();\r\n protected _waitingTasksCount = 0;\r\n protected _totalTasksCount = 0;\r\n\r\n /**\r\n * Callback called when all tasks are processed\r\n */\r\n public onFinish: (tasks: AbstractAssetTask[]) => void;\r\n\r\n /**\r\n * Callback called when a task is successful\r\n */\r\n public onTaskSuccess: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task had an error\r\n */\r\n public onTaskError: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task is done (whatever the result is)\r\n */\r\n public onProgress: (remainingCount: number, totalCount: number, task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Observable called when all tasks are processed\r\n */\r\n public onTaskSuccessObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when a task had an error\r\n */\r\n public onTaskErrorObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when all tasks were executed\r\n */\r\n public onTasksDoneObservable = new Observable<AbstractAssetTask[]>();\r\n\r\n /**\r\n * Observable called when a task is done (whatever the result is)\r\n */\r\n public onProgressObservable = new Observable<IAssetsProgressEvent>();\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should use the default loading screen\r\n * @see https://doc.babylonjs.com/how_to/creating_a_custom_loading_screen\r\n */\r\n public useDefaultLoadingScreen = true;\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should automatically hide the loading screen\r\n * when all assets have been downloaded.\r\n * If set to false, you need to manually call in hideLoadingUI() once your scene is ready.\r\n */\r\n public autoHideLoadingUI = true;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param scene defines the scene to work on\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n }\r\n\r\n /**\r\n * Add a ContainerAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @returns a new ContainerAssetTask object\r\n */\r\n public addContainerTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File): ContainerAssetTask {\r\n var task = new ContainerAssetTask(taskName, meshesNames, rootUrl, sceneFilename);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a MeshAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @returns a new MeshAssetTask object\r\n */\r\n public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File): MeshAssetTask {\r\n var task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new TextFileAssetTask object\r\n */\r\n public addTextFileTask(taskName: string, url: string): TextFileAssetTask {\r\n var task = new TextFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a BinaryFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new BinaryFileAssetTask object\r\n */\r\n public addBinaryFileTask(taskName: string, url: string): BinaryFileAssetTask {\r\n var task = new BinaryFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a ImageAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new ImageAssetTask object\r\n */\r\n public addImageTask(taskName: string, url: string): ImageAssetTask {\r\n var task = new ImageAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param invertY defines if you want to invert Y axis of the loaded texture (false by default)\r\n * @param samplingMode defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default)\r\n * @returns a new TextureAssetTask object\r\n */\r\n public addTextureTask(taskName: string, url: string, noMipmap?: boolean, invertY?: boolean, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE): TextureAssetTask {\r\n var task = new TextureAssetTask(taskName, url, noMipmap, invertY, samplingMode);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a CubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param extensions defines the extension to use to load the cube map (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param files defines the list of files to load (can be null)\r\n * @param prefiltered defines the prefiltered texture option (default is false)\r\n * @returns a new CubeTextureAssetTask object\r\n */\r\n public addCubeTextureTask(taskName: string, url: string, extensions?: string[], noMipmap?: boolean, files?: string[], prefiltered?: boolean): CubeTextureAssetTask {\r\n var task = new CubeTextureAssetTask(taskName, url, extensions, noMipmap, files, prefiltered);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a HDRCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param generateHarmonics defines if you want to automatically generate (true by default)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n * @returns a new HDRCubeTextureAssetTask object\r\n */\r\n public addHDRCubeTextureTask(taskName: string, url: string, size: number, noMipmap = false, generateHarmonics = true, gammaSpace = false, reserved = false): HDRCubeTextureAssetTask {\r\n var task = new HDRCubeTextureAssetTask(taskName, url, size, noMipmap, generateHarmonics, gammaSpace, reserved);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a EquiRectangularCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param gammaSpace Specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those textures in linear space, but the standard material would require them in Gamma space)\r\n * @returns a new EquiRectangularCubeTextureAssetTask object\r\n */\r\n public addEquiRectangularCubeTextureAssetTask(taskName: string, url: string, size: number, noMipmap = false, gammaSpace = true): EquiRectangularCubeTextureAssetTask {\r\n const task = new EquiRectangularCubeTextureAssetTask(taskName, url, size, noMipmap, gammaSpace);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Remove a task from the assets manager.\r\n * @param task the task to remove\r\n */\r\n public removeTask(task: AbstractAssetTask) {\r\n let index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n\r\n private _decreaseWaitingTasksCount(task: AbstractAssetTask): void {\r\n this._waitingTasksCount--;\r\n\r\n try {\r\n if (this.onProgress) {\r\n this.onProgress(\r\n this._waitingTasksCount,\r\n this._totalTasksCount,\r\n task\r\n );\r\n }\r\n\r\n this.onProgressObservable.notifyObservers(\r\n new AssetsProgressEvent(\r\n this._waitingTasksCount,\r\n this._totalTasksCount,\r\n task\r\n )\r\n );\r\n } catch (e) {\r\n Logger.Error(\"Error running progress callbacks.\");\r\n console.log(e);\r\n }\r\n\r\n if (this._waitingTasksCount === 0) {\r\n try {\r\n\r\n var currentTasks = this._tasks.slice();\r\n\r\n if (this.onFinish) {\r\n // Calling onFinish with immutable array of tasks\r\n this.onFinish(currentTasks);\r\n }\r\n\r\n // Let's remove successfull tasks\r\n for (var task of currentTasks) {\r\n if (task.taskState === AssetTaskState.DONE) {\r\n let index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n } catch (e) {\r\n Logger.Error(\"Error running tasks-done callbacks.\");\r\n console.log(e);\r\n }\r\n this._isLoading = false;\r\n if (this.autoHideLoadingUI) {\r\n this._scene.getEngine().hideLoadingUI();\r\n }\r\n }\r\n }\r\n\r\n private _runTask(task: AbstractAssetTask): void {\r\n\r\n let done = () => {\r\n try {\r\n if (this.onTaskSuccess) {\r\n this.onTaskSuccess(task);\r\n }\r\n this.onTaskSuccessObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n } catch (e) {\r\n error(\"Error executing task success callbacks\", e);\r\n }\r\n\r\n };\r\n\r\n let error = (message?: string, exception?: any) => {\r\n task._setErrorObject(message, exception);\r\n\r\n if (this.onTaskError) {\r\n this.onTaskError(task);\r\n } else if (!task.onError) {\r\n Logger.Error(this._formatTaskErrorMessage(task));\r\n }\r\n this.onTaskErrorObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n };\r\n\r\n task.run(this._scene, done, error);\r\n }\r\n\r\n private _formatTaskErrorMessage(task: AbstractAssetTask) {\r\n let errorMessage = \"Unable to complete task \" + task.name;\r\n\r\n if (task.errorObject.message) {\r\n errorMessage += `: ${task.errorObject.message}`;\r\n }\r\n if (task.errorObject.exception) {\r\n errorMessage += `: ${task.errorObject.exception}`;\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Reset the AssetsManager and remove all tasks\r\n * @return the current instance of the AssetsManager\r\n */\r\n public reset(): AssetsManager {\r\n this._isLoading = false;\r\n this._tasks = new Array<AbstractAssetTask>();\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process\r\n * @return the current instance of the AssetsManager\r\n */\r\n public load(): AssetsManager {\r\n if (this._isLoading) {\r\n return this;\r\n }\r\n this._isLoading = true;\r\n this._waitingTasksCount = this._tasks.length;\r\n this._totalTasksCount = this._tasks.length;\r\n\r\n if (this._waitingTasksCount === 0) {\r\n this._isLoading = false;\r\n if (this.onFinish) {\r\n this.onFinish(this._tasks);\r\n }\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n return this;\r\n }\r\n\r\n if (this.useDefaultLoadingScreen) {\r\n this._scene.getEngine().displayLoadingUI();\r\n }\r\n\r\n for (var index = 0; index < this._tasks.length; index++) {\r\n var task = this._tasks[index];\r\n if (task.taskState === AssetTaskState.INIT) {\r\n this._runTask(task);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process as an async operation\r\n * @return a promise returning the list of failed tasks\r\n */\r\n public loadAsync(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (this._isLoading) {\r\n resolve();\r\n return;\r\n }\r\n this.onTasksDoneObservable.addOnce((remainingTasks) => {\r\n if (remainingTasks && remainingTasks.length) {\r\n reject(remainingTasks);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n\r\n this.load();\r\n });\r\n }\r\n}\r\n"]}
|