@babylonjs/core 5.27.0 → 5.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.js +2 -1
- package/Animations/animatable.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.js +2 -1
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +70 -45
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +12 -6
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +2 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +2 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +6 -6
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Bones/bone.js +2 -1
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.js +3 -2
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +2 -2
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +5 -3
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +2 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +6 -4
- package/Cameras/camera.js.map +1 -1
- package/Compute/computeEffect.js +8 -5
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +12 -11
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +2 -1
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.js +3 -2
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/ray.js +2 -1
- package/Culling/ray.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +9 -7
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.js +2 -1
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +29 -24
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +5 -3
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +2 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +12 -9
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +4 -4
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.js +3 -2
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.views.js +2 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +11 -6
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +2 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +2 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +4 -2
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +3 -2
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js +2 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +7 -6
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -14
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +4 -3
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +3 -2
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +2 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +2 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +4 -3
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +5 -4
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +5 -3
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +4 -2
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +4 -2
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.js +3 -2
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +2 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +40 -38
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.d.ts +898 -273
- package/Engines/engine.js +5 -3
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +7 -5
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +7 -0
- package/Engines/nullEngine.js +42 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +14 -9
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +25 -16
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +87 -61
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +4 -2
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +6 -4
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +21 -6
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +3 -2
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +4 -2
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +4 -2
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/videoDome.js +2 -1
- package/Helpers/videoDome.js.map +1 -1
- package/Layers/effectLayer.js +5 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +4 -3
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +2 -1
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +25 -21
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +13 -8
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +2 -1
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.d.ts +1 -1
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +10 -6
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +3 -2
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +2 -1
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +26 -24
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +48 -44
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -26
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +6 -6
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +3 -2
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +5 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +4 -3
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +5 -4
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +7 -6
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +4 -3
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialDecorator.js +1 -1
- package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +25 -19
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +9 -6
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +7 -4
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +7 -4
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +14 -13
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js +2 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +7 -4
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +5 -4
- package/Materials/Textures/baseTexture.js +1 -0
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +8 -4
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +4 -2
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +4 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +6 -3
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +6 -4
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +26 -15
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.js +16 -13
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +4 -2
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.d.ts +3 -3
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +3 -3
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.js +4 -2
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +15 -10
- package/Materials/effect.js.map +1 -1
- package/Materials/material.d.ts +14 -0
- package/Materials/material.detailMapConfiguration.js +2 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +35 -3
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.js +6 -5
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.js +1 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginManager.js +3 -2
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/multiMaterial.js +2 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js +12 -9
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +13 -8
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +12 -10
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.d.ts +7 -6
- package/Maths/math.vector.js +10 -8
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/groundBuilder.js +1 -1
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/abstractMesh.js +8 -5
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +2 -1
- package/Meshes/csg.js.map +1 -1
- package/Meshes/instancedMesh.js +2 -1
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +1 -1
- package/Meshes/mesh.js +23 -13
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +4 -3
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/subMesh.js +14 -8
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +18 -12
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +7 -1
- package/Meshes/transformNode.js +15 -4
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +12 -8
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +3 -2
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/assetsManager.d.ts +22 -4
- package/Misc/assetsManager.js +20 -8
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/computePressure.js +9 -6
- package/Misc/computePressure.js.map +1 -1
- package/Misc/dataStorage.js +1 -1
- package/Misc/dataStorage.js.map +1 -1
- package/Misc/dds.js +1 -1
- package/Misc/dds.js.map +1 -1
- package/Misc/environmentTextureTools.js +3 -2
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.js +31 -8
- package/Misc/fileTools.js.map +1 -1
- package/Misc/logger.js +2 -1
- package/Misc/logger.js.map +1 -1
- package/Misc/minMaxReducer.js +3 -2
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/sceneRecorder.js +1 -1
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/textureTools.js +3 -3
- package/Misc/textureTools.js.map +1 -1
- package/Misc/timer.js +5 -3
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.js +4 -4
- package/Misc/tools.js.map +1 -1
- package/Misc/trajectoryClassifier.js +3 -3
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +2 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +6 -3
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.js +13 -8
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +22 -14
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +2 -1
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.js +7 -4
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +2 -2
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +2 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +5 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +4 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +8 -5
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.js +6 -4
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +7 -4
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +4 -2
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +3 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +12 -0
- package/Rendering/depthPeelingRenderer.js +30 -6
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.js +4 -2
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.js +10 -6
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +11 -8
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +2 -2
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +4 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +3 -3
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/pbr.fragment.js +4 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Sprites/spriteManager.js +2 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +2 -1
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/stencilStateComposer.js +4 -2
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +2 -1
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +7 -6
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +6 -4
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +2 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +3 -3
- package/XR/features/WebXRHandTracking.js +126 -118
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRHitTest.js.map +1 -1
- package/XR/features/WebXRLayers.js +1 -1
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js +7 -4
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +7 -4
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js +2 -1
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/native/nativeXRFrame.js +2 -1
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRCamera.js +2 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.js +7 -5
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +2 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.js +0 -1
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRSessionManager.js +27 -14
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRWebGLLayer.js +3 -0
- package/XR/webXRWebGLLayer.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +17 -11
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneRecorder.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Misc/sceneRecorder.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport { SceneSerializer } from \"./sceneSerializer\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Light } from \"../Lights/light\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { MultiMaterial } from \"../Materials/multiMaterial\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { ParticleSystem } from \"../Particles/particleSystem\";\r\nimport { MorphTargetManager } from \"../Morph/morphTargetManager\";\r\nimport { ShadowGenerator } from \"../Lights/Shadows/shadowGenerator\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { SerializationHelper } from \"./decorators\";\r\n\r\n/**\r\n * Class used to record delta files between 2 scene states\r\n */\r\nexport class SceneRecorder {\r\n private _trackedScene: Nullable<Scene> = null;\r\n private _savedJSON: any;\r\n\r\n /**\r\n * Track a given scene. This means the current scene state will be considered the original state\r\n * @param scene defines the scene to track\r\n */\r\n public track(scene: Scene) {\r\n this._trackedScene = scene;\r\n\r\n SerializationHelper.AllowLoadingUniqueId = true;\r\n this._savedJSON = SceneSerializer.Serialize(scene);\r\n SerializationHelper.AllowLoadingUniqueId = false;\r\n }\r\n\r\n /**\r\n * Get the delta between current state and original state\r\n * @returns a any containing the delta\r\n */\r\n public getDelta(): any {\r\n if (!this._trackedScene) {\r\n return null;\r\n }\r\n\r\n const currentForceSerializeBuffers = Texture.ForceSerializeBuffers;\r\n Texture.ForceSerializeBuffers = false;\r\n\r\n SerializationHelper.AllowLoadingUniqueId = true;\r\n const newJSON = SceneSerializer.Serialize(this._trackedScene);\r\n SerializationHelper.AllowLoadingUniqueId = false;\r\n const deltaJSON: any = {};\r\n\r\n for (const node in newJSON) {\r\n this._compareCollections(node, this._savedJSON[node], newJSON[node], deltaJSON);\r\n }\r\n\r\n Texture.ForceSerializeBuffers = currentForceSerializeBuffers;\r\n\r\n return deltaJSON;\r\n }\r\n\r\n private _compareArray(key: string, original: any[], current: any[], deltaJSON: any) {\r\n if (original.length === 0 && current.length === 0) {\r\n return true;\r\n }\r\n\r\n // Numbers?\r\n if ((original.length && !isNaN(original[0])) || (current.length && !isNaN(current[0]))) {\r\n if (original.length !== current.length) {\r\n return false;\r\n }\r\n\r\n if (original.length === 0) {\r\n return true;\r\n }\r\n for (let index = 0; index < original.length; index++) {\r\n if (original[index] !== current[index]) {\r\n deltaJSON[key] = current;\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // let's use uniqueId to find similar objects\r\n const originalUniqueIds: number[] = [];\r\n for (let index = 0; index < original.length; index++) {\r\n const originalObject = original[index];\r\n const originalUniqueId = originalObject.uniqueId;\r\n\r\n originalUniqueIds.push(originalUniqueId);\r\n // Look for that object in current state\r\n const currentObjects = current.filter((c) => c.uniqueId === originalUniqueId);\r\n if (currentObjects.length) {\r\n // We have a candidate\r\n const currentObject = currentObjects[0];\r\n\r\n const newObject: any = {};\r\n if (!this._compareObjects(originalObject, currentObject, newObject)) {\r\n if (!deltaJSON[key]) {\r\n deltaJSON[key] = [];\r\n }\r\n newObject.__state = {\r\n id: currentObject.id || currentObject.name,\r\n };\r\n deltaJSON[key].push(newObject);\r\n }\r\n } else {\r\n // We need to delete\r\n const newObject: any = {\r\n __state: {\r\n deleteId: originalObject.id || originalObject.name,\r\n },\r\n };\r\n deltaJSON[key].push(newObject);\r\n }\r\n }\r\n\r\n // Checking for new objects\r\n for (let index = 0; index < current.length; index++) {\r\n const currentObject = current[index];\r\n const currentUniqueId = currentObject.uniqueId;\r\n\r\n // Object was added\r\n if (originalUniqueIds.indexOf(currentUniqueId) === -1) {\r\n if (!deltaJSON[key]) {\r\n deltaJSON[key] = [];\r\n }\r\n\r\n deltaJSON[key].push(currentObject);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _compareObjects(originalObjet: any, currentObject: any, deltaJSON: any) {\r\n let aDifferenceWasFound = false;\r\n\r\n for (const prop in originalObjet) {\r\n if (!Object.prototype.hasOwnProperty.call(originalObjet, prop)) {\r\n continue;\r\n }\r\n const originalValue = originalObjet[prop];\r\n const currentValue = currentObject[prop];\r\n let diffFound = false;\r\n\r\n if (Array.isArray(originalValue)) {\r\n diffFound = JSON.stringify(originalValue) !== JSON.stringify(currentValue);\r\n } else if (!isNaN(originalValue) || Object.prototype.toString.call(originalValue) == \"[object String]\") {\r\n diffFound = originalValue !== currentValue;\r\n } else if (typeof originalValue === \"object\" && typeof currentValue === \"object\") {\r\n const newObject = {};\r\n if (!this._compareObjects(originalValue, currentValue, newObject)) {\r\n deltaJSON[prop] = newObject;\r\n aDifferenceWasFound = true;\r\n }\r\n }\r\n\r\n if (diffFound) {\r\n aDifferenceWasFound = true;\r\n deltaJSON[prop] = currentValue;\r\n }\r\n }\r\n\r\n return !aDifferenceWasFound;\r\n }\r\n\r\n private _compareCollections(key: string, original: any[], current: any[], deltaJSON: any) {\r\n // Same ?\r\n if (original === current) {\r\n return;\r\n }\r\n\r\n if (original && current) {\r\n // Array?\r\n if (Array.isArray(original) && Array.isArray(current)) {\r\n if (this._compareArray(key, original, current, deltaJSON)) {\r\n return;\r\n }\r\n } else if (typeof original === \"object\" && typeof current === \"object\") {\r\n // Object\r\n const newObject = {};\r\n if (!this._compareObjects(original, current, newObject)) {\r\n deltaJSON[key] = newObject;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private static GetShadowGeneratorById(scene: Scene, id: string) {\r\n const generators = scene.lights.map((l) => l.getShadowGenerator());\r\n\r\n for (const generator of generators) {\r\n if (generator && generator.id === id) {\r\n return generator;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Apply a given delta to a given scene\r\n * @param deltaJSON defines the JSON containing the delta\r\n * @param scene defines the scene to apply the delta to\r\n */\r\n public static ApplyDelta(deltaJSON: any | string, scene: Scene) {\r\n if (typeof deltaJSON === \"string\") {\r\n deltaJSON = JSON.parse(deltaJSON);\r\n }\r\n\r\n // Scene\r\n const anyScene = scene as any;\r\n for (const prop in deltaJSON) {\r\n const source = deltaJSON[prop];\r\n const property = anyScene[prop];\r\n\r\n if (Array.isArray(property) || prop === \"shadowGenerators\") {\r\n // Restore array\r\n switch (prop) {\r\n case \"cameras\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getCameraById.bind(scene), (data) => Camera.Parse(data, scene));\r\n break;\r\n case \"lights\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getLightById.bind(scene), (data) => Light.Parse(data, scene));\r\n break;\r\n case \"shadowGenerators\":\r\n this._ApplyDeltaForEntity(\r\n source,\r\n scene,\r\n (id) => this.GetShadowGeneratorById(scene, id),\r\n (data) => ShadowGenerator.Parse(data, scene)\r\n );\r\n break;\r\n case \"meshes\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMeshById.bind(scene), (data) => Mesh.Parse(data, scene, \"\"));\r\n break;\r\n case \"skeletons\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getSkeletonById.bind(scene), (data) => Skeleton.Parse(data, scene));\r\n break;\r\n case \"materials\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), (data) => Material.Parse(data, scene, \"\"));\r\n break;\r\n case \"multiMaterials\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), (data) => MultiMaterial.Parse(data, scene, \"\"));\r\n break;\r\n case \"transformNodes\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getTransformNodeById.bind(scene), (data) => TransformNode.Parse(data, scene, \"\"));\r\n break;\r\n case \"particleSystems\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getParticleSystemById.bind(scene), (data) => ParticleSystem.Parse(data, scene, \"\"));\r\n break;\r\n case \"morphTargetManagers\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMorphTargetById.bind(scene), (data) => MorphTargetManager.Parse(data, scene));\r\n break;\r\n case \"postProcesses\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getPostProcessByName.bind(scene), (data) => PostProcess.Parse(data, scene, \"\"));\r\n break;\r\n }\r\n } else if (!isNaN(property)) {\r\n anyScene[prop] = source;\r\n } else if (property.fromArray) {\r\n property.fromArray(source);\r\n }\r\n }\r\n }\r\n\r\n private static _ApplyPropertiesToEntity(deltaJSON: any, entity: any) {\r\n for (const prop in deltaJSON) {\r\n const source = deltaJSON[prop];\r\n const property = entity[prop];\r\n\r\n if (property === undefined) {\r\n continue;\r\n }\r\n\r\n if (!isNaN(property) || Array.isArray(property)) {\r\n entity[prop] = source;\r\n } else if (property.fromArray) {\r\n property.fromArray(source);\r\n } else if (typeof property === \"object\" && property !== null) {\r\n this._ApplyPropertiesToEntity(source, property);\r\n }\r\n }\r\n }\r\n\r\n private static _ApplyDeltaForEntity(sources: any[], scene: Scene, finder: (id: string) => any, addNew: (data: any) => void) {\r\n for (const source of sources) {\r\n // Update\r\n if (source.__state && source.__state.id !== undefined) {\r\n const targetEntity = finder(source.__state.id);\r\n\r\n if (targetEntity) {\r\n this._ApplyPropertiesToEntity(source, targetEntity);\r\n }\r\n } else if (source.__state && source.__state.deleteId !== undefined) {\r\n const target = finder(source.__state.deleteId);\r\n target?.dispose();\r\n } else {\r\n // New\r\n addNew(source);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"sceneRecorder.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Misc/sceneRecorder.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport { SceneSerializer } from \"./sceneSerializer\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Light } from \"../Lights/light\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { MultiMaterial } from \"../Materials/multiMaterial\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { ParticleSystem } from \"../Particles/particleSystem\";\r\nimport { MorphTargetManager } from \"../Morph/morphTargetManager\";\r\nimport { ShadowGenerator } from \"../Lights/Shadows/shadowGenerator\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { SerializationHelper } from \"./decorators\";\r\n\r\n/**\r\n * Class used to record delta files between 2 scene states\r\n */\r\nexport class SceneRecorder {\r\n private _trackedScene: Nullable<Scene> = null;\r\n private _savedJSON: any;\r\n\r\n /**\r\n * Track a given scene. This means the current scene state will be considered the original state\r\n * @param scene defines the scene to track\r\n */\r\n public track(scene: Scene) {\r\n this._trackedScene = scene;\r\n\r\n SerializationHelper.AllowLoadingUniqueId = true;\r\n this._savedJSON = SceneSerializer.Serialize(scene);\r\n SerializationHelper.AllowLoadingUniqueId = false;\r\n }\r\n\r\n /**\r\n * Get the delta between current state and original state\r\n * @returns a any containing the delta\r\n */\r\n public getDelta(): any {\r\n if (!this._trackedScene) {\r\n return null;\r\n }\r\n\r\n const currentForceSerializeBuffers = Texture.ForceSerializeBuffers;\r\n Texture.ForceSerializeBuffers = false;\r\n\r\n SerializationHelper.AllowLoadingUniqueId = true;\r\n const newJSON = SceneSerializer.Serialize(this._trackedScene);\r\n SerializationHelper.AllowLoadingUniqueId = false;\r\n const deltaJSON: any = {};\r\n\r\n for (const node in newJSON) {\r\n this._compareCollections(node, this._savedJSON[node], newJSON[node], deltaJSON);\r\n }\r\n\r\n Texture.ForceSerializeBuffers = currentForceSerializeBuffers;\r\n\r\n return deltaJSON;\r\n }\r\n\r\n private _compareArray(key: string, original: any[], current: any[], deltaJSON: any) {\r\n if (original.length === 0 && current.length === 0) {\r\n return true;\r\n }\r\n\r\n // Numbers?\r\n if ((original.length && !isNaN(original[0])) || (current.length && !isNaN(current[0]))) {\r\n if (original.length !== current.length) {\r\n return false;\r\n }\r\n\r\n if (original.length === 0) {\r\n return true;\r\n }\r\n for (let index = 0; index < original.length; index++) {\r\n if (original[index] !== current[index]) {\r\n deltaJSON[key] = current;\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // let's use uniqueId to find similar objects\r\n const originalUniqueIds: number[] = [];\r\n for (let index = 0; index < original.length; index++) {\r\n const originalObject = original[index];\r\n const originalUniqueId = originalObject.uniqueId;\r\n\r\n originalUniqueIds.push(originalUniqueId);\r\n // Look for that object in current state\r\n const currentObjects = current.filter((c) => c.uniqueId === originalUniqueId);\r\n if (currentObjects.length) {\r\n // We have a candidate\r\n const currentObject = currentObjects[0];\r\n\r\n const newObject: any = {};\r\n if (!this._compareObjects(originalObject, currentObject, newObject)) {\r\n if (!deltaJSON[key]) {\r\n deltaJSON[key] = [];\r\n }\r\n newObject.__state = {\r\n id: currentObject.id || currentObject.name,\r\n };\r\n deltaJSON[key].push(newObject);\r\n }\r\n } else {\r\n // We need to delete\r\n const newObject: any = {\r\n __state: {\r\n deleteId: originalObject.id || originalObject.name,\r\n },\r\n };\r\n deltaJSON[key].push(newObject);\r\n }\r\n }\r\n\r\n // Checking for new objects\r\n for (let index = 0; index < current.length; index++) {\r\n const currentObject = current[index];\r\n const currentUniqueId = currentObject.uniqueId;\r\n\r\n // Object was added\r\n if (originalUniqueIds.indexOf(currentUniqueId) === -1) {\r\n if (!deltaJSON[key]) {\r\n deltaJSON[key] = [];\r\n }\r\n\r\n deltaJSON[key].push(currentObject);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _compareObjects(originalObjet: any, currentObject: any, deltaJSON: any) {\r\n let aDifferenceWasFound = false;\r\n\r\n for (const prop in originalObjet) {\r\n if (!Object.prototype.hasOwnProperty.call(originalObjet, prop)) {\r\n continue;\r\n }\r\n const originalValue = originalObjet[prop];\r\n const currentValue = currentObject[prop];\r\n let diffFound = false;\r\n\r\n if (Array.isArray(originalValue)) {\r\n diffFound = JSON.stringify(originalValue) !== JSON.stringify(currentValue);\r\n } else if (!isNaN(originalValue) || Object.prototype.toString.call(originalValue) == \"[object String]\") {\r\n diffFound = originalValue !== currentValue;\r\n } else if (typeof originalValue === \"object\" && typeof currentValue === \"object\") {\r\n const newObject = {};\r\n if (!this._compareObjects(originalValue, currentValue, newObject)) {\r\n deltaJSON[prop] = newObject;\r\n aDifferenceWasFound = true;\r\n }\r\n }\r\n\r\n if (diffFound) {\r\n aDifferenceWasFound = true;\r\n deltaJSON[prop] = currentValue;\r\n }\r\n }\r\n\r\n return !aDifferenceWasFound;\r\n }\r\n\r\n private _compareCollections(key: string, original: any[], current: any[], deltaJSON: any) {\r\n // Same ?\r\n if (original === current) {\r\n return;\r\n }\r\n\r\n if (original && current) {\r\n // Array?\r\n if (Array.isArray(original) && Array.isArray(current)) {\r\n if (this._compareArray(key, original, current, deltaJSON)) {\r\n return;\r\n }\r\n } else if (typeof original === \"object\" && typeof current === \"object\") {\r\n // Object\r\n const newObject = {};\r\n if (!this._compareObjects(original, current, newObject)) {\r\n deltaJSON[key] = newObject;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private static GetShadowGeneratorById(scene: Scene, id: string) {\r\n const generators = scene.lights.map((l) => l.getShadowGenerator());\r\n\r\n for (const generator of generators) {\r\n if (generator && generator.id === id) {\r\n return generator;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Apply a given delta to a given scene\r\n * @param deltaJSON defines the JSON containing the delta\r\n * @param scene defines the scene to apply the delta to\r\n */\r\n public static ApplyDelta(deltaJSON: any | string, scene: Scene) {\r\n if (typeof deltaJSON === \"string\") {\r\n deltaJSON = JSON.parse(deltaJSON);\r\n }\r\n\r\n // Scene\r\n const anyScene = scene as any;\r\n for (const prop in deltaJSON) {\r\n const source = deltaJSON[prop];\r\n const property = anyScene[prop];\r\n\r\n if (Array.isArray(property) || prop === \"shadowGenerators\") {\r\n // Restore array\r\n switch (prop) {\r\n case \"cameras\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getCameraById.bind(scene), (data) => Camera.Parse(data, scene));\r\n break;\r\n case \"lights\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getLightById.bind(scene), (data) => Light.Parse(data, scene));\r\n break;\r\n case \"shadowGenerators\":\r\n this._ApplyDeltaForEntity(\r\n source,\r\n scene,\r\n (id) => this.GetShadowGeneratorById(scene, id),\r\n (data) => ShadowGenerator.Parse(data, scene)\r\n );\r\n break;\r\n case \"meshes\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMeshById.bind(scene), (data) => Mesh.Parse(data, scene, \"\"));\r\n break;\r\n case \"skeletons\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getSkeletonById.bind(scene), (data) => Skeleton.Parse(data, scene));\r\n break;\r\n case \"materials\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), (data) => Material.Parse(data, scene, \"\"));\r\n break;\r\n case \"multiMaterials\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMaterialById.bind(scene), (data) => MultiMaterial.Parse(data, scene, \"\"));\r\n break;\r\n case \"transformNodes\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getTransformNodeById.bind(scene), (data) => TransformNode.Parse(data, scene, \"\"));\r\n break;\r\n case \"particleSystems\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getParticleSystemById.bind(scene), (data) => ParticleSystem.Parse(data, scene, \"\"));\r\n break;\r\n case \"morphTargetManagers\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getMorphTargetById.bind(scene), (data) => MorphTargetManager.Parse(data, scene));\r\n break;\r\n case \"postProcesses\":\r\n this._ApplyDeltaForEntity(source, scene, scene.getPostProcessByName.bind(scene), (data) => PostProcess.Parse(data, scene, \"\"));\r\n break;\r\n }\r\n } else if (!isNaN(property)) {\r\n anyScene[prop] = source;\r\n } else if (property.fromArray) {\r\n property.fromArray(source);\r\n }\r\n }\r\n }\r\n\r\n private static _ApplyPropertiesToEntity(deltaJSON: any, entity: any) {\r\n for (const prop in deltaJSON) {\r\n const source = deltaJSON[prop];\r\n const property = entity[prop];\r\n\r\n if (property === undefined) {\r\n continue;\r\n }\r\n\r\n if (!isNaN(property) || Array.isArray(property)) {\r\n entity[prop] = source;\r\n } else if (property.fromArray) {\r\n property.fromArray(source);\r\n } else if (typeof property === \"object\" && property !== null) {\r\n this._ApplyPropertiesToEntity(source, property);\r\n }\r\n }\r\n }\r\n\r\n private static _ApplyDeltaForEntity(sources: any[], scene: Scene, finder: (id: string) => any, addNew: (data: any) => void) {\r\n for (const source of sources) {\r\n // Update\r\n if (source.__state && source.__state.id !== undefined) {\r\n const targetEntity = finder(source.__state.id);\r\n\r\n if (targetEntity) {\r\n this._ApplyPropertiesToEntity(source, targetEntity);\r\n }\r\n } else if (source.__state && source.__state.deleteId !== undefined) {\r\n const target = finder(source.__state.deleteId);\r\n target?.dispose();\r\n } else {\r\n // New\r\n addNew(source);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
package/Misc/textureTools.js
CHANGED
|
@@ -61,9 +61,9 @@ export function ApplyPostProcess(postProcessName, internalTexture, scene, type,
|
|
|
61
61
|
// Gets everything ready.
|
|
62
62
|
const engine = internalTexture.getEngine();
|
|
63
63
|
internalTexture.isReady = false;
|
|
64
|
-
samplingMode = samplingMode
|
|
65
|
-
type = type
|
|
66
|
-
format = format
|
|
64
|
+
samplingMode = samplingMode !== null && samplingMode !== void 0 ? samplingMode : internalTexture.samplingMode;
|
|
65
|
+
type = type !== null && type !== void 0 ? type : internalTexture.type;
|
|
66
|
+
format = format !== null && format !== void 0 ? format : internalTexture.format;
|
|
67
67
|
if (type === -1) {
|
|
68
68
|
type = 0;
|
|
69
69
|
}
|
package/Misc/textureTools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textureTools.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Misc/textureTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { PassPostProcess } from \"../PostProcesses/passPostProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Scene } from \"../scene\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\nexport function CreateResizedCopy(texture: Texture, width: number, height: number, useBilinearMode: boolean = true): Texture {\r\n const scene = <Scene>texture.getScene();\r\n const engine = scene.getEngine();\r\n\r\n const rtt = new RenderTargetTexture(\r\n \"resized\" + texture.name,\r\n { width: width, height: height },\r\n scene,\r\n !texture.noMipmap,\r\n true,\r\n (<InternalTexture>texture._texture).type,\r\n false,\r\n texture.samplingMode,\r\n false\r\n );\r\n\r\n rtt.wrapU = texture.wrapU;\r\n rtt.wrapV = texture.wrapV;\r\n rtt.uOffset = texture.uOffset;\r\n rtt.vOffset = texture.vOffset;\r\n rtt.uScale = texture.uScale;\r\n rtt.vScale = texture.vScale;\r\n rtt.uAng = texture.uAng;\r\n rtt.vAng = texture.vAng;\r\n rtt.wAng = texture.wAng;\r\n rtt.coordinatesIndex = texture.coordinatesIndex;\r\n rtt.level = texture.level;\r\n rtt.anisotropicFilteringLevel = texture.anisotropicFilteringLevel;\r\n (<InternalTexture>rtt._texture).isReady = false;\r\n\r\n texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n const passPostProcess = new PassPostProcess(\r\n \"pass\",\r\n 1,\r\n null,\r\n useBilinearMode ? Texture.BILINEAR_SAMPLINGMODE : Texture.NEAREST_SAMPLINGMODE,\r\n engine,\r\n false,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n passPostProcess.externalTextureSamplerBinding = true;\r\n passPostProcess.getEffect().executeWhenCompiled(() => {\r\n passPostProcess.onApply = function (effect) {\r\n effect.setTexture(\"textureSampler\", texture);\r\n };\r\n\r\n const internalTexture = rtt.renderTarget;\r\n\r\n if (internalTexture) {\r\n scene.postProcessManager.directRender([passPostProcess], internalTexture);\r\n\r\n engine.unBindFramebuffer(internalTexture);\r\n rtt.disposeFramebufferObjects();\r\n passPostProcess.dispose();\r\n\r\n rtt.getInternalTexture()!.isReady = true;\r\n }\r\n });\r\n\r\n return rtt;\r\n}\r\n\r\n/**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\nexport function ApplyPostProcess(\r\n postProcessName: string,\r\n internalTexture: InternalTexture,\r\n scene: Scene,\r\n type?: number,\r\n samplingMode?: number,\r\n format?: number\r\n): Promise<InternalTexture> {\r\n // Gets everything ready.\r\n const engine = internalTexture.getEngine() as Engine;\r\n\r\n internalTexture.isReady = false;\r\n\r\n samplingMode = samplingMode ?? internalTexture.samplingMode;\r\n type = type ?? internalTexture.type;\r\n format = format ?? internalTexture.format;\r\n\r\n if (type === -1) {\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n // Create the post process\r\n const postProcess = new PostProcess(\"postprocess\", postProcessName, null, null, 1, null, samplingMode, engine, false, undefined, type, undefined, null, false, format);\r\n postProcess.externalTextureSamplerBinding = true;\r\n\r\n // Hold the output of the decoding.\r\n const encodedTexture = engine.createRenderTargetTexture(\r\n { width: internalTexture.width, height: internalTexture.height },\r\n {\r\n generateDepthBuffer: false,\r\n generateMipMaps: false,\r\n generateStencilBuffer: false,\r\n samplingMode,\r\n type,\r\n format,\r\n }\r\n );\r\n\r\n postProcess.getEffect().executeWhenCompiled(() => {\r\n // PP Render Pass\r\n postProcess.onApply = (effect) => {\r\n effect._bindTexture(\"textureSampler\", internalTexture);\r\n effect.setFloat2(\"scale\", 1, 1);\r\n };\r\n scene.postProcessManager.directRender([postProcess!], encodedTexture, true);\r\n\r\n // Cleanup\r\n engine.restoreDefaultFramebuffer();\r\n engine._releaseTexture(internalTexture);\r\n if (postProcess) {\r\n postProcess.dispose();\r\n }\r\n\r\n // Internal Swap\r\n encodedTexture._swapAndDie(internalTexture);\r\n\r\n // Ready to get rolling again.\r\n internalTexture.type = type!;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.isReady = true;\r\n\r\n resolve(internalTexture);\r\n });\r\n });\r\n}\r\n\r\n// ref: http://stackoverflow.com/questions/32633585/how-do-you-convert-to-half-floats-in-javascript\r\nlet floatView: Float32Array;\r\nlet int32View: Int32Array;\r\n/**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\nexport function ToHalfFloat(value: number): number {\r\n if (!floatView) {\r\n floatView = new Float32Array(1);\r\n int32View = new Int32Array(floatView.buffer);\r\n }\r\n\r\n floatView[0] = value;\r\n const x = int32View[0];\r\n\r\n let bits = (x >> 16) & 0x8000; /* Get the sign */\r\n let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */\r\n const e = (x >> 23) & 0xff; /* Using int is faster here */\r\n\r\n /* If zero, or denormal, or exponent underflows too much for a denormal\r\n * half, return signed zero. */\r\n if (e < 103) {\r\n return bits;\r\n }\r\n\r\n /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\r\n if (e > 142) {\r\n bits |= 0x7c00;\r\n /* If exponent was 0xff and one mantissa bit was set, it means NaN,\r\n * not Inf, so make sure we set one mantissa bit too. */\r\n bits |= (e == 255 ? 0 : 1) && x & 0x007fffff;\r\n return bits;\r\n }\r\n\r\n /* If exponent underflows but not too much, return a denormal */\r\n if (e < 113) {\r\n m |= 0x0800;\r\n /* Extra rounding may overflow and set mantissa to 0 and exponent\r\n * to 1, which is OK. */\r\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\r\n return bits;\r\n }\r\n\r\n bits |= ((e - 112) << 10) | (m >> 1);\r\n bits += m & 1;\r\n return bits;\r\n}\r\n\r\n/**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\nexport function FromHalfFloat(value: number): number {\r\n const s = (value & 0x8000) >> 15;\r\n const e = (value & 0x7c00) >> 10;\r\n const f = value & 0x03ff;\r\n\r\n if (e === 0) {\r\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\r\n } else if (e == 0x1f) {\r\n return f ? NaN : (s ? -1 : 1) * Infinity;\r\n }\r\n\r\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / Math.pow(2, 10));\r\n}\r\n\r\n/**\r\n * Class used to host texture specific utilities\r\n */\r\nexport const TextureTools = {\r\n /**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\n CreateResizedCopy,\r\n\r\n /**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\n ApplyPostProcess,\r\n /**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\n ToHalfFloat,\r\n\r\n /**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\n FromHalfFloat,\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"textureTools.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Misc/textureTools.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { PassPostProcess } from \"../PostProcesses/passPostProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Scene } from \"../scene\";\r\nimport { PostProcess } from \"../PostProcesses/postProcess\";\r\nimport type { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\nexport function CreateResizedCopy(texture: Texture, width: number, height: number, useBilinearMode: boolean = true): Texture {\r\n const scene = <Scene>texture.getScene();\r\n const engine = scene.getEngine();\r\n\r\n const rtt = new RenderTargetTexture(\r\n \"resized\" + texture.name,\r\n { width: width, height: height },\r\n scene,\r\n !texture.noMipmap,\r\n true,\r\n (<InternalTexture>texture._texture).type,\r\n false,\r\n texture.samplingMode,\r\n false\r\n );\r\n\r\n rtt.wrapU = texture.wrapU;\r\n rtt.wrapV = texture.wrapV;\r\n rtt.uOffset = texture.uOffset;\r\n rtt.vOffset = texture.vOffset;\r\n rtt.uScale = texture.uScale;\r\n rtt.vScale = texture.vScale;\r\n rtt.uAng = texture.uAng;\r\n rtt.vAng = texture.vAng;\r\n rtt.wAng = texture.wAng;\r\n rtt.coordinatesIndex = texture.coordinatesIndex;\r\n rtt.level = texture.level;\r\n rtt.anisotropicFilteringLevel = texture.anisotropicFilteringLevel;\r\n (<InternalTexture>rtt._texture).isReady = false;\r\n\r\n texture.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n const passPostProcess = new PassPostProcess(\r\n \"pass\",\r\n 1,\r\n null,\r\n useBilinearMode ? Texture.BILINEAR_SAMPLINGMODE : Texture.NEAREST_SAMPLINGMODE,\r\n engine,\r\n false,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n passPostProcess.externalTextureSamplerBinding = true;\r\n passPostProcess.getEffect().executeWhenCompiled(() => {\r\n passPostProcess.onApply = function (effect) {\r\n effect.setTexture(\"textureSampler\", texture);\r\n };\r\n\r\n const internalTexture = rtt.renderTarget;\r\n\r\n if (internalTexture) {\r\n scene.postProcessManager.directRender([passPostProcess], internalTexture);\r\n\r\n engine.unBindFramebuffer(internalTexture);\r\n rtt.disposeFramebufferObjects();\r\n passPostProcess.dispose();\r\n\r\n rtt.getInternalTexture()!.isReady = true;\r\n }\r\n });\r\n\r\n return rtt;\r\n}\r\n\r\n/**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\nexport function ApplyPostProcess(\r\n postProcessName: string,\r\n internalTexture: InternalTexture,\r\n scene: Scene,\r\n type?: number,\r\n samplingMode?: number,\r\n format?: number\r\n): Promise<InternalTexture> {\r\n // Gets everything ready.\r\n const engine = internalTexture.getEngine() as Engine;\r\n\r\n internalTexture.isReady = false;\r\n\r\n samplingMode = samplingMode ?? internalTexture.samplingMode;\r\n type = type ?? internalTexture.type;\r\n format = format ?? internalTexture.format;\r\n\r\n if (type === -1) {\r\n type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n // Create the post process\r\n const postProcess = new PostProcess(\"postprocess\", postProcessName, null, null, 1, null, samplingMode, engine, false, undefined, type, undefined, null, false, format);\r\n postProcess.externalTextureSamplerBinding = true;\r\n\r\n // Hold the output of the decoding.\r\n const encodedTexture = engine.createRenderTargetTexture(\r\n { width: internalTexture.width, height: internalTexture.height },\r\n {\r\n generateDepthBuffer: false,\r\n generateMipMaps: false,\r\n generateStencilBuffer: false,\r\n samplingMode,\r\n type,\r\n format,\r\n }\r\n );\r\n\r\n postProcess.getEffect().executeWhenCompiled(() => {\r\n // PP Render Pass\r\n postProcess.onApply = (effect) => {\r\n effect._bindTexture(\"textureSampler\", internalTexture);\r\n effect.setFloat2(\"scale\", 1, 1);\r\n };\r\n scene.postProcessManager.directRender([postProcess!], encodedTexture, true);\r\n\r\n // Cleanup\r\n engine.restoreDefaultFramebuffer();\r\n engine._releaseTexture(internalTexture);\r\n if (postProcess) {\r\n postProcess.dispose();\r\n }\r\n\r\n // Internal Swap\r\n encodedTexture._swapAndDie(internalTexture);\r\n\r\n // Ready to get rolling again.\r\n internalTexture.type = type!;\r\n internalTexture.format = Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.isReady = true;\r\n\r\n resolve(internalTexture);\r\n });\r\n });\r\n}\r\n\r\n// ref: http://stackoverflow.com/questions/32633585/how-do-you-convert-to-half-floats-in-javascript\r\nlet floatView: Float32Array;\r\nlet int32View: Int32Array;\r\n/**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\nexport function ToHalfFloat(value: number): number {\r\n if (!floatView) {\r\n floatView = new Float32Array(1);\r\n int32View = new Int32Array(floatView.buffer);\r\n }\r\n\r\n floatView[0] = value;\r\n const x = int32View[0];\r\n\r\n let bits = (x >> 16) & 0x8000; /* Get the sign */\r\n let m = (x >> 12) & 0x07ff; /* Keep one extra bit for rounding */\r\n const e = (x >> 23) & 0xff; /* Using int is faster here */\r\n\r\n /* If zero, or denormal, or exponent underflows too much for a denormal\r\n * half, return signed zero. */\r\n if (e < 103) {\r\n return bits;\r\n }\r\n\r\n /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\r\n if (e > 142) {\r\n bits |= 0x7c00;\r\n /* If exponent was 0xff and one mantissa bit was set, it means NaN,\r\n * not Inf, so make sure we set one mantissa bit too. */\r\n bits |= (e == 255 ? 0 : 1) && x & 0x007fffff;\r\n return bits;\r\n }\r\n\r\n /* If exponent underflows but not too much, return a denormal */\r\n if (e < 113) {\r\n m |= 0x0800;\r\n /* Extra rounding may overflow and set mantissa to 0 and exponent\r\n * to 1, which is OK. */\r\n bits |= (m >> (114 - e)) + ((m >> (113 - e)) & 1);\r\n return bits;\r\n }\r\n\r\n bits |= ((e - 112) << 10) | (m >> 1);\r\n bits += m & 1;\r\n return bits;\r\n}\r\n\r\n/**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\nexport function FromHalfFloat(value: number): number {\r\n const s = (value & 0x8000) >> 15;\r\n const e = (value & 0x7c00) >> 10;\r\n const f = value & 0x03ff;\r\n\r\n if (e === 0) {\r\n return (s ? -1 : 1) * Math.pow(2, -14) * (f / Math.pow(2, 10));\r\n } else if (e == 0x1f) {\r\n return f ? NaN : (s ? -1 : 1) * Infinity;\r\n }\r\n\r\n return (s ? -1 : 1) * Math.pow(2, e - 15) * (1 + f / Math.pow(2, 10));\r\n}\r\n\r\n/**\r\n * Class used to host texture specific utilities\r\n */\r\nexport const TextureTools = {\r\n /**\r\n * Uses the GPU to create a copy texture rescaled at a given size\r\n * @param texture Texture to copy from\r\n * @param width defines the desired width\r\n * @param height defines the desired height\r\n * @param useBilinearMode defines if bilinear mode has to be used\r\n * @returns the generated texture\r\n */\r\n CreateResizedCopy,\r\n\r\n /**\r\n * Apply a post process to a texture\r\n * @param postProcessName name of the fragment post process\r\n * @param internalTexture the texture to encode\r\n * @param scene the scene hosting the texture\r\n * @param type type of the output texture. If not provided, use the one from internalTexture\r\n * @param samplingMode sampling mode to use to sample the source texture. If not provided, use the one from internalTexture\r\n * @param format format of the output texture. If not provided, use the one from internalTexture\r\n * @returns a promise with the internalTexture having its texture replaced by the result of the processing\r\n */\r\n ApplyPostProcess,\r\n /**\r\n * Converts a number to half float\r\n * @param value number to convert\r\n * @returns converted number\r\n */\r\n ToHalfFloat,\r\n\r\n /**\r\n * Converts a half float to a number\r\n * @param value half float to convert\r\n * @returns converted half float\r\n */\r\n FromHalfFloat,\r\n};\r\n"]}
|
package/Misc/timer.js
CHANGED
|
@@ -23,9 +23,10 @@ export var TimerState;
|
|
|
23
23
|
* @param options options with which to initialize this timer
|
|
24
24
|
*/
|
|
25
25
|
export function setAndStartTimer(options) {
|
|
26
|
+
var _a;
|
|
26
27
|
let timer = 0;
|
|
27
28
|
const startTime = Date.now();
|
|
28
|
-
options.observableParameters = options.observableParameters
|
|
29
|
+
options.observableParameters = (_a = options.observableParameters) !== null && _a !== void 0 ? _a : {};
|
|
29
30
|
const observer = options.contextObservable.add((payload) => {
|
|
30
31
|
const now = Date.now();
|
|
31
32
|
timer = now - startTime;
|
|
@@ -57,6 +58,7 @@ export class AdvancedTimer {
|
|
|
57
58
|
* @param options construction options for this advanced timer
|
|
58
59
|
*/
|
|
59
60
|
constructor(options) {
|
|
61
|
+
var _a, _b;
|
|
60
62
|
/**
|
|
61
63
|
* Will notify each time the timer calculates the remaining time
|
|
62
64
|
*/
|
|
@@ -95,8 +97,8 @@ export class AdvancedTimer {
|
|
|
95
97
|
};
|
|
96
98
|
this._setState(TimerState.INIT);
|
|
97
99
|
this._contextObservable = options.contextObservable;
|
|
98
|
-
this._observableParameters = options.observableParameters
|
|
99
|
-
this._breakCondition = options.breakCondition
|
|
100
|
+
this._observableParameters = (_a = options.observableParameters) !== null && _a !== void 0 ? _a : {};
|
|
101
|
+
this._breakCondition = (_b = options.breakCondition) !== null && _b !== void 0 ? _b : (() => false);
|
|
100
102
|
this._timeToEnd = options.timeout;
|
|
101
103
|
if (options.onEnded) {
|
|
102
104
|
this.onTimerEndedObservable.add(options.onEnded);
|
package/Misc/timer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Misc/timer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable } from \"../scene\";\r\n\r\n/**\r\n * Construction options for a timer\r\n */\r\nexport interface ITimerOptions<T> {\r\n /**\r\n * Time-to-end\r\n */\r\n timeout: number;\r\n /**\r\n * The context observable is used to calculate time deltas and provides the context of the timer's callbacks. Will usually be OnBeforeRenderObservable.\r\n * Countdown calculation is done ONLY when the observable is notifying its observers, meaning that if\r\n * you choose an observable that doesn't trigger too often, the wait time might extend further than the requested max time\r\n */\r\n contextObservable: Observable<T>;\r\n /**\r\n * Optional parameters when adding an observer to the observable\r\n */\r\n observableParameters?: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n /**\r\n * An optional break condition that will stop the times prematurely. In this case onEnded will not be triggered!\r\n */\r\n breakCondition?: (data?: ITimerData<T>) => boolean;\r\n /**\r\n * Will be triggered when the time condition has met\r\n */\r\n onEnded?: (data: ITimerData<any>) => void;\r\n /**\r\n * Will be triggered when the break condition has met (prematurely ended)\r\n */\r\n onAborted?: (data: ITimerData<any>) => void;\r\n /**\r\n * Optional function to execute on each tick (or count)\r\n */\r\n onTick?: (data: ITimerData<any>) => void;\r\n}\r\n\r\n/**\r\n * An interface defining the data sent by the timer\r\n */\r\nexport interface ITimerData<T> {\r\n /**\r\n * When did it start\r\n */\r\n startTime: number;\r\n /**\r\n * Time now\r\n */\r\n currentTime: number;\r\n /**\r\n * Time passed since started\r\n */\r\n deltaTime: number;\r\n /**\r\n * How much is completed, in [0.0...1.0].\r\n * Note that this CAN be higher than 1 due to the fact that we don't actually measure time but delta between observable calls\r\n */\r\n completeRate: number;\r\n /**\r\n * What the registered observable sent in the last count\r\n */\r\n payload: T;\r\n}\r\n\r\n/**\r\n * The current state of the timer\r\n */\r\nexport enum TimerState {\r\n /**\r\n * Timer initialized, not yet started\r\n */\r\n INIT,\r\n /**\r\n * Timer started and counting\r\n */\r\n STARTED,\r\n /**\r\n * Timer ended (whether aborted or time reached)\r\n */\r\n ENDED,\r\n}\r\n\r\n/**\r\n * A simple version of the timer. Will take options and start the timer immediately after calling it\r\n *\r\n * @param options options with which to initialize this timer\r\n */\r\nexport function setAndStartTimer(options: ITimerOptions<any>): Nullable<Observer<any>> {\r\n let timer = 0;\r\n const startTime = Date.now();\r\n options.observableParameters = options.observableParameters ?? {};\r\n const observer = options.contextObservable.add(\r\n (payload: any) => {\r\n const now = Date.now();\r\n timer = now - startTime;\r\n const data: ITimerData<any> = {\r\n startTime,\r\n currentTime: now,\r\n deltaTime: timer,\r\n completeRate: timer / options.timeout,\r\n payload,\r\n };\r\n options.onTick && options.onTick(data);\r\n if (options.breakCondition && options.breakCondition()) {\r\n options.contextObservable.remove(observer);\r\n options.onAborted && options.onAborted(data);\r\n }\r\n if (timer >= options.timeout) {\r\n options.contextObservable.remove(observer);\r\n options.onEnded && options.onEnded(data);\r\n }\r\n },\r\n options.observableParameters.mask,\r\n options.observableParameters.insertFirst,\r\n options.observableParameters.scope\r\n );\r\n return observer;\r\n}\r\n\r\n/**\r\n * An advanced implementation of a timer class\r\n */\r\nexport class AdvancedTimer<T = any> implements IDisposable {\r\n /**\r\n * Will notify each time the timer calculates the remaining time\r\n */\r\n public onEachCountObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer was aborted due to the break condition\r\n */\r\n public onTimerAbortedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer ended successfully\r\n */\r\n public onTimerEndedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer state has changed\r\n */\r\n public onStateChangedObservable: Observable<TimerState> = new Observable();\r\n\r\n private _observer: Nullable<Observer<T>> = null;\r\n private _contextObservable: Observable<T>;\r\n private _observableParameters: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n private _startTime: number;\r\n private _timer: number;\r\n private _state: TimerState;\r\n private _breakCondition: (data: ITimerData<T>) => boolean;\r\n private _timeToEnd: number;\r\n private _breakOnNextTick: boolean = false;\r\n\r\n /**\r\n * Will construct a new advanced timer based on the options provided. Timer will not start until start() is called.\r\n * @param options construction options for this advanced timer\r\n */\r\n constructor(options: ITimerOptions<T>) {\r\n this._setState(TimerState.INIT);\r\n this._contextObservable = options.contextObservable;\r\n this._observableParameters = options.observableParameters ?? {};\r\n this._breakCondition = options.breakCondition ?? (() => false);\r\n this._timeToEnd = options.timeout;\r\n if (options.onEnded) {\r\n this.onTimerEndedObservable.add(options.onEnded);\r\n }\r\n if (options.onTick) {\r\n this.onEachCountObservable.add(options.onTick);\r\n }\r\n if (options.onAborted) {\r\n this.onTimerAbortedObservable.add(options.onAborted);\r\n }\r\n }\r\n\r\n /**\r\n * set a breaking condition for this timer. Default is to never break during count\r\n * @param predicate the new break condition. Returns true to break, false otherwise\r\n */\r\n public set breakCondition(predicate: (data: ITimerData<T>) => boolean) {\r\n this._breakCondition = predicate;\r\n }\r\n\r\n /**\r\n * Reset ALL associated observables in this advanced timer\r\n */\r\n public clearObservables() {\r\n this.onEachCountObservable.clear();\r\n this.onTimerAbortedObservable.clear();\r\n this.onTimerEndedObservable.clear();\r\n this.onStateChangedObservable.clear();\r\n }\r\n\r\n /**\r\n * Will start a new iteration of this timer. Only one instance of this timer can run at a time.\r\n *\r\n * @param timeToEnd how much time to measure until timer ended\r\n */\r\n public start(timeToEnd: number = this._timeToEnd) {\r\n if (this._state === TimerState.STARTED) {\r\n throw new Error(\"Timer already started. Please stop it before starting again\");\r\n }\r\n this._timeToEnd = timeToEnd;\r\n this._startTime = Date.now();\r\n this._timer = 0;\r\n this._observer = this._contextObservable.add(this._tick, this._observableParameters.mask, this._observableParameters.insertFirst, this._observableParameters.scope);\r\n this._setState(TimerState.STARTED);\r\n }\r\n\r\n /**\r\n * Will force a stop on the next tick.\r\n */\r\n public stop() {\r\n if (this._state !== TimerState.STARTED) {\r\n return;\r\n }\r\n this._breakOnNextTick = true;\r\n }\r\n\r\n /**\r\n * Dispose this timer, clearing all resources\r\n */\r\n public dispose() {\r\n if (this._observer) {\r\n this._contextObservable.remove(this._observer);\r\n }\r\n this.clearObservables();\r\n }\r\n\r\n private _setState(newState: TimerState) {\r\n this._state = newState;\r\n this.onStateChangedObservable.notifyObservers(this._state);\r\n }\r\n\r\n private _tick = (payload: T) => {\r\n const now = Date.now();\r\n this._timer = now - this._startTime;\r\n const data: ITimerData<T> = {\r\n startTime: this._startTime,\r\n currentTime: now,\r\n deltaTime: this._timer,\r\n completeRate: this._timer / this._timeToEnd,\r\n payload,\r\n };\r\n const shouldBreak = this._breakOnNextTick || this._breakCondition(data);\r\n if (shouldBreak || this._timer >= this._timeToEnd) {\r\n this._stop(data, shouldBreak);\r\n } else {\r\n this.onEachCountObservable.notifyObservers(data);\r\n }\r\n };\r\n\r\n private _stop(data: ITimerData<T>, aborted: boolean = false) {\r\n this._contextObservable.remove(this._observer);\r\n this._setState(TimerState.ENDED);\r\n if (aborted) {\r\n this.onTimerAbortedObservable.notifyObservers(data);\r\n } else {\r\n this.onTimerEndedObservable.notifyObservers(data);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Misc/timer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable } from \"../scene\";\r\n\r\n/**\r\n * Construction options for a timer\r\n */\r\nexport interface ITimerOptions<T> {\r\n /**\r\n * Time-to-end\r\n */\r\n timeout: number;\r\n /**\r\n * The context observable is used to calculate time deltas and provides the context of the timer's callbacks. Will usually be OnBeforeRenderObservable.\r\n * Countdown calculation is done ONLY when the observable is notifying its observers, meaning that if\r\n * you choose an observable that doesn't trigger too often, the wait time might extend further than the requested max time\r\n */\r\n contextObservable: Observable<T>;\r\n /**\r\n * Optional parameters when adding an observer to the observable\r\n */\r\n observableParameters?: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n /**\r\n * An optional break condition that will stop the times prematurely. In this case onEnded will not be triggered!\r\n */\r\n breakCondition?: (data?: ITimerData<T>) => boolean;\r\n /**\r\n * Will be triggered when the time condition has met\r\n */\r\n onEnded?: (data: ITimerData<any>) => void;\r\n /**\r\n * Will be triggered when the break condition has met (prematurely ended)\r\n */\r\n onAborted?: (data: ITimerData<any>) => void;\r\n /**\r\n * Optional function to execute on each tick (or count)\r\n */\r\n onTick?: (data: ITimerData<any>) => void;\r\n}\r\n\r\n/**\r\n * An interface defining the data sent by the timer\r\n */\r\nexport interface ITimerData<T> {\r\n /**\r\n * When did it start\r\n */\r\n startTime: number;\r\n /**\r\n * Time now\r\n */\r\n currentTime: number;\r\n /**\r\n * Time passed since started\r\n */\r\n deltaTime: number;\r\n /**\r\n * How much is completed, in [0.0...1.0].\r\n * Note that this CAN be higher than 1 due to the fact that we don't actually measure time but delta between observable calls\r\n */\r\n completeRate: number;\r\n /**\r\n * What the registered observable sent in the last count\r\n */\r\n payload: T;\r\n}\r\n\r\n/**\r\n * The current state of the timer\r\n */\r\nexport enum TimerState {\r\n /**\r\n * Timer initialized, not yet started\r\n */\r\n INIT,\r\n /**\r\n * Timer started and counting\r\n */\r\n STARTED,\r\n /**\r\n * Timer ended (whether aborted or time reached)\r\n */\r\n ENDED,\r\n}\r\n\r\n/**\r\n * A simple version of the timer. Will take options and start the timer immediately after calling it\r\n *\r\n * @param options options with which to initialize this timer\r\n */\r\nexport function setAndStartTimer(options: ITimerOptions<any>): Nullable<Observer<any>> {\r\n let timer = 0;\r\n const startTime = Date.now();\r\n options.observableParameters = options.observableParameters ?? {};\r\n const observer = options.contextObservable.add(\r\n (payload: any) => {\r\n const now = Date.now();\r\n timer = now - startTime;\r\n const data: ITimerData<any> = {\r\n startTime,\r\n currentTime: now,\r\n deltaTime: timer,\r\n completeRate: timer / options.timeout,\r\n payload,\r\n };\r\n options.onTick && options.onTick(data);\r\n if (options.breakCondition && options.breakCondition()) {\r\n options.contextObservable.remove(observer);\r\n options.onAborted && options.onAborted(data);\r\n }\r\n if (timer >= options.timeout) {\r\n options.contextObservable.remove(observer);\r\n options.onEnded && options.onEnded(data);\r\n }\r\n },\r\n options.observableParameters.mask,\r\n options.observableParameters.insertFirst,\r\n options.observableParameters.scope\r\n );\r\n return observer;\r\n}\r\n\r\n/**\r\n * An advanced implementation of a timer class\r\n */\r\nexport class AdvancedTimer<T = any> implements IDisposable {\r\n /**\r\n * Will notify each time the timer calculates the remaining time\r\n */\r\n public onEachCountObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer was aborted due to the break condition\r\n */\r\n public onTimerAbortedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer ended successfully\r\n */\r\n public onTimerEndedObservable: Observable<ITimerData<T>> = new Observable();\r\n /**\r\n * Will trigger when the timer state has changed\r\n */\r\n public onStateChangedObservable: Observable<TimerState> = new Observable();\r\n\r\n private _observer: Nullable<Observer<T>> = null;\r\n private _contextObservable: Observable<T>;\r\n private _observableParameters: {\r\n mask?: number;\r\n insertFirst?: boolean;\r\n scope?: any;\r\n };\r\n private _startTime: number;\r\n private _timer: number;\r\n private _state: TimerState;\r\n private _breakCondition: (data: ITimerData<T>) => boolean;\r\n private _timeToEnd: number;\r\n private _breakOnNextTick: boolean = false;\r\n\r\n /**\r\n * Will construct a new advanced timer based on the options provided. Timer will not start until start() is called.\r\n * @param options construction options for this advanced timer\r\n */\r\n constructor(options: ITimerOptions<T>) {\r\n this._setState(TimerState.INIT);\r\n this._contextObservable = options.contextObservable;\r\n this._observableParameters = options.observableParameters ?? {};\r\n this._breakCondition = options.breakCondition ?? (() => false);\r\n this._timeToEnd = options.timeout;\r\n if (options.onEnded) {\r\n this.onTimerEndedObservable.add(options.onEnded);\r\n }\r\n if (options.onTick) {\r\n this.onEachCountObservable.add(options.onTick);\r\n }\r\n if (options.onAborted) {\r\n this.onTimerAbortedObservable.add(options.onAborted);\r\n }\r\n }\r\n\r\n /**\r\n * set a breaking condition for this timer. Default is to never break during count\r\n * @param predicate the new break condition. Returns true to break, false otherwise\r\n */\r\n public set breakCondition(predicate: (data: ITimerData<T>) => boolean) {\r\n this._breakCondition = predicate;\r\n }\r\n\r\n /**\r\n * Reset ALL associated observables in this advanced timer\r\n */\r\n public clearObservables() {\r\n this.onEachCountObservable.clear();\r\n this.onTimerAbortedObservable.clear();\r\n this.onTimerEndedObservable.clear();\r\n this.onStateChangedObservable.clear();\r\n }\r\n\r\n /**\r\n * Will start a new iteration of this timer. Only one instance of this timer can run at a time.\r\n *\r\n * @param timeToEnd how much time to measure until timer ended\r\n */\r\n public start(timeToEnd: number = this._timeToEnd) {\r\n if (this._state === TimerState.STARTED) {\r\n throw new Error(\"Timer already started. Please stop it before starting again\");\r\n }\r\n this._timeToEnd = timeToEnd;\r\n this._startTime = Date.now();\r\n this._timer = 0;\r\n this._observer = this._contextObservable.add(this._tick, this._observableParameters.mask, this._observableParameters.insertFirst, this._observableParameters.scope);\r\n this._setState(TimerState.STARTED);\r\n }\r\n\r\n /**\r\n * Will force a stop on the next tick.\r\n */\r\n public stop() {\r\n if (this._state !== TimerState.STARTED) {\r\n return;\r\n }\r\n this._breakOnNextTick = true;\r\n }\r\n\r\n /**\r\n * Dispose this timer, clearing all resources\r\n */\r\n public dispose() {\r\n if (this._observer) {\r\n this._contextObservable.remove(this._observer);\r\n }\r\n this.clearObservables();\r\n }\r\n\r\n private _setState(newState: TimerState) {\r\n this._state = newState;\r\n this.onStateChangedObservable.notifyObservers(this._state);\r\n }\r\n\r\n private _tick = (payload: T) => {\r\n const now = Date.now();\r\n this._timer = now - this._startTime;\r\n const data: ITimerData<T> = {\r\n startTime: this._startTime,\r\n currentTime: now,\r\n deltaTime: this._timer,\r\n completeRate: this._timer / this._timeToEnd,\r\n payload,\r\n };\r\n const shouldBreak = this._breakOnNextTick || this._breakCondition(data);\r\n if (shouldBreak || this._timer >= this._timeToEnd) {\r\n this._stop(data, shouldBreak);\r\n } else {\r\n this.onEachCountObservable.notifyObservers(data);\r\n }\r\n };\r\n\r\n private _stop(data: ITimerData<T>, aborted: boolean = false) {\r\n this._contextObservable.remove(this._observer);\r\n this._setState(TimerState.ENDED);\r\n if (aborted) {\r\n this.onTimerAbortedObservable.notifyObservers(data);\r\n } else {\r\n this.onTimerEndedObservable.notifyObservers(data);\r\n }\r\n }\r\n}\r\n"]}
|
package/Misc/tools.js
CHANGED
|
@@ -324,12 +324,12 @@ export class Tools {
|
|
|
324
324
|
onSuccess();
|
|
325
325
|
}
|
|
326
326
|
catch (e) {
|
|
327
|
-
onError
|
|
327
|
+
onError === null || onError === void 0 ? void 0 : onError(`Unable to load script '${scriptUrl}' in worker`, e);
|
|
328
328
|
}
|
|
329
329
|
return;
|
|
330
330
|
}
|
|
331
331
|
else if (!IsWindowObjectExist()) {
|
|
332
|
-
onError
|
|
332
|
+
onError === null || onError === void 0 ? void 0 : onError(`Cannot load script '${scriptUrl}' outside of a window or a worker`);
|
|
333
333
|
return;
|
|
334
334
|
}
|
|
335
335
|
const head = document.getElementsByTagName("head")[0];
|
|
@@ -652,11 +652,11 @@ export class Tools {
|
|
|
652
652
|
*/
|
|
653
653
|
static EncodeScreenshotCanvasData(successCallback, mimeType = "image/png", fileName, canvas, quality) {
|
|
654
654
|
if (successCallback) {
|
|
655
|
-
const base64Image = (canvas
|
|
655
|
+
const base64Image = (canvas !== null && canvas !== void 0 ? canvas : Tools._ScreenshotCanvas).toDataURL(mimeType, quality);
|
|
656
656
|
successCallback(base64Image);
|
|
657
657
|
}
|
|
658
658
|
else {
|
|
659
|
-
this.ToBlob(canvas
|
|
659
|
+
this.ToBlob(canvas !== null && canvas !== void 0 ? canvas : Tools._ScreenshotCanvas, function (blob) {
|
|
660
660
|
if (blob) {
|
|
661
661
|
Tools.DownloadBlob(blob, fileName);
|
|
662
662
|
}
|