@babylonjs/core 7.3.0 → 7.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/condition.js.map +1 -1
- package/Actions/directActions.js.map +1 -1
- package/Actions/directAudioActions.js.map +1 -1
- package/Actions/interpolateValueAction.js.map +1 -1
- package/Animations/easing.js.map +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
- package/Bones/bone.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js.map +1 -1
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/freeCameraInputsManager.js.map +1 -1
- package/Cameras/gamepadCamera.js.map +1 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.js.map +1 -1
- package/Cameras/universalCamera.js.map +1 -1
- package/Cameras/virtualJoysticksCamera.js.map +1 -1
- package/Debug/boneAxesViewer.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js.map +1 -1
- package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
- package/Engines/Processors/shaderCodeTestNode.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +2 -0
- package/Engines/WebGPU/webgpuHardwareTexture.js +2 -0
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/abstractEngine.js +14 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.d.ts +0 -8
- package/Engines/engine.js +0 -28
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +4 -0
- package/Engines/webgpuEngine.js +4 -0
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCoordinateTransformBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphBranchBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
- package/Gamepads/dualShockGamepad.js.map +1 -1
- package/Gamepads/gamepad.js.map +1 -1
- package/Gamepads/xboxGamepad.js.map +1 -1
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/photoDome.js.map +1 -1
- package/Helpers/textureDome.js.map +1 -1
- package/Helpers/videoDome.js.map +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/hemisphericLight.js.map +1 -1
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js.map +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Lights/spotLight.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/addBlock.js.map +1 -1
- package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/clampBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
- package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
- package/Materials/Node/Blocks/crossBlock.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
- package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
- package/Materials/Node/Blocks/divideBlock.js.map +1 -1
- package/Materials/Node/Blocks/dotBlock.js.map +1 -1
- package/Materials/Node/Blocks/elbowBlock.js.map +1 -1
- package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
- package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixDeterminantBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixTransposeBlock.js.map +1 -1
- package/Materials/Node/Blocks/maxBlock.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
- package/Materials/Node/Blocks/minBlock.js.map +1 -1
- package/Materials/Node/Blocks/modBlock.js.map +1 -1
- package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
- package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
- package/Materials/Node/Blocks/negateBlock.js.map +1 -1
- package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
- package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
- package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/powBlock.js.map +1 -1
- package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
- package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
- package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
- package/Materials/Node/Blocks/refractBlock.js.map +1 -1
- package/Materials/Node/Blocks/remapBlock.js.map +1 -1
- package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
- package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
- package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
- package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
- package/Materials/Node/Blocks/stepBlock.js.map +1 -1
- package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
- package/Materials/Node/Blocks/transformBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
- package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
- package/Materials/Node/Blocks/waveBlock.js.map +1 -1
- package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialConnectionPointCustomObject.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/colorGradingTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/material.decalMapConfiguration.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/materialHelper.d.ts +2 -2
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.js.map +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateLinearBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateRadialBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/alignBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/rotationXBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/rotationYBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/rotationZBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/scalingBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/translationBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/nullBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
- package/Meshes/Node/Blocks/boundingBlock.js.map +1 -1
- package/Meshes/Node/Blocks/computeNormalsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
- package/Meshes/Node/Blocks/debugBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryArcTan2Block.js.map +1 -1
- package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCrossBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryDesaturateBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryDistanceBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryDotBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryElbowBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryInfoBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryLengthBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryLerpBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryModBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryNLerpBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOutputBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryPosterizeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryPowBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryReplaceColorBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryRotate2dBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometrySmoothStepBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryStepBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
- package/Meshes/Node/Blocks/intFloatConverterBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mapRangeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
- package/Meshes/Node/Blocks/matrixComposeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
- package/Meshes/Node/Blocks/noiseBlock.js.map +1 -1
- package/Meshes/Node/Blocks/normalizeVectorBlock.js.map +1 -1
- package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
- package/Meshes/Node/Blocks/vectorConverterBlock.js.map +1 -1
- package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/goldbergMesh.js.map +1 -1
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/smartArray.js.map +1 -1
- package/Misc/workerPool.js.map +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/proximityCastResult.js.map +1 -1
- package/Physics/v1/physicsJoint.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/displayPassPostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/reflectiveShadowMap.js.map +1 -1
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spritePackedManager.js.map +1 -1
- package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
- package/XR/features/Layers/WebXRProjectionLayer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRBackgroundRemover.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXREyeTracking.js.map +1 -1
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRHitTest.js.map +1 -1
- package/XR/features/WebXRHitTestLegacy.js.map +1 -1
- package/XR/features/WebXRImageTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/WebXRRawCameraAccess.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/native/nativeXRRenderTarget.js.map +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRWebGLLayer.js.map +1 -1
- package/assets/Draco/draco_wasm_wrapper.js +115 -115
- package/package.json +1 -1
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetsManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/assetsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport type { Skeleton } from \"../Bones/skeleton\";\r\nimport { SceneLoader, SceneLoaderAnimationGroupLoadingMode } from \"../Loading/sceneLoader\";\r\nimport { Tools } from \"./tools\";\r\nimport { Observable } from \"./observable\";\r\nimport type { 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 type { Animatable } from \"../Animations/animatable\";\r\nimport type { AnimationGroup } from \"../Animations/animationGroup\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Nullable } from \"../types\";\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 * @internal\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(\r\n scene,\r\n () => {\r\n this._onDoneCallback(onSuccess, onError);\r\n },\r\n (msg, exception) => {\r\n this._onErrorCallback(onError, msg, exception);\r\n }\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 * 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 transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\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 * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\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 /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\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(\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (container: AssetContainer) => {\r\n this.loadedContainer = container;\r\n this.loadedMeshes = container.meshes;\r\n this.loadedTransformNodes = container.transformNodes;\r\n this.loadedParticleSystems = container.particleSystems;\r\n this.loadedSkeletons = container.skeletons;\r\n this.loadedAnimationGroups = container.animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\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 transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\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 * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\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 /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\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(\r\n this.meshesNames,\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[], transformNodes: TransformNode[]) => {\r\n this.loadedMeshes = meshes;\r\n this.loadedTransformNodes = transformNodes;\r\n this.loadedParticleSystems = particleSystems;\r\n this.loadedSkeletons = skeletons;\r\n this.loadedAnimationGroups = animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load animations\r\n */\r\nexport class AnimationAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n /**\r\n * Gets the list of loaded animatables\r\n */\r\n public loadedAnimatables: Array<Animatable>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: AnimationAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onError: (task: AnimationAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AnimationAssetTask\r\n * @param name defines the name of the task\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param filename defines the filename or File of the scene to load from\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\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 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 to load from\r\n */\r\n public filename: string | File,\r\n /**\r\n * Defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n */\r\n public targetConverter?: Nullable<(target: any) => any>,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\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 const startingIndexForNewAnimatables = scene.animatables.length;\r\n const startingIndexForNewAnimationGroups = scene.animationGroups.length;\r\n this.loadedAnimatables = [];\r\n this.loadedAnimationGroups = [];\r\n\r\n SceneLoader.ImportAnimations(\r\n this.rootUrl,\r\n this.filename,\r\n scene,\r\n false,\r\n SceneLoaderAnimationGroupLoadingMode.NoSync,\r\n this.targetConverter,\r\n () => {\r\n this.loadedAnimatables = scene.animatables.slice(startingIndexForNewAnimatables);\r\n this.loadedAnimationGroups = scene.animationGroups.slice(startingIndexForNewAnimationGroups);\r\n\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\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 ) {\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(\r\n this.url,\r\n (data) => {\r\n this.text = data as string;\r\n onSuccess();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n (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/**\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 loaded 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 ) {\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(\r\n this.url,\r\n (data) => {\r\n this.data = data as ArrayBuffer;\r\n onSuccess();\r\n },\r\n undefined,\r\n true,\r\n true,\r\n (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/**\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 ) {\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 const 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 ) {\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 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 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 * @param prefiltered\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 ) {\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 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 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 ) {\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 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 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 ) {\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 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/features/featuresDeepDive/importers/assetManager\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/features/featuresDeepDive/scene/customLoadingScreen\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 * @param extension defines the extension to use to load the file\r\n * @returns a new ContainerAssetTask object\r\n */\r\n public addContainerTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): ContainerAssetTask {\r\n const task = new ContainerAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\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 * @param extension defines the extension to use to load the file\r\n * @returns a new MeshAssetTask object\r\n */\r\n public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): MeshAssetTask {\r\n const task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\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 const 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 const 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 const 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 (true 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 const 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 const 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(\r\n taskName: string,\r\n url: string,\r\n size: number,\r\n noMipmap = false,\r\n generateHarmonics = true,\r\n gammaSpace = false,\r\n reserved = false\r\n ): HDRCubeTextureAssetTask {\r\n const 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 const 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(this._waitingTasksCount, this._totalTasksCount, task);\r\n }\r\n\r\n this.onProgressObservable.notifyObservers(new AssetsProgressEvent(this._waitingTasksCount, this._totalTasksCount, task));\r\n } catch (e) {\r\n Logger.Error(\"Error running progress callbacks.\");\r\n Logger.Log(e);\r\n }\r\n\r\n if (this._waitingTasksCount === 0) {\r\n try {\r\n const 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 successful tasks\r\n for (const task of currentTasks) {\r\n if (task.taskState === AssetTaskState.DONE) {\r\n const 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 Logger.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 const 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 const 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 * @returns 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 * @returns 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 (let index = 0; index < this._tasks.length; index++) {\r\n const 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 * @returns 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":["../../../../dev/core/src/Misc/assetsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport type { Skeleton } from \"../Bones/skeleton\";\r\nimport { SceneLoader, SceneLoaderAnimationGroupLoadingMode } from \"../Loading/sceneLoader\";\r\nimport { Tools } from \"./tools\";\r\nimport { Observable } from \"./observable\";\r\nimport type { 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 type { Animatable } from \"../Animations/animatable\";\r\nimport type { AnimationGroup } from \"../Animations/animationGroup\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Nullable } from \"../types\";\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 * @internal\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(\r\n scene,\r\n () => {\r\n this._onDoneCallback(onSuccess, onError);\r\n },\r\n (msg, exception) => {\r\n this._onErrorCallback(onError, msg, exception);\r\n }\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\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 * 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 transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\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 override onSuccess: (task: ContainerAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override 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 /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.LoadAssetContainer(\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (container: AssetContainer) => {\r\n this.loadedContainer = container;\r\n this.loadedMeshes = container.meshes;\r\n this.loadedTransformNodes = container.transformNodes;\r\n this.loadedParticleSystems = container.particleSystems;\r\n this.loadedSkeletons = container.skeletons;\r\n this.loadedAnimationGroups = container.animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\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 transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\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 override onSuccess: (task: MeshAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override 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 /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.ImportMesh(\r\n this.meshesNames,\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[], transformNodes: TransformNode[]) => {\r\n this.loadedMeshes = meshes;\r\n this.loadedTransformNodes = transformNodes;\r\n this.loadedParticleSystems = particleSystems;\r\n this.loadedSkeletons = skeletons;\r\n this.loadedAnimationGroups = animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load animations\r\n */\r\nexport class AnimationAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n /**\r\n * Gets the list of loaded animatables\r\n */\r\n public loadedAnimatables: Array<Animatable>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: AnimationAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: AnimationAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AnimationAssetTask\r\n * @param name defines the name of the task\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param filename defines the filename or File of the scene to load from\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\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 to load from\r\n */\r\n public filename: string | File,\r\n /**\r\n * Defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n */\r\n public targetConverter?: Nullable<(target: any) => any>,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const startingIndexForNewAnimatables = scene.animatables.length;\r\n const startingIndexForNewAnimationGroups = scene.animationGroups.length;\r\n this.loadedAnimatables = [];\r\n this.loadedAnimationGroups = [];\r\n\r\n SceneLoader.ImportAnimations(\r\n this.rootUrl,\r\n this.filename,\r\n scene,\r\n false,\r\n SceneLoaderAnimationGroupLoadingMode.NoSync,\r\n this.targetConverter,\r\n () => {\r\n this.loadedAnimatables = scene.animatables.slice(startingIndexForNewAnimatables);\r\n this.loadedAnimationGroups = scene.animationGroups.slice(startingIndexForNewAnimationGroups);\r\n\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\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 override onSuccess: (task: TextFileAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 override 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 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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(\r\n this.url,\r\n (data) => {\r\n this.text = data as string;\r\n onSuccess();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n (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/**\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 loaded 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 override onSuccess: (task: BinaryFileAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 override 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 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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(\r\n this.url,\r\n (data) => {\r\n this.data = data as ArrayBuffer;\r\n onSuccess();\r\n },\r\n undefined,\r\n true,\r\n true,\r\n (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/**\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 override onSuccess: (task: ImageAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 override name: string,\r\n /**\r\n * Defines the location of the image to load\r\n */\r\n public url: string\r\n ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const 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 override onSuccess: (task: TextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 override 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 ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\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 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 override onSuccess: (task: CubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 * @param prefiltered\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override 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 ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\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 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 override onSuccess: (task: HDRCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 override 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 ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\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 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 override onSuccess: (task: EquiRectangularCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override 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 override 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 ) {\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 override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void): void {\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/features/featuresDeepDive/importers/assetManager\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/features/featuresDeepDive/scene/customLoadingScreen\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 * @param extension defines the extension to use to load the file\r\n * @returns a new ContainerAssetTask object\r\n */\r\n public addContainerTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): ContainerAssetTask {\r\n const task = new ContainerAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\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 * @param extension defines the extension to use to load the file\r\n * @returns a new MeshAssetTask object\r\n */\r\n public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): MeshAssetTask {\r\n const task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\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 const 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 const 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 const 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 (true 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 const 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 const 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(\r\n taskName: string,\r\n url: string,\r\n size: number,\r\n noMipmap = false,\r\n generateHarmonics = true,\r\n gammaSpace = false,\r\n reserved = false\r\n ): HDRCubeTextureAssetTask {\r\n const 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 const 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(this._waitingTasksCount, this._totalTasksCount, task);\r\n }\r\n\r\n this.onProgressObservable.notifyObservers(new AssetsProgressEvent(this._waitingTasksCount, this._totalTasksCount, task));\r\n } catch (e) {\r\n Logger.Error(\"Error running progress callbacks.\");\r\n Logger.Log(e);\r\n }\r\n\r\n if (this._waitingTasksCount === 0) {\r\n try {\r\n const 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 successful tasks\r\n for (const task of currentTasks) {\r\n if (task.taskState === AssetTaskState.DONE) {\r\n const 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 Logger.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 const 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 const 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 * @returns 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 * @returns 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 (let index = 0; index < this._tasks.length; index++) {\r\n const 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 * @returns 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"]}
|
package/Misc/depthReducer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depthReducer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/depthReducer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,aAAa;IAI3C;;;OAGG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,gBAAyC,IAAI,EAAE,OAAe,SAAS,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,IAAI;QAClJ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEnD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;QAED,IAAI,aAAa,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;gBACvB,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;aAC7B;YAED,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAClI,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAE9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;SAC/D;QAED,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC7F,CAAC;IAED;;OAEG;
|
|
1
|
+
{"version":3,"file":"depthReducer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/depthReducer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,aAAa;IAI3C;;;OAGG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,YAAY,MAAc;QACtB,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,gBAAyC,IAAI,EAAE,OAAe,SAAS,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,IAAI;QAClJ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEtC,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEnD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;QAED,IAAI,aAAa,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;gBACvB,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;aAC7B;YAED,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAClI,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAE9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;SAC/D;QAED,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC7F,CAAC;IAED;;OAEG;IACa,gBAAgB,CAC5B,aAAkC,EAClC,UAAmB,EACnB,OAAe,SAAS,CAAC,sBAAsB,EAC/C,uBAAuB,GAAG,IAAI;QAE9B,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACrF,CAAC;IAED;;;;OAIG;IACa,QAAQ;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;SACtC;QAED,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACa,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;SACvC;IACL,CAAC;IAED;;;OAGG;IACa,OAAO,CAAC,UAAU,GAAG,IAAI;QACrC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,cAAc,IAAI,UAAU,EAAE;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC3D,IAAI,KAAK,EAAE;gBACP,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aACtD;YAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;IACL,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { DepthRenderer } from \"../Rendering/depthRenderer\";\r\n\r\nimport { MinMaxReducer } from \"./minMaxReducer\";\r\n\r\n/**\r\n * This class is a small wrapper around the MinMaxReducer class to compute the min/max values of a depth texture\r\n */\r\nexport class DepthReducer extends MinMaxReducer {\r\n private _depthRenderer: Nullable<DepthRenderer>;\r\n private _depthRendererId: string;\r\n\r\n /**\r\n * Gets the depth renderer used for the computation.\r\n * Note that the result is null if you provide your own renderer when calling setDepthRenderer.\r\n */\r\n public get depthRenderer(): Nullable<DepthRenderer> {\r\n return this._depthRenderer;\r\n }\r\n\r\n /**\r\n * Creates a depth reducer\r\n * @param camera The camera used to render the depth texture\r\n */\r\n constructor(camera: Camera) {\r\n super(camera);\r\n }\r\n\r\n /**\r\n * Sets the depth renderer to use to generate the depth map\r\n * @param depthRenderer The depth renderer to use. If not provided, a new one will be created automatically\r\n * @param type The texture type of the depth map (default: TEXTURETYPE_HALF_FLOAT)\r\n * @param forceFullscreenViewport Forces the post processes used for the reduction to be applied without taking into account viewport (defaults to true)\r\n */\r\n public setDepthRenderer(depthRenderer: Nullable<DepthRenderer> = null, type: number = Constants.TEXTURETYPE_HALF_FLOAT, forceFullscreenViewport = true): void {\r\n const scene = this._camera.getScene();\r\n\r\n if (this._depthRenderer) {\r\n delete scene._depthRenderer[this._depthRendererId];\r\n\r\n this._depthRenderer.dispose();\r\n this._depthRenderer = null;\r\n }\r\n\r\n if (depthRenderer === null) {\r\n if (!scene._depthRenderer) {\r\n scene._depthRenderer = {};\r\n }\r\n\r\n depthRenderer = this._depthRenderer = new DepthRenderer(scene, type, this._camera, false, Constants.TEXTURE_NEAREST_SAMPLINGMODE);\r\n depthRenderer.enabled = false;\r\n\r\n this._depthRendererId = \"minmax\" + this._camera.id;\r\n scene._depthRenderer[this._depthRendererId] = depthRenderer;\r\n }\r\n\r\n super.setSourceTexture(depthRenderer.getDepthMap(), true, type, forceFullscreenViewport);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override setSourceTexture(\r\n sourceTexture: RenderTargetTexture,\r\n depthRedux: boolean,\r\n type: number = Constants.TEXTURETYPE_HALF_FLOAT,\r\n forceFullscreenViewport = true\r\n ): void {\r\n super.setSourceTexture(sourceTexture, depthRedux, type, forceFullscreenViewport);\r\n }\r\n\r\n /**\r\n * Activates the reduction computation.\r\n * When activated, the observers registered in onAfterReductionPerformed are\r\n * called after the computation is performed\r\n */\r\n public override activate(): void {\r\n if (this._depthRenderer) {\r\n this._depthRenderer.enabled = true;\r\n }\r\n\r\n super.activate();\r\n }\r\n\r\n /**\r\n * Deactivates the reduction computation.\r\n */\r\n public override deactivate(): void {\r\n super.deactivate();\r\n\r\n if (this._depthRenderer) {\r\n this._depthRenderer.enabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the depth reducer\r\n * @param disposeAll true to dispose all the resources. You should always call this function with true as the parameter (or without any parameter as it is the default one). This flag is meant to be used internally.\r\n */\r\n public override dispose(disposeAll = true): void {\r\n super.dispose(disposeAll);\r\n\r\n if (this._depthRenderer && disposeAll) {\r\n const scene = this._depthRenderer.getDepthMap().getScene();\r\n if (scene) {\r\n delete scene._depthRenderer[this._depthRendererId];\r\n }\r\n\r\n this._depthRenderer.dispose();\r\n this._depthRenderer = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneOptimizer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/sceneOptimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport type { Scene, IDisposable } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Observer } from \"./observable\";\r\nimport { Observable } from \"./observable\";\r\n\r\n/**\r\n * Defines the root class used to create scene optimization to use with SceneOptimizer\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates the SceneOptimization object\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n constructor(\r\n /**\r\n * Defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n public priority: number = 0\r\n ) {}\r\n}\r\n\r\n/**\r\n * Defines an optimization used to reduce the size of render target textures\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class TextureOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Reducing render target texture size to \" + this.maximumSize;\r\n }\r\n\r\n /**\r\n * Creates the TextureOptimization object\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n * @param maximumSize defines the maximum sized allowed for textures (1024 is the default value). If a texture is bigger, it will be scaled down using a factor defined by the step parameter\r\n * @param step defines the factor (0.5 by default) used to scale down textures bigger than maximum sized allowed.\r\n */\r\n constructor(\r\n /**\r\n * Defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n public priority: number = 0,\r\n /**\r\n * Defines the maximum sized allowed for textures (1024 is the default value). If a texture is bigger, it will be scaled down using a factor defined by the step parameter\r\n */\r\n public maximumSize: number = 1024,\r\n /**\r\n * Defines the factor (0.5 by default) used to scale down textures bigger than maximum sized allowed.\r\n */\r\n public step = 0.5\r\n ) {\r\n super(priority);\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n let allDone = true;\r\n for (let index = 0; index < scene.textures.length; index++) {\r\n const texture = scene.textures[index];\r\n\r\n if (!texture.canRescale || (<any>texture).getContext) {\r\n continue;\r\n }\r\n\r\n const currentSize = texture.getSize();\r\n const maxDimension = Math.max(currentSize.width, currentSize.height);\r\n\r\n if (maxDimension > this.maximumSize) {\r\n texture.scale(this.step);\r\n allDone = false;\r\n }\r\n }\r\n\r\n return allDone;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to increase or decrease the rendering resolution\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class HardwareScalingOptimization extends SceneOptimization {\r\n private _currentScale = -1;\r\n private _directionOffset = 1;\r\n\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Setting hardware scaling level to \" + this._currentScale;\r\n }\r\n\r\n /**\r\n * Creates the HardwareScalingOptimization object\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n * @param maximumScale defines the maximum scale to use (2 by default)\r\n * @param step defines the step to use between two passes (0.5 by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n public priority: number = 0,\r\n /**\r\n * Defines the maximum scale to use (2 by default)\r\n */\r\n public maximumScale: number = 2,\r\n /**\r\n * Defines the step to use between two passes (0.5 by default)\r\n */\r\n public step: number = 0.25\r\n ) {\r\n super(priority);\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n if (this._currentScale === -1) {\r\n this._currentScale = scene.getEngine().getHardwareScalingLevel();\r\n if (this._currentScale > this.maximumScale) {\r\n this._directionOffset = -1;\r\n }\r\n }\r\n\r\n this._currentScale += this._directionOffset * this.step;\r\n\r\n scene.getEngine().setHardwareScalingLevel(this._currentScale);\r\n\r\n return this._directionOffset === 1 ? this._currentScale >= this.maximumScale : this._currentScale <= this.maximumScale;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to remove shadows\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class ShadowsOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Turning shadows on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.shadowsEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn post-processes off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class PostProcessesOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Turning post-processes on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.postProcessesEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn lens flares off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class LensFlaresOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Turning lens flares on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.lensFlaresEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization based on user defined callback.\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class CustomOptimization extends SceneOptimization {\r\n /**\r\n * Callback called to apply the custom optimization.\r\n */\r\n public onApply: (scene: Scene, optimizer: SceneOptimizer) => boolean;\r\n\r\n /**\r\n * Callback called to get custom description\r\n */\r\n public onGetDescription: () => string;\r\n\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n if (this.onGetDescription) {\r\n return this.onGetDescription();\r\n }\r\n\r\n return \"Running user defined callback\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n if (this.onApply) {\r\n return this.onApply(scene, optimizer);\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn particles off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class ParticlesOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Turning particles on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.particlesEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn render targets off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class RenderTargetsOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Turning render targets off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.renderTargetsEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to merge meshes with compatible materials\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class MergeMeshesOptimization extends SceneOptimization {\r\n private static _UpdateSelectionTree = false;\r\n\r\n /**\r\n * Gets or sets a boolean which defines if optimization octree has to be updated\r\n */\r\n public static get UpdateSelectionTree(): boolean {\r\n return MergeMeshesOptimization._UpdateSelectionTree;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean which defines if optimization octree has to be updated\r\n */\r\n public static set UpdateSelectionTree(value: boolean) {\r\n MergeMeshesOptimization._UpdateSelectionTree = value;\r\n }\r\n\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"Merging similar meshes together\";\r\n }\r\n\r\n private _canBeMerged = (abstractMesh: AbstractMesh): boolean => {\r\n if (!(abstractMesh instanceof Mesh)) {\r\n return false;\r\n }\r\n\r\n const mesh = <Mesh>abstractMesh;\r\n\r\n if (mesh.isDisposed()) {\r\n return false;\r\n }\r\n\r\n if (!mesh.isVisible || !mesh.isEnabled()) {\r\n return false;\r\n }\r\n\r\n if (mesh.instances.length > 0) {\r\n return false;\r\n }\r\n\r\n if (mesh.skeleton || mesh.hasLODLevels) {\r\n return false;\r\n }\r\n\r\n if (mesh.getTotalVertices() === 0) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @param updateSelectionTree defines that the selection octree has to be updated (false by default)\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer, updateSelectionTree?: boolean): boolean {\r\n const globalPool = scene.meshes.slice(0);\r\n let globalLength = globalPool.length;\r\n\r\n for (let index = 0; index < globalLength; index++) {\r\n const currentPool: Mesh[] = [];\r\n const current = globalPool[index];\r\n\r\n // Checks\r\n if (!this._canBeMerged(current)) {\r\n continue;\r\n }\r\n\r\n currentPool.push(<Mesh>current);\r\n\r\n // Find compatible meshes\r\n for (let subIndex = index + 1; subIndex < globalLength; subIndex++) {\r\n const otherMesh = globalPool[subIndex];\r\n\r\n if (!this._canBeMerged(otherMesh)) {\r\n continue;\r\n }\r\n\r\n if (otherMesh.material !== current.material) {\r\n continue;\r\n }\r\n\r\n if (otherMesh.checkCollisions !== current.checkCollisions) {\r\n continue;\r\n }\r\n\r\n currentPool.push(<Mesh>otherMesh);\r\n globalLength--;\r\n\r\n globalPool.splice(subIndex, 1);\r\n\r\n subIndex--;\r\n }\r\n\r\n if (currentPool.length < 2) {\r\n continue;\r\n }\r\n\r\n // Merge meshes\r\n Mesh.MergeMeshes(currentPool, undefined, true);\r\n }\r\n\r\n // Call the octree system optimization if it is defined.\r\n const sceneAsAny = scene as any;\r\n if (sceneAsAny.createOrUpdateSelectionOctree) {\r\n if (updateSelectionTree != undefined) {\r\n if (updateSelectionTree) {\r\n sceneAsAny.createOrUpdateSelectionOctree();\r\n }\r\n } else if (MergeMeshesOptimization.UpdateSelectionTree) {\r\n sceneAsAny.createOrUpdateSelectionOctree();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines a list of options used by SceneOptimizer\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class SceneOptimizerOptions {\r\n /**\r\n * Gets the list of optimizations to apply\r\n */\r\n public optimizations: SceneOptimization[] = [];\r\n\r\n /**\r\n * Creates a new list of options used by SceneOptimizer\r\n * @param targetFrameRate defines the target frame rate to reach (60 by default)\r\n * @param trackerDuration defines the interval between two checks (2000ms by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the target frame rate to reach (60 by default)\r\n */\r\n public targetFrameRate: number = 60,\r\n /**\r\n * Defines the interval between two checks (2000ms by default)\r\n */\r\n public trackerDuration: number = 2000\r\n ) {}\r\n\r\n /**\r\n * Add a new optimization\r\n * @param optimization defines the SceneOptimization to add to the list of active optimizations\r\n * @returns the current SceneOptimizerOptions\r\n */\r\n public addOptimization(optimization: SceneOptimization): SceneOptimizerOptions {\r\n this.optimizations.push(optimization);\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a new custom optimization\r\n * @param onApply defines the callback called to apply the custom optimization (true if everything that can be done was applied)\r\n * @param onGetDescription defines the callback called to get the description attached with the optimization.\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n * @returns the current SceneOptimizerOptions\r\n */\r\n public addCustomOptimization(onApply: (scene: Scene, optimizer: SceneOptimizer) => boolean, onGetDescription: () => string, priority: number = 0): SceneOptimizerOptions {\r\n const optimization = new CustomOptimization(priority);\r\n optimization.onApply = onApply;\r\n optimization.onGetDescription = onGetDescription;\r\n\r\n this.optimizations.push(optimization);\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates a list of pre-defined optimizations aimed to reduce the visual impact on the scene\r\n * @param targetFrameRate defines the target frame rate (60 by default)\r\n * @returns a SceneOptimizerOptions object\r\n */\r\n public static LowDegradationAllowed(targetFrameRate?: number): SceneOptimizerOptions {\r\n const result = new SceneOptimizerOptions(targetFrameRate);\r\n\r\n let priority = 0;\r\n result.addOptimization(new MergeMeshesOptimization(priority));\r\n result.addOptimization(new ShadowsOptimization(priority));\r\n result.addOptimization(new LensFlaresOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new PostProcessesOptimization(priority));\r\n result.addOptimization(new ParticlesOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new TextureOptimization(priority, 1024));\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a list of pre-defined optimizations aimed to have a moderate impact on the scene visual\r\n * @param targetFrameRate defines the target frame rate (60 by default)\r\n * @returns a SceneOptimizerOptions object\r\n */\r\n public static ModerateDegradationAllowed(targetFrameRate?: number): SceneOptimizerOptions {\r\n const result = new SceneOptimizerOptions(targetFrameRate);\r\n\r\n let priority = 0;\r\n result.addOptimization(new MergeMeshesOptimization(priority));\r\n result.addOptimization(new ShadowsOptimization(priority));\r\n result.addOptimization(new LensFlaresOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new PostProcessesOptimization(priority));\r\n result.addOptimization(new ParticlesOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new TextureOptimization(priority, 512));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new RenderTargetsOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new HardwareScalingOptimization(priority, 2));\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a list of pre-defined optimizations aimed to have a big impact on the scene visual\r\n * @param targetFrameRate defines the target frame rate (60 by default)\r\n * @returns a SceneOptimizerOptions object\r\n */\r\n public static HighDegradationAllowed(targetFrameRate?: number): SceneOptimizerOptions {\r\n const result = new SceneOptimizerOptions(targetFrameRate);\r\n\r\n let priority = 0;\r\n result.addOptimization(new MergeMeshesOptimization(priority));\r\n result.addOptimization(new ShadowsOptimization(priority));\r\n result.addOptimization(new LensFlaresOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new PostProcessesOptimization(priority));\r\n result.addOptimization(new ParticlesOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new TextureOptimization(priority, 256));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new RenderTargetsOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new HardwareScalingOptimization(priority, 4));\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * Class used to run optimizations in order to reach a target frame rate\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class SceneOptimizer implements IDisposable {\r\n private _isRunning = false;\r\n private _options: SceneOptimizerOptions;\r\n private _scene: Scene;\r\n private _currentPriorityLevel = 0;\r\n private _targetFrameRate = 60;\r\n private _trackerDuration = 2000;\r\n private _currentFrameRate = 0;\r\n private _sceneDisposeObserver: Nullable<Observer<Scene>>;\r\n private _improvementMode = false;\r\n\r\n /**\r\n * Defines an observable called when the optimizer reaches the target frame rate\r\n */\r\n public onSuccessObservable = new Observable<SceneOptimizer>();\r\n /**\r\n * Defines an observable called when the optimizer enables an optimization\r\n */\r\n public onNewOptimizationAppliedObservable = new Observable<SceneOptimization>();\r\n /**\r\n * Defines an observable called when the optimizer is not able to reach the target frame rate\r\n */\r\n public onFailureObservable = new Observable<SceneOptimizer>();\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the optimizer is in improvement mode\r\n */\r\n public get isInImprovementMode(): boolean {\r\n return this._improvementMode;\r\n }\r\n\r\n public set isInImprovementMode(value: boolean) {\r\n this._improvementMode = value;\r\n }\r\n\r\n /**\r\n * Gets the current priority level (0 at start)\r\n */\r\n public get currentPriorityLevel(): number {\r\n return this._currentPriorityLevel;\r\n }\r\n\r\n /**\r\n * Gets the current frame rate checked by the SceneOptimizer\r\n */\r\n public get currentFrameRate(): number {\r\n return this._currentFrameRate;\r\n }\r\n\r\n /**\r\n * Gets or sets the current target frame rate (60 by default)\r\n */\r\n public get targetFrameRate(): number {\r\n return this._targetFrameRate;\r\n }\r\n\r\n /**\r\n * Gets or sets the current target frame rate (60 by default)\r\n */\r\n public set targetFrameRate(value: number) {\r\n this._targetFrameRate = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the current interval between two checks (every 2000ms by default)\r\n */\r\n public get trackerDuration(): number {\r\n return this._trackerDuration;\r\n }\r\n\r\n /**\r\n * Gets or sets the current interval between two checks (every 2000ms by default)\r\n */\r\n public set trackerDuration(value: number) {\r\n this._trackerDuration = value;\r\n }\r\n\r\n /**\r\n * Gets the list of active optimizations\r\n */\r\n public get optimizations(): SceneOptimization[] {\r\n return this._options.optimizations;\r\n }\r\n\r\n /**\r\n * Creates a new SceneOptimizer\r\n * @param scene defines the scene to work on\r\n * @param options defines the options to use with the SceneOptimizer\r\n * @param autoGeneratePriorities defines if priorities must be generated and not read from SceneOptimization property (true by default)\r\n * @param improvementMode defines if the scene optimizer must run the maximum optimization while staying over a target frame instead of trying to reach the target framerate (false by default)\r\n */\r\n public constructor(scene: Scene, options?: SceneOptimizerOptions, autoGeneratePriorities = true, improvementMode = false) {\r\n if (!options) {\r\n this._options = new SceneOptimizerOptions();\r\n } else {\r\n this._options = options;\r\n }\r\n\r\n if (this._options.targetFrameRate) {\r\n this._targetFrameRate = this._options.targetFrameRate;\r\n }\r\n\r\n if (this._options.trackerDuration) {\r\n this._trackerDuration = this._options.trackerDuration;\r\n }\r\n\r\n if (autoGeneratePriorities) {\r\n let priority = 0;\r\n for (const optim of this._options.optimizations) {\r\n optim.priority = priority++;\r\n }\r\n }\r\n\r\n this._improvementMode = improvementMode;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this._sceneDisposeObserver = this._scene.onDisposeObservable.add(() => {\r\n this._sceneDisposeObserver = null;\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * Stops the current optimizer\r\n */\r\n public stop() {\r\n this._isRunning = false;\r\n }\r\n\r\n /**\r\n * Reset the optimizer to initial step (current priority level = 0)\r\n */\r\n public reset() {\r\n this._currentPriorityLevel = 0;\r\n }\r\n\r\n /**\r\n * Start the optimizer. By default it will try to reach a specific framerate\r\n * but if the optimizer is set with improvementMode === true then it will run all optimization while frame rate is above the target frame rate\r\n */\r\n public start() {\r\n if (this._isRunning) {\r\n return;\r\n }\r\n\r\n this._isRunning = true;\r\n\r\n // Let's wait for the scene to be ready before running our check\r\n this._scene.executeWhenReady(() => {\r\n setTimeout(() => {\r\n this._checkCurrentState();\r\n }, this._trackerDuration);\r\n });\r\n }\r\n\r\n private _checkCurrentState() {\r\n if (!this._isRunning) {\r\n return;\r\n }\r\n\r\n const scene = this._scene;\r\n const options = this._options;\r\n\r\n this._currentFrameRate = Math.round(scene.getEngine().getFps());\r\n\r\n if ((this._improvementMode && this._currentFrameRate <= this._targetFrameRate) || (!this._improvementMode && this._currentFrameRate >= this._targetFrameRate)) {\r\n this._isRunning = false;\r\n this.onSuccessObservable.notifyObservers(this);\r\n return;\r\n }\r\n\r\n // Apply current level of optimizations\r\n let allDone = true;\r\n let noOptimizationApplied = true;\r\n for (let index = 0; index < options.optimizations.length; index++) {\r\n const optimization = options.optimizations[index];\r\n\r\n if (optimization.priority === this._currentPriorityLevel) {\r\n noOptimizationApplied = false;\r\n allDone = allDone && optimization.apply(scene, this);\r\n this.onNewOptimizationAppliedObservable.notifyObservers(optimization);\r\n }\r\n }\r\n\r\n // If no optimization was applied, this is a failure :(\r\n if (noOptimizationApplied) {\r\n this._isRunning = false;\r\n this.onFailureObservable.notifyObservers(this);\r\n\r\n return;\r\n }\r\n\r\n // If all optimizations were done, move to next level\r\n if (allDone) {\r\n this._currentPriorityLevel++;\r\n }\r\n\r\n // Let's the system running for a specific amount of time before checking FPS\r\n scene.executeWhenReady(() => {\r\n setTimeout(() => {\r\n this._checkCurrentState();\r\n }, this._trackerDuration);\r\n });\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n this.stop();\r\n this.onSuccessObservable.clear();\r\n this.onFailureObservable.clear();\r\n this.onNewOptimizationAppliedObservable.clear();\r\n if (this._sceneDisposeObserver) {\r\n this._scene.onDisposeObservable.remove(this._sceneDisposeObserver);\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to create a SceneOptimizer with one single line of code\r\n * @param scene defines the scene to work on\r\n * @param options defines the options to use with the SceneOptimizer\r\n * @param onSuccess defines a callback to call on success\r\n * @param onFailure defines a callback to call on failure\r\n * @returns the new SceneOptimizer object\r\n */\r\n public static OptimizeAsync(scene: Scene, options?: SceneOptimizerOptions, onSuccess?: () => void, onFailure?: () => void): SceneOptimizer {\r\n const optimizer = new SceneOptimizer(scene, options || SceneOptimizerOptions.ModerateDegradationAllowed(), false);\r\n\r\n if (onSuccess) {\r\n optimizer.onSuccessObservable.add(() => {\r\n onSuccess();\r\n });\r\n }\r\n\r\n if (onFailure) {\r\n optimizer.onFailureObservable.add(() => {\r\n onFailure();\r\n });\r\n }\r\n\r\n optimizer.start();\r\n\r\n return optimizer;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"sceneOptimizer.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/sceneOptimizer.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport type { Scene, IDisposable } from \"../scene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Observer } from \"./observable\";\r\nimport { Observable } from \"./observable\";\r\n\r\n/**\r\n * Defines the root class used to create scene optimization to use with SceneOptimizer\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public getDescription(): string {\r\n return \"\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates the SceneOptimization object\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n constructor(\r\n /**\r\n * Defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n public priority: number = 0\r\n ) {}\r\n}\r\n\r\n/**\r\n * Defines an optimization used to reduce the size of render target textures\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class TextureOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Reducing render target texture size to \" + this.maximumSize;\r\n }\r\n\r\n /**\r\n * Creates the TextureOptimization object\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n * @param maximumSize defines the maximum sized allowed for textures (1024 is the default value). If a texture is bigger, it will be scaled down using a factor defined by the step parameter\r\n * @param step defines the factor (0.5 by default) used to scale down textures bigger than maximum sized allowed.\r\n */\r\n constructor(\r\n /**\r\n * Defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n public override priority: number = 0,\r\n /**\r\n * Defines the maximum sized allowed for textures (1024 is the default value). If a texture is bigger, it will be scaled down using a factor defined by the step parameter\r\n */\r\n public maximumSize: number = 1024,\r\n /**\r\n * Defines the factor (0.5 by default) used to scale down textures bigger than maximum sized allowed.\r\n */\r\n public step = 0.5\r\n ) {\r\n super(priority);\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n let allDone = true;\r\n for (let index = 0; index < scene.textures.length; index++) {\r\n const texture = scene.textures[index];\r\n\r\n if (!texture.canRescale || (<any>texture).getContext) {\r\n continue;\r\n }\r\n\r\n const currentSize = texture.getSize();\r\n const maxDimension = Math.max(currentSize.width, currentSize.height);\r\n\r\n if (maxDimension > this.maximumSize) {\r\n texture.scale(this.step);\r\n allDone = false;\r\n }\r\n }\r\n\r\n return allDone;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to increase or decrease the rendering resolution\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class HardwareScalingOptimization extends SceneOptimization {\r\n private _currentScale = -1;\r\n private _directionOffset = 1;\r\n\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Setting hardware scaling level to \" + this._currentScale;\r\n }\r\n\r\n /**\r\n * Creates the HardwareScalingOptimization object\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n * @param maximumScale defines the maximum scale to use (2 by default)\r\n * @param step defines the step to use between two passes (0.5 by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the priority of this optimization (0 by default which means first in the list)\r\n */\r\n public override priority: number = 0,\r\n /**\r\n * Defines the maximum scale to use (2 by default)\r\n */\r\n public maximumScale: number = 2,\r\n /**\r\n * Defines the step to use between two passes (0.5 by default)\r\n */\r\n public step: number = 0.25\r\n ) {\r\n super(priority);\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n if (this._currentScale === -1) {\r\n this._currentScale = scene.getEngine().getHardwareScalingLevel();\r\n if (this._currentScale > this.maximumScale) {\r\n this._directionOffset = -1;\r\n }\r\n }\r\n\r\n this._currentScale += this._directionOffset * this.step;\r\n\r\n scene.getEngine().setHardwareScalingLevel(this._currentScale);\r\n\r\n return this._directionOffset === 1 ? this._currentScale >= this.maximumScale : this._currentScale <= this.maximumScale;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to remove shadows\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class ShadowsOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Turning shadows on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.shadowsEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn post-processes off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class PostProcessesOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Turning post-processes on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.postProcessesEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn lens flares off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class LensFlaresOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Turning lens flares on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.lensFlaresEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization based on user defined callback.\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class CustomOptimization extends SceneOptimization {\r\n /**\r\n * Callback called to apply the custom optimization.\r\n */\r\n public onApply: (scene: Scene, optimizer: SceneOptimizer) => boolean;\r\n\r\n /**\r\n * Callback called to get custom description\r\n */\r\n public onGetDescription: () => string;\r\n\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n if (this.onGetDescription) {\r\n return this.onGetDescription();\r\n }\r\n\r\n return \"Running user defined callback\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n if (this.onApply) {\r\n return this.onApply(scene, optimizer);\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn particles off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class ParticlesOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Turning particles on/off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.particlesEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to turn render targets off\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class RenderTargetsOptimization extends SceneOptimization {\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Turning render targets off\";\r\n }\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer): boolean {\r\n scene.renderTargetsEnabled = optimizer.isInImprovementMode;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines an optimization used to merge meshes with compatible materials\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class MergeMeshesOptimization extends SceneOptimization {\r\n private static _UpdateSelectionTree = false;\r\n\r\n /**\r\n * Gets or sets a boolean which defines if optimization octree has to be updated\r\n */\r\n public static get UpdateSelectionTree(): boolean {\r\n return MergeMeshesOptimization._UpdateSelectionTree;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean which defines if optimization octree has to be updated\r\n */\r\n public static set UpdateSelectionTree(value: boolean) {\r\n MergeMeshesOptimization._UpdateSelectionTree = value;\r\n }\r\n\r\n /**\r\n * Gets a string describing the action executed by the current optimization\r\n * @returns description string\r\n */\r\n public override getDescription(): string {\r\n return \"Merging similar meshes together\";\r\n }\r\n\r\n private _canBeMerged = (abstractMesh: AbstractMesh): boolean => {\r\n if (!(abstractMesh instanceof Mesh)) {\r\n return false;\r\n }\r\n\r\n const mesh = <Mesh>abstractMesh;\r\n\r\n if (mesh.isDisposed()) {\r\n return false;\r\n }\r\n\r\n if (!mesh.isVisible || !mesh.isEnabled()) {\r\n return false;\r\n }\r\n\r\n if (mesh.instances.length > 0) {\r\n return false;\r\n }\r\n\r\n if (mesh.skeleton || mesh.hasLODLevels) {\r\n return false;\r\n }\r\n\r\n if (mesh.getTotalVertices() === 0) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * This function will be called by the SceneOptimizer when its priority is reached in order to apply the change required by the current optimization\r\n * @param scene defines the current scene where to apply this optimization\r\n * @param optimizer defines the current optimizer\r\n * @param updateSelectionTree defines that the selection octree has to be updated (false by default)\r\n * @returns true if everything that can be done was applied\r\n */\r\n public override apply(scene: Scene, optimizer: SceneOptimizer, updateSelectionTree?: boolean): boolean {\r\n const globalPool = scene.meshes.slice(0);\r\n let globalLength = globalPool.length;\r\n\r\n for (let index = 0; index < globalLength; index++) {\r\n const currentPool: Mesh[] = [];\r\n const current = globalPool[index];\r\n\r\n // Checks\r\n if (!this._canBeMerged(current)) {\r\n continue;\r\n }\r\n\r\n currentPool.push(<Mesh>current);\r\n\r\n // Find compatible meshes\r\n for (let subIndex = index + 1; subIndex < globalLength; subIndex++) {\r\n const otherMesh = globalPool[subIndex];\r\n\r\n if (!this._canBeMerged(otherMesh)) {\r\n continue;\r\n }\r\n\r\n if (otherMesh.material !== current.material) {\r\n continue;\r\n }\r\n\r\n if (otherMesh.checkCollisions !== current.checkCollisions) {\r\n continue;\r\n }\r\n\r\n currentPool.push(<Mesh>otherMesh);\r\n globalLength--;\r\n\r\n globalPool.splice(subIndex, 1);\r\n\r\n subIndex--;\r\n }\r\n\r\n if (currentPool.length < 2) {\r\n continue;\r\n }\r\n\r\n // Merge meshes\r\n Mesh.MergeMeshes(currentPool, undefined, true);\r\n }\r\n\r\n // Call the octree system optimization if it is defined.\r\n const sceneAsAny = scene as any;\r\n if (sceneAsAny.createOrUpdateSelectionOctree) {\r\n if (updateSelectionTree != undefined) {\r\n if (updateSelectionTree) {\r\n sceneAsAny.createOrUpdateSelectionOctree();\r\n }\r\n } else if (MergeMeshesOptimization.UpdateSelectionTree) {\r\n sceneAsAny.createOrUpdateSelectionOctree();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Defines a list of options used by SceneOptimizer\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class SceneOptimizerOptions {\r\n /**\r\n * Gets the list of optimizations to apply\r\n */\r\n public optimizations: SceneOptimization[] = [];\r\n\r\n /**\r\n * Creates a new list of options used by SceneOptimizer\r\n * @param targetFrameRate defines the target frame rate to reach (60 by default)\r\n * @param trackerDuration defines the interval between two checks (2000ms by default)\r\n */\r\n constructor(\r\n /**\r\n * Defines the target frame rate to reach (60 by default)\r\n */\r\n public targetFrameRate: number = 60,\r\n /**\r\n * Defines the interval between two checks (2000ms by default)\r\n */\r\n public trackerDuration: number = 2000\r\n ) {}\r\n\r\n /**\r\n * Add a new optimization\r\n * @param optimization defines the SceneOptimization to add to the list of active optimizations\r\n * @returns the current SceneOptimizerOptions\r\n */\r\n public addOptimization(optimization: SceneOptimization): SceneOptimizerOptions {\r\n this.optimizations.push(optimization);\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a new custom optimization\r\n * @param onApply defines the callback called to apply the custom optimization (true if everything that can be done was applied)\r\n * @param onGetDescription defines the callback called to get the description attached with the optimization.\r\n * @param priority defines the priority of this optimization (0 by default which means first in the list)\r\n * @returns the current SceneOptimizerOptions\r\n */\r\n public addCustomOptimization(onApply: (scene: Scene, optimizer: SceneOptimizer) => boolean, onGetDescription: () => string, priority: number = 0): SceneOptimizerOptions {\r\n const optimization = new CustomOptimization(priority);\r\n optimization.onApply = onApply;\r\n optimization.onGetDescription = onGetDescription;\r\n\r\n this.optimizations.push(optimization);\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates a list of pre-defined optimizations aimed to reduce the visual impact on the scene\r\n * @param targetFrameRate defines the target frame rate (60 by default)\r\n * @returns a SceneOptimizerOptions object\r\n */\r\n public static LowDegradationAllowed(targetFrameRate?: number): SceneOptimizerOptions {\r\n const result = new SceneOptimizerOptions(targetFrameRate);\r\n\r\n let priority = 0;\r\n result.addOptimization(new MergeMeshesOptimization(priority));\r\n result.addOptimization(new ShadowsOptimization(priority));\r\n result.addOptimization(new LensFlaresOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new PostProcessesOptimization(priority));\r\n result.addOptimization(new ParticlesOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new TextureOptimization(priority, 1024));\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a list of pre-defined optimizations aimed to have a moderate impact on the scene visual\r\n * @param targetFrameRate defines the target frame rate (60 by default)\r\n * @returns a SceneOptimizerOptions object\r\n */\r\n public static ModerateDegradationAllowed(targetFrameRate?: number): SceneOptimizerOptions {\r\n const result = new SceneOptimizerOptions(targetFrameRate);\r\n\r\n let priority = 0;\r\n result.addOptimization(new MergeMeshesOptimization(priority));\r\n result.addOptimization(new ShadowsOptimization(priority));\r\n result.addOptimization(new LensFlaresOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new PostProcessesOptimization(priority));\r\n result.addOptimization(new ParticlesOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new TextureOptimization(priority, 512));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new RenderTargetsOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new HardwareScalingOptimization(priority, 2));\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a list of pre-defined optimizations aimed to have a big impact on the scene visual\r\n * @param targetFrameRate defines the target frame rate (60 by default)\r\n * @returns a SceneOptimizerOptions object\r\n */\r\n public static HighDegradationAllowed(targetFrameRate?: number): SceneOptimizerOptions {\r\n const result = new SceneOptimizerOptions(targetFrameRate);\r\n\r\n let priority = 0;\r\n result.addOptimization(new MergeMeshesOptimization(priority));\r\n result.addOptimization(new ShadowsOptimization(priority));\r\n result.addOptimization(new LensFlaresOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new PostProcessesOptimization(priority));\r\n result.addOptimization(new ParticlesOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new TextureOptimization(priority, 256));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new RenderTargetsOptimization(priority));\r\n\r\n // Next priority\r\n priority++;\r\n result.addOptimization(new HardwareScalingOptimization(priority, 4));\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * Class used to run optimizations in order to reach a target frame rate\r\n * @description More details at https://doc.babylonjs.com/features/featuresDeepDive/scene/sceneOptimizer\r\n */\r\nexport class SceneOptimizer implements IDisposable {\r\n private _isRunning = false;\r\n private _options: SceneOptimizerOptions;\r\n private _scene: Scene;\r\n private _currentPriorityLevel = 0;\r\n private _targetFrameRate = 60;\r\n private _trackerDuration = 2000;\r\n private _currentFrameRate = 0;\r\n private _sceneDisposeObserver: Nullable<Observer<Scene>>;\r\n private _improvementMode = false;\r\n\r\n /**\r\n * Defines an observable called when the optimizer reaches the target frame rate\r\n */\r\n public onSuccessObservable = new Observable<SceneOptimizer>();\r\n /**\r\n * Defines an observable called when the optimizer enables an optimization\r\n */\r\n public onNewOptimizationAppliedObservable = new Observable<SceneOptimization>();\r\n /**\r\n * Defines an observable called when the optimizer is not able to reach the target frame rate\r\n */\r\n public onFailureObservable = new Observable<SceneOptimizer>();\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the optimizer is in improvement mode\r\n */\r\n public get isInImprovementMode(): boolean {\r\n return this._improvementMode;\r\n }\r\n\r\n public set isInImprovementMode(value: boolean) {\r\n this._improvementMode = value;\r\n }\r\n\r\n /**\r\n * Gets the current priority level (0 at start)\r\n */\r\n public get currentPriorityLevel(): number {\r\n return this._currentPriorityLevel;\r\n }\r\n\r\n /**\r\n * Gets the current frame rate checked by the SceneOptimizer\r\n */\r\n public get currentFrameRate(): number {\r\n return this._currentFrameRate;\r\n }\r\n\r\n /**\r\n * Gets or sets the current target frame rate (60 by default)\r\n */\r\n public get targetFrameRate(): number {\r\n return this._targetFrameRate;\r\n }\r\n\r\n /**\r\n * Gets or sets the current target frame rate (60 by default)\r\n */\r\n public set targetFrameRate(value: number) {\r\n this._targetFrameRate = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the current interval between two checks (every 2000ms by default)\r\n */\r\n public get trackerDuration(): number {\r\n return this._trackerDuration;\r\n }\r\n\r\n /**\r\n * Gets or sets the current interval between two checks (every 2000ms by default)\r\n */\r\n public set trackerDuration(value: number) {\r\n this._trackerDuration = value;\r\n }\r\n\r\n /**\r\n * Gets the list of active optimizations\r\n */\r\n public get optimizations(): SceneOptimization[] {\r\n return this._options.optimizations;\r\n }\r\n\r\n /**\r\n * Creates a new SceneOptimizer\r\n * @param scene defines the scene to work on\r\n * @param options defines the options to use with the SceneOptimizer\r\n * @param autoGeneratePriorities defines if priorities must be generated and not read from SceneOptimization property (true by default)\r\n * @param improvementMode defines if the scene optimizer must run the maximum optimization while staying over a target frame instead of trying to reach the target framerate (false by default)\r\n */\r\n public constructor(scene: Scene, options?: SceneOptimizerOptions, autoGeneratePriorities = true, improvementMode = false) {\r\n if (!options) {\r\n this._options = new SceneOptimizerOptions();\r\n } else {\r\n this._options = options;\r\n }\r\n\r\n if (this._options.targetFrameRate) {\r\n this._targetFrameRate = this._options.targetFrameRate;\r\n }\r\n\r\n if (this._options.trackerDuration) {\r\n this._trackerDuration = this._options.trackerDuration;\r\n }\r\n\r\n if (autoGeneratePriorities) {\r\n let priority = 0;\r\n for (const optim of this._options.optimizations) {\r\n optim.priority = priority++;\r\n }\r\n }\r\n\r\n this._improvementMode = improvementMode;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n this._sceneDisposeObserver = this._scene.onDisposeObservable.add(() => {\r\n this._sceneDisposeObserver = null;\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * Stops the current optimizer\r\n */\r\n public stop() {\r\n this._isRunning = false;\r\n }\r\n\r\n /**\r\n * Reset the optimizer to initial step (current priority level = 0)\r\n */\r\n public reset() {\r\n this._currentPriorityLevel = 0;\r\n }\r\n\r\n /**\r\n * Start the optimizer. By default it will try to reach a specific framerate\r\n * but if the optimizer is set with improvementMode === true then it will run all optimization while frame rate is above the target frame rate\r\n */\r\n public start() {\r\n if (this._isRunning) {\r\n return;\r\n }\r\n\r\n this._isRunning = true;\r\n\r\n // Let's wait for the scene to be ready before running our check\r\n this._scene.executeWhenReady(() => {\r\n setTimeout(() => {\r\n this._checkCurrentState();\r\n }, this._trackerDuration);\r\n });\r\n }\r\n\r\n private _checkCurrentState() {\r\n if (!this._isRunning) {\r\n return;\r\n }\r\n\r\n const scene = this._scene;\r\n const options = this._options;\r\n\r\n this._currentFrameRate = Math.round(scene.getEngine().getFps());\r\n\r\n if ((this._improvementMode && this._currentFrameRate <= this._targetFrameRate) || (!this._improvementMode && this._currentFrameRate >= this._targetFrameRate)) {\r\n this._isRunning = false;\r\n this.onSuccessObservable.notifyObservers(this);\r\n return;\r\n }\r\n\r\n // Apply current level of optimizations\r\n let allDone = true;\r\n let noOptimizationApplied = true;\r\n for (let index = 0; index < options.optimizations.length; index++) {\r\n const optimization = options.optimizations[index];\r\n\r\n if (optimization.priority === this._currentPriorityLevel) {\r\n noOptimizationApplied = false;\r\n allDone = allDone && optimization.apply(scene, this);\r\n this.onNewOptimizationAppliedObservable.notifyObservers(optimization);\r\n }\r\n }\r\n\r\n // If no optimization was applied, this is a failure :(\r\n if (noOptimizationApplied) {\r\n this._isRunning = false;\r\n this.onFailureObservable.notifyObservers(this);\r\n\r\n return;\r\n }\r\n\r\n // If all optimizations were done, move to next level\r\n if (allDone) {\r\n this._currentPriorityLevel++;\r\n }\r\n\r\n // Let's the system running for a specific amount of time before checking FPS\r\n scene.executeWhenReady(() => {\r\n setTimeout(() => {\r\n this._checkCurrentState();\r\n }, this._trackerDuration);\r\n });\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n this.stop();\r\n this.onSuccessObservable.clear();\r\n this.onFailureObservable.clear();\r\n this.onNewOptimizationAppliedObservable.clear();\r\n if (this._sceneDisposeObserver) {\r\n this._scene.onDisposeObservable.remove(this._sceneDisposeObserver);\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to create a SceneOptimizer with one single line of code\r\n * @param scene defines the scene to work on\r\n * @param options defines the options to use with the SceneOptimizer\r\n * @param onSuccess defines a callback to call on success\r\n * @param onFailure defines a callback to call on failure\r\n * @returns the new SceneOptimizer object\r\n */\r\n public static OptimizeAsync(scene: Scene, options?: SceneOptimizerOptions, onSuccess?: () => void, onFailure?: () => void): SceneOptimizer {\r\n const optimizer = new SceneOptimizer(scene, options || SceneOptimizerOptions.ModerateDegradationAllowed(), false);\r\n\r\n if (onSuccess) {\r\n optimizer.onSuccessObservable.add(() => {\r\n onSuccess();\r\n });\r\n }\r\n\r\n if (onFailure) {\r\n optimizer.onFailureObservable.add(() => {\r\n onFailure();\r\n });\r\n }\r\n\r\n optimizer.start();\r\n\r\n return optimizer;\r\n }\r\n}\r\n"]}
|