@babylonjs/viewer 7.41.1 → 7.42.0-alpha
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/assets/photoStudio.env +0 -0
- package/dist/babylon-viewer.esm.js +2 -0
- package/dist/babylon-viewer.esm.js.map +1 -0
- package/dist/babylon-viewer.esm.min.js +2 -0
- package/dist/babylon-viewer.esm.min.js.map +1 -0
- package/dist/chunks/EXT_lights_ies-BHDD74jk.esm.min.js +2 -0
- package/dist/chunks/EXT_lights_ies-BHDD74jk.esm.min.js.map +1 -0
- package/dist/chunks/EXT_lights_ies-CJfRNbJm.esm.js +84 -0
- package/dist/chunks/EXT_lights_ies-CJfRNbJm.esm.js.map +1 -0
- package/dist/chunks/EXT_lights_image_based-B460Sv95.esm.min.js +2 -0
- package/dist/chunks/EXT_lights_image_based-B460Sv95.esm.min.js.map +1 -0
- package/dist/chunks/EXT_lights_image_based-CQ6UCahL.esm.js +171 -0
- package/dist/chunks/EXT_lights_image_based-CQ6UCahL.esm.js.map +1 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-D77OfiDS.esm.js +86 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-D77OfiDS.esm.js.map +1 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-GMG29Y9J.esm.min.js +2 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-GMG29Y9J.esm.min.js.map +1 -0
- package/dist/chunks/EXT_meshopt_compression-CniiOX0a.esm.js +134 -0
- package/dist/chunks/EXT_meshopt_compression-CniiOX0a.esm.js.map +1 -0
- package/dist/chunks/EXT_meshopt_compression-DCcKdizI.esm.min.js +2 -0
- package/dist/chunks/EXT_meshopt_compression-DCcKdizI.esm.min.js.map +1 -0
- package/dist/chunks/EXT_texture_avif-By7mk6aS.esm.min.js +2 -0
- package/dist/chunks/EXT_texture_avif-By7mk6aS.esm.min.js.map +1 -0
- package/dist/chunks/EXT_texture_avif-DnaKno7b.esm.js +44 -0
- package/dist/chunks/EXT_texture_avif-DnaKno7b.esm.js.map +1 -0
- package/dist/chunks/EXT_texture_webp-Bm29ukIo.esm.js +43 -0
- package/dist/chunks/EXT_texture_webp-Bm29ukIo.esm.js.map +1 -0
- package/dist/chunks/EXT_texture_webp-DtSWYlAE.esm.min.js +2 -0
- package/dist/chunks/EXT_texture_webp-DtSWYlAE.esm.min.js.map +1 -0
- package/dist/chunks/ExtrasAsMetadata-BUO8J2zR.esm.js +64 -0
- package/dist/chunks/ExtrasAsMetadata-BUO8J2zR.esm.js.map +1 -0
- package/dist/chunks/ExtrasAsMetadata-mi3fn9sR.esm.min.js +2 -0
- package/dist/chunks/ExtrasAsMetadata-mi3fn9sR.esm.min.js.map +1 -0
- package/dist/chunks/KHR_animation_pointer-COeThtQe.esm.min.js +2 -0
- package/dist/chunks/KHR_animation_pointer-COeThtQe.esm.min.js.map +1 -0
- package/dist/chunks/KHR_animation_pointer-DXqgkZGB.esm.js +352 -0
- package/dist/chunks/KHR_animation_pointer-DXqgkZGB.esm.js.map +1 -0
- package/dist/chunks/KHR_draco_mesh_compression-Bh9XGNFd.esm.js +610 -0
- package/dist/chunks/KHR_draco_mesh_compression-Bh9XGNFd.esm.js.map +1 -0
- package/dist/chunks/KHR_draco_mesh_compression-DyU2KIa2.esm.min.js +2 -0
- package/dist/chunks/KHR_draco_mesh_compression-DyU2KIa2.esm.min.js.map +1 -0
- package/dist/chunks/KHR_interactivity-QP9zFX3U.esm.js +4033 -0
- package/dist/chunks/KHR_interactivity-QP9zFX3U.esm.js.map +1 -0
- package/dist/chunks/KHR_interactivity-_r7e7vwA.esm.min.js +2 -0
- package/dist/chunks/KHR_interactivity-_r7e7vwA.esm.min.js.map +1 -0
- package/dist/chunks/KHR_lights_punctual-DWGx9KlE.esm.js +581 -0
- package/dist/chunks/KHR_lights_punctual-DWGx9KlE.esm.js.map +1 -0
- package/dist/chunks/KHR_lights_punctual-cz3ulMW0.esm.min.js +2 -0
- package/dist/chunks/KHR_lights_punctual-cz3ulMW0.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_anisotropy-BSvZxEnx.esm.js +65 -0
- package/dist/chunks/KHR_materials_anisotropy-BSvZxEnx.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_anisotropy-CtKPvN_z.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_anisotropy-CtKPvN_z.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_clearcoat-BephgEiM.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_clearcoat-BephgEiM.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_clearcoat-C3QB9HNC.esm.js +96 -0
- package/dist/chunks/KHR_materials_clearcoat-C3QB9HNC.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-CZvfLdyF.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-CZvfLdyF.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-DuM5GD2L.esm.js +97 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-DuM5GD2L.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_dispersion-0FtkqUmS.esm.js +62 -0
- package/dist/chunks/KHR_materials_dispersion-0FtkqUmS.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_dispersion-C7mAat5y.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_dispersion-C7mAat5y.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_emissive_strength-Bz2y9OnA.esm.js +55 -0
- package/dist/chunks/KHR_materials_emissive_strength-Bz2y9OnA.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_emissive_strength-b7ZNj1HF.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_emissive_strength-b7ZNj1HF.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_ior-C5-JiuLs.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_ior-C5-JiuLs.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_ior-D1jjzmsp.esm.js +64 -0
- package/dist/chunks/KHR_materials_ior-D1jjzmsp.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_iridescence-CChET9-W.esm.js +72 -0
- package/dist/chunks/KHR_materials_iridescence-CChET9-W.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_iridescence-hATfgETI.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_iridescence-hATfgETI.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-B-HlmeqI.esm.js +81 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-B-HlmeqI.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-_IaUmSJE.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-_IaUmSJE.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_sheen-D2QD8uSC.esm.js +85 -0
- package/dist/chunks/KHR_materials_sheen-D2QD8uSC.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_sheen-cqxpRyXD.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_sheen-cqxpRyXD.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_specular-DnHIH9RX.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_specular-DnHIH9RX.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_specular-vwRXhXVF.esm.js +75 -0
- package/dist/chunks/KHR_materials_specular-vwRXhXVF.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_transmission-D81TRCgt.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_transmission-D81TRCgt.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_transmission-nPX6lno-.esm.js +307 -0
- package/dist/chunks/KHR_materials_transmission-nPX6lno-.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_unlit-CLSTXPsk.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_unlit-CLSTXPsk.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_unlit-pmQPq5qR.esm.js +74 -0
- package/dist/chunks/KHR_materials_unlit-pmQPq5qR.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_variants-C_XVH51a.esm.js +262 -0
- package/dist/chunks/KHR_materials_variants-C_XVH51a.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_variants-Czo1ZM8r.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_variants-Czo1ZM8r.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_volume-BJVGGE1g.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_volume-BJVGGE1g.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_volume-C4EKOzF-.esm.js +87 -0
- package/dist/chunks/KHR_materials_volume-C4EKOzF-.esm.js.map +1 -0
- package/dist/chunks/KHR_mesh_quantization-CZIcA8DN.esm.min.js +2 -0
- package/dist/chunks/KHR_mesh_quantization-CZIcA8DN.esm.min.js.map +1 -0
- package/dist/chunks/KHR_mesh_quantization-DG9WNux6.esm.js +26 -0
- package/dist/chunks/KHR_mesh_quantization-DG9WNux6.esm.js.map +1 -0
- package/dist/chunks/KHR_node_hoverability-C1YMkQ95.esm.js +39 -0
- package/dist/chunks/KHR_node_hoverability-C1YMkQ95.esm.js.map +1 -0
- package/dist/chunks/KHR_node_hoverability-HxHiCdR9.esm.min.js +2 -0
- package/dist/chunks/KHR_node_hoverability-HxHiCdR9.esm.min.js.map +1 -0
- package/dist/chunks/KHR_node_visibility-C5tc6GOc.esm.js +46 -0
- package/dist/chunks/KHR_node_visibility-C5tc6GOc.esm.js.map +1 -0
- package/dist/chunks/KHR_node_visibility-CSqn8wRd.esm.min.js +2 -0
- package/dist/chunks/KHR_node_visibility-CSqn8wRd.esm.min.js.map +1 -0
- package/dist/chunks/KHR_texture_basisu-DA2FE-qb.esm.min.js +2 -0
- package/dist/chunks/KHR_texture_basisu-DA2FE-qb.esm.min.js.map +1 -0
- package/dist/chunks/KHR_texture_basisu-KtQL54P-.esm.js +43 -0
- package/dist/chunks/KHR_texture_basisu-KtQL54P-.esm.js.map +1 -0
- package/dist/chunks/KHR_texture_transform-Cb6Q41F3.esm.js +63 -0
- package/dist/chunks/KHR_texture_transform-Cb6Q41F3.esm.js.map +1 -0
- package/dist/chunks/KHR_texture_transform-GdBAq_uW.esm.min.js +2 -0
- package/dist/chunks/KHR_texture_transform-GdBAq_uW.esm.min.js.map +1 -0
- package/dist/chunks/KHR_xmp_json_ld-CD_mkZDv.esm.min.js +2 -0
- package/dist/chunks/KHR_xmp_json_ld-CD_mkZDv.esm.min.js.map +1 -0
- package/dist/chunks/KHR_xmp_json_ld-f1rcQfsd.esm.js +51 -0
- package/dist/chunks/KHR_xmp_json_ld-f1rcQfsd.esm.js.map +1 -0
- package/dist/chunks/MSFT_audio_emitter-BU83EIcP.esm.min.js +2 -0
- package/dist/chunks/MSFT_audio_emitter-BU83EIcP.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_audio_emitter-ClwdeJaR.esm.js +2201 -0
- package/dist/chunks/MSFT_audio_emitter-ClwdeJaR.esm.js.map +1 -0
- package/dist/chunks/MSFT_lod-D3MQWFc3.esm.min.js +2 -0
- package/dist/chunks/MSFT_lod-D3MQWFc3.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_lod-DkM5iXcm.esm.js +337 -0
- package/dist/chunks/MSFT_lod-DkM5iXcm.esm.js.map +1 -0
- package/dist/chunks/MSFT_minecraftMesh-CG9JY5Ic.esm.min.js +2 -0
- package/dist/chunks/MSFT_minecraftMesh-CG9JY5Ic.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_minecraftMesh-Cyjdx_Y_.esm.js +46 -0
- package/dist/chunks/MSFT_minecraftMesh-Cyjdx_Y_.esm.js.map +1 -0
- package/dist/chunks/MSFT_sRGBFactors-Bm3_fRmt.esm.min.js +2 -0
- package/dist/chunks/MSFT_sRGBFactors-Bm3_fRmt.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_sRGBFactors-uFdNij-4.esm.js +47 -0
- package/dist/chunks/MSFT_sRGBFactors-uFdNij-4.esm.js.map +1 -0
- package/dist/chunks/animationGroup-CravGs2P.esm.min.js +2 -0
- package/dist/chunks/animationGroup-CravGs2P.esm.min.js.map +1 -0
- package/dist/chunks/animationGroup-DqmFa1Nk.esm.js +2482 -0
- package/dist/chunks/animationGroup-DqmFa1Nk.esm.js.map +1 -0
- package/dist/chunks/assetContainer-0Qu2XIWb.esm.js +1720 -0
- package/dist/chunks/assetContainer-0Qu2XIWb.esm.js.map +1 -0
- package/dist/chunks/assetContainer-CMuD-n3X.esm.min.js +2 -0
- package/dist/chunks/assetContainer-CMuD-n3X.esm.min.js.map +1 -0
- package/dist/chunks/audioEngine--EMyAh-L.esm.js +305 -0
- package/dist/chunks/audioEngine--EMyAh-L.esm.js.map +1 -0
- package/dist/chunks/audioEngine-3doZGQV6.esm.min.js +2 -0
- package/dist/chunks/audioEngine-3doZGQV6.esm.min.js.map +1 -0
- package/dist/chunks/bakedVertexAnimation-DgMI1D24.esm.min.js +2 -0
- package/dist/chunks/bakedVertexAnimation-DgMI1D24.esm.min.js.map +1 -0
- package/dist/chunks/bakedVertexAnimation-gQlUctpB.esm.js +114 -0
- package/dist/chunks/bakedVertexAnimation-gQlUctpB.esm.js.map +1 -0
- package/dist/chunks/basisTextureLoader-B0PY0ILM.esm.js +600 -0
- package/dist/chunks/basisTextureLoader-B0PY0ILM.esm.js.map +1 -0
- package/dist/chunks/basisTextureLoader-ES0mOtqQ.esm.min.js +2 -0
- package/dist/chunks/basisTextureLoader-ES0mOtqQ.esm.min.js.map +1 -0
- package/dist/chunks/dds-DEZD6DKL.esm.min.js +2 -0
- package/dist/chunks/dds-DEZD6DKL.esm.min.js.map +1 -0
- package/dist/chunks/dds-HwVEMga8.esm.js +540 -0
- package/dist/chunks/dds-HwVEMga8.esm.js.map +1 -0
- package/dist/chunks/ddsTextureLoader-3PDKukdG.esm.js +88 -0
- package/dist/chunks/ddsTextureLoader-3PDKukdG.esm.js.map +1 -0
- package/dist/chunks/ddsTextureLoader-C62DqYdE.esm.min.js +2 -0
- package/dist/chunks/ddsTextureLoader-C62DqYdE.esm.min.js.map +1 -0
- package/dist/chunks/decalFragment-B9KsZn_u.esm.min.js +2 -0
- package/dist/chunks/decalFragment-B9KsZn_u.esm.min.js.map +1 -0
- package/dist/chunks/decalFragment-CNA1EQK9.esm.js +18 -0
- package/dist/chunks/decalFragment-CNA1EQK9.esm.js.map +1 -0
- package/dist/chunks/default.fragment-BsajFq2Q.esm.js +446 -0
- package/dist/chunks/default.fragment-BsajFq2Q.esm.js.map +1 -0
- package/dist/chunks/default.fragment-C7O2NjXo.esm.min.js +2 -0
- package/dist/chunks/default.fragment-C7O2NjXo.esm.min.js.map +1 -0
- package/dist/chunks/default.fragment-CNef5Xlg.esm.min.js +2 -0
- package/dist/chunks/default.fragment-CNef5Xlg.esm.min.js.map +1 -0
- package/dist/chunks/default.fragment-DAO0SBl-.esm.js +515 -0
- package/dist/chunks/default.fragment-DAO0SBl-.esm.js.map +1 -0
- package/dist/chunks/default.vertex-Ban5pFUb.esm.js +211 -0
- package/dist/chunks/default.vertex-Ban5pFUb.esm.js.map +1 -0
- package/dist/chunks/default.vertex-CPjp6YBQ.esm.min.js +2 -0
- package/dist/chunks/default.vertex-CPjp6YBQ.esm.min.js.map +1 -0
- package/dist/chunks/default.vertex-CemfGK4Y.esm.min.js +2 -0
- package/dist/chunks/default.vertex-CemfGK4Y.esm.min.js.map +1 -0
- package/dist/chunks/default.vertex-QE4cV7Y2.esm.js +190 -0
- package/dist/chunks/default.vertex-QE4cV7Y2.esm.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-B5nIsoCQ.esm.min.js +2 -0
- package/dist/chunks/defaultUboDeclaration-B5nIsoCQ.esm.min.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-B8tY8ajW.esm.js +15 -0
- package/dist/chunks/defaultUboDeclaration-B8tY8ajW.esm.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-D7yr1BRw.esm.js +13 -0
- package/dist/chunks/defaultUboDeclaration-D7yr1BRw.esm.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-Db_EQWlv.esm.min.js +2 -0
- package/dist/chunks/defaultUboDeclaration-Db_EQWlv.esm.min.js.map +1 -0
- package/dist/chunks/drawWrapper.functions-CKg3_9x4.esm.js +11 -0
- package/dist/chunks/drawWrapper.functions-CKg3_9x4.esm.js.map +1 -0
- package/dist/chunks/drawWrapper.functions-ng7lvueZ.esm.min.js +2 -0
- package/dist/chunks/drawWrapper.functions-ng7lvueZ.esm.min.js.map +1 -0
- package/dist/chunks/dumpTools-C13JzZr_.esm.min.js +2 -0
- package/dist/chunks/dumpTools-C13JzZr_.esm.min.js.map +1 -0
- package/dist/chunks/dumpTools-D6BRv6Ws.esm.js +200 -0
- package/dist/chunks/dumpTools-D6BRv6Ws.esm.js.map +1 -0
- package/dist/chunks/engine-29lBc-mw.esm.min.js +2 -0
- package/dist/chunks/engine-29lBc-mw.esm.min.js.map +1 -0
- package/dist/chunks/engine-Bk6S663t.esm.js +2213 -0
- package/dist/chunks/engine-Bk6S663t.esm.js.map +1 -0
- package/dist/chunks/engine.common-D_DOB0rT.esm.js +1162 -0
- package/dist/chunks/engine.common-D_DOB0rT.esm.js.map +1 -0
- package/dist/chunks/engine.common-OpqDqcE2.esm.min.js +2 -0
- package/dist/chunks/engine.common-OpqDqcE2.esm.min.js.map +1 -0
- package/dist/chunks/envTextureLoader-DS13pG9w.esm.js +64 -0
- package/dist/chunks/envTextureLoader-DS13pG9w.esm.js.map +1 -0
- package/dist/chunks/envTextureLoader-Dt6q0XDu.esm.min.js +2 -0
- package/dist/chunks/envTextureLoader-Dt6q0XDu.esm.min.js.map +1 -0
- package/dist/chunks/environmentTextureTools-DKN-Hd8c.esm.min.js +2 -0
- package/dist/chunks/environmentTextureTools-DKN-Hd8c.esm.min.js.map +1 -0
- package/dist/chunks/environmentTextureTools-DWkvV21A.esm.js +382 -0
- package/dist/chunks/environmentTextureTools-DWkvV21A.esm.js.map +1 -0
- package/dist/chunks/exrTextureLoader-6o4jfUaF.esm.js +1683 -0
- package/dist/chunks/exrTextureLoader-6o4jfUaF.esm.js.map +1 -0
- package/dist/chunks/exrTextureLoader-CXV9O3pZ.esm.min.js +2 -0
- package/dist/chunks/exrTextureLoader-CXV9O3pZ.esm.min.js.map +1 -0
- package/dist/chunks/fogFragment-BdOtsPe3.esm.js +102 -0
- package/dist/chunks/fogFragment-BdOtsPe3.esm.js.map +1 -0
- package/dist/chunks/fogFragment-Cv3Bqrrg.esm.js +101 -0
- package/dist/chunks/fogFragment-Cv3Bqrrg.esm.js.map +1 -0
- package/dist/chunks/fogFragment-D91rqvp0.esm.min.js +2 -0
- package/dist/chunks/fogFragment-D91rqvp0.esm.min.js.map +1 -0
- package/dist/chunks/fogFragment-qdYpZbGA.esm.min.js +2 -0
- package/dist/chunks/fogFragment-qdYpZbGA.esm.min.js.map +1 -0
- package/dist/chunks/fresnelFunction-DBMK4K-2.esm.min.js +2 -0
- package/dist/chunks/fresnelFunction-DBMK4K-2.esm.min.js.map +1 -0
- package/dist/chunks/fresnelFunction-o5ZOc6C0.esm.js +12 -0
- package/dist/chunks/fresnelFunction-o5ZOc6C0.esm.js.map +1 -0
- package/dist/chunks/glTFLoader-Dj_JCgqJ.esm.min.js +2 -0
- package/dist/chunks/glTFLoader-Dj_JCgqJ.esm.min.js.map +1 -0
- package/dist/chunks/glTFLoader-DnWHbX53.esm.js +7693 -0
- package/dist/chunks/glTFLoader-DnWHbX53.esm.js.map +1 -0
- package/dist/chunks/glTFLoaderAnimation-A_WVS-lt.esm.min.js +2 -0
- package/dist/chunks/glTFLoaderAnimation-A_WVS-lt.esm.min.js.map +1 -0
- package/dist/chunks/glTFLoaderAnimation-C3gHlipY.esm.js +77 -0
- package/dist/chunks/glTFLoaderAnimation-C3gHlipY.esm.js.map +1 -0
- package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js +2 -0
- package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js.map +1 -0
- package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js +67 -0
- package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-91QStv6v.esm.min.js +2 -0
- package/dist/chunks/harmonicsFunctions-91QStv6v.esm.min.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-DBJQNoSA.esm.min.js +2 -0
- package/dist/chunks/harmonicsFunctions-DBJQNoSA.esm.min.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-DXdlMMN6.esm.js +34 -0
- package/dist/chunks/harmonicsFunctions-DXdlMMN6.esm.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-VtAD6DeX.esm.js +35 -0
- package/dist/chunks/harmonicsFunctions-VtAD6DeX.esm.js.map +1 -0
- package/dist/chunks/hdrTextureLoader-CYtpPSzs.esm.js +253 -0
- package/dist/chunks/hdrTextureLoader-CYtpPSzs.esm.js.map +1 -0
- package/dist/chunks/hdrTextureLoader-CzZ1hV7q.esm.min.js +2 -0
- package/dist/chunks/hdrTextureLoader-CzZ1hV7q.esm.min.js.map +1 -0
- package/dist/chunks/helperFunctions-Bn3a_gzG.esm.js +110 -0
- package/dist/chunks/helperFunctions-Bn3a_gzG.esm.js.map +1 -0
- package/dist/chunks/helperFunctions-CA_QOVSE.esm.js +83 -0
- package/dist/chunks/helperFunctions-CA_QOVSE.esm.js.map +1 -0
- package/dist/chunks/helperFunctions-mebe29sq.esm.min.js +2 -0
- package/dist/chunks/helperFunctions-mebe29sq.esm.min.js.map +1 -0
- package/dist/chunks/helperFunctions-wIdfkMdZ.esm.min.js +2 -0
- package/dist/chunks/helperFunctions-wIdfkMdZ.esm.min.js.map +1 -0
- package/dist/chunks/iesTextureLoader-D8_bkaCP.esm.min.js +2 -0
- package/dist/chunks/iesTextureLoader-D8_bkaCP.esm.min.js.map +1 -0
- package/dist/chunks/iesTextureLoader-K1MQUalq.esm.js +189 -0
- package/dist/chunks/iesTextureLoader-K1MQUalq.esm.js.map +1 -0
- package/dist/chunks/index-Bo5F_mGk.esm.min.js +57 -0
- package/dist/chunks/index-Bo5F_mGk.esm.min.js.map +1 -0
- package/dist/chunks/index-Dlf001gP.esm.js +74889 -0
- package/dist/chunks/index-Dlf001gP.esm.js.map +1 -0
- package/dist/chunks/ktxTextureLoader-B6UHYOxL.esm.js +814 -0
- package/dist/chunks/ktxTextureLoader-B6UHYOxL.esm.js.map +1 -0
- package/dist/chunks/ktxTextureLoader-s_dbtiwN.esm.min.js +2 -0
- package/dist/chunks/ktxTextureLoader-s_dbtiwN.esm.min.js.map +1 -0
- package/dist/chunks/logDepthDeclaration--xmemf5p.esm.min.js +2 -0
- package/dist/chunks/logDepthDeclaration--xmemf5p.esm.min.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-Babs-3_m.esm.js +35 -0
- package/dist/chunks/logDepthDeclaration-Babs-3_m.esm.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-BvoznvSG.esm.min.js +2 -0
- package/dist/chunks/logDepthDeclaration-BvoznvSG.esm.min.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-_EPT9ybx.esm.js +11 -0
- package/dist/chunks/logDepthDeclaration-_EPT9ybx.esm.js.map +1 -0
- package/dist/chunks/logDepthVertex-0vve_qKh.esm.js +77 -0
- package/dist/chunks/logDepthVertex-0vve_qKh.esm.js.map +1 -0
- package/dist/chunks/logDepthVertex-BkGmO8_s.esm.js +81 -0
- package/dist/chunks/logDepthVertex-BkGmO8_s.esm.js.map +1 -0
- package/dist/chunks/logDepthVertex-CVcNpHQe.esm.min.js +2 -0
- package/dist/chunks/logDepthVertex-CVcNpHQe.esm.min.js.map +1 -0
- package/dist/chunks/logDepthVertex-DL8eWalk.esm.min.js +2 -0
- package/dist/chunks/logDepthVertex-DL8eWalk.esm.min.js.map +1 -0
- package/dist/chunks/mainUVVaryingDeclaration-9DUO7sPf.esm.js +11 -0
- package/dist/chunks/mainUVVaryingDeclaration-9DUO7sPf.esm.js.map +1 -0
- package/dist/chunks/mainUVVaryingDeclaration-DXZGPs7O.esm.js +11 -0
- package/dist/chunks/mainUVVaryingDeclaration-DXZGPs7O.esm.js.map +1 -0
- package/dist/chunks/mainUVVaryingDeclaration-DaFtbg5X.esm.min.js +2 -0
- package/dist/chunks/mainUVVaryingDeclaration-DaFtbg5X.esm.min.js.map +1 -0
- package/dist/chunks/mainUVVaryingDeclaration-lKBcMFcP.esm.min.js +2 -0
- package/dist/chunks/mainUVVaryingDeclaration-lKBcMFcP.esm.min.js.map +1 -0
- package/dist/chunks/mesh.vertexData.functions-B_pMCAzZ.esm.js +119 -0
- package/dist/chunks/mesh.vertexData.functions-B_pMCAzZ.esm.js.map +1 -0
- package/dist/chunks/mesh.vertexData.functions-Bo7e6Of9.esm.min.js +2 -0
- package/dist/chunks/mesh.vertexData.functions-Bo7e6Of9.esm.min.js.map +1 -0
- package/dist/chunks/meshUboDeclaration-BN0BlYEZ.esm.js +26 -0
- package/dist/chunks/meshUboDeclaration-BN0BlYEZ.esm.js.map +1 -0
- package/dist/chunks/meshUboDeclaration-BcQ1P_co.esm.min.js +2 -0
- package/dist/chunks/meshUboDeclaration-BcQ1P_co.esm.min.js.map +1 -0
- package/dist/chunks/objFileLoader-Lx7JtYFA.esm.min.js +2 -0
- package/dist/chunks/objFileLoader-Lx7JtYFA.esm.min.js.map +1 -0
- package/dist/chunks/objFileLoader-_nxEPYB4.esm.js +1338 -0
- package/dist/chunks/objFileLoader-_nxEPYB4.esm.js.map +1 -0
- package/dist/chunks/oitFragment-BPgREULe.esm.js +1240 -0
- package/dist/chunks/oitFragment-BPgREULe.esm.js.map +1 -0
- package/dist/chunks/oitFragment-CKNxTV0T.esm.min.js +2 -0
- package/dist/chunks/oitFragment-CKNxTV0T.esm.min.js.map +1 -0
- package/dist/chunks/oitFragment-CT3oWGRL.esm.js +1078 -0
- package/dist/chunks/oitFragment-CT3oWGRL.esm.js.map +1 -0
- package/dist/chunks/oitFragment-CXrV_64a.esm.min.js +2 -0
- package/dist/chunks/oitFragment-CXrV_64a.esm.min.js.map +1 -0
- package/dist/chunks/pass.fragment-BugqjVKo.esm.js +15 -0
- package/dist/chunks/pass.fragment-BugqjVKo.esm.js.map +1 -0
- package/dist/chunks/pass.fragment-X-KK3tOa.esm.min.js +2 -0
- package/dist/chunks/pass.fragment-X-KK3tOa.esm.min.js.map +1 -0
- package/dist/chunks/pass.fragment-pJ1J3AeO.esm.min.js +2 -0
- package/dist/chunks/pass.fragment-pJ1J3AeO.esm.min.js.map +1 -0
- package/dist/chunks/pass.fragment-tk9KCmM-.esm.js +15 -0
- package/dist/chunks/pass.fragment-tk9KCmM-.esm.js.map +1 -0
- package/dist/chunks/pbr.fragment-C4BFWzEP.esm.js +3269 -0
- package/dist/chunks/pbr.fragment-C4BFWzEP.esm.js.map +1 -0
- package/dist/chunks/pbr.fragment-CTE0zFNb.esm.min.js +2 -0
- package/dist/chunks/pbr.fragment-CTE0zFNb.esm.min.js.map +1 -0
- package/dist/chunks/pbr.fragment-DZRIiJzv.esm.js +3222 -0
- package/dist/chunks/pbr.fragment-DZRIiJzv.esm.js.map +1 -0
- package/dist/chunks/pbr.fragment-Dk1kkP87.esm.min.js +2 -0
- package/dist/chunks/pbr.fragment-Dk1kkP87.esm.min.js.map +1 -0
- package/dist/chunks/pbr.vertex-Ba8BDEep.esm.min.js +2 -0
- package/dist/chunks/pbr.vertex-Ba8BDEep.esm.min.js.map +1 -0
- package/dist/chunks/pbr.vertex-DM2WONhK.esm.js +223 -0
- package/dist/chunks/pbr.vertex-DM2WONhK.esm.js.map +1 -0
- package/dist/chunks/pbr.vertex-DVghYyb7.esm.min.js +2 -0
- package/dist/chunks/pbr.vertex-DVghYyb7.esm.min.js.map +1 -0
- package/dist/chunks/pbr.vertex-DiVjR6Bs.esm.js +348 -0
- package/dist/chunks/pbr.vertex-DiVjR6Bs.esm.js.map +1 -0
- package/dist/chunks/postprocess.vertex-CtVD6qfW.esm.min.js +2 -0
- package/dist/chunks/postprocess.vertex-CtVD6qfW.esm.min.js.map +1 -0
- package/dist/chunks/postprocess.vertex-DntzOpKV.esm.js +20 -0
- package/dist/chunks/postprocess.vertex-DntzOpKV.esm.js.map +1 -0
- package/dist/chunks/rawTexture-BAt5J3G4.esm.min.js +2 -0
- package/dist/chunks/rawTexture-BAt5J3G4.esm.min.js.map +1 -0
- package/dist/chunks/rawTexture-D0O_yrdQ.esm.js +191 -0
- package/dist/chunks/rawTexture-D0O_yrdQ.esm.js.map +1 -0
- package/dist/chunks/ray-Bbt37I0I.esm.js +946 -0
- package/dist/chunks/ray-Bbt37I0I.esm.js.map +1 -0
- package/dist/chunks/ray-OQ0d0a-k.esm.min.js +2 -0
- package/dist/chunks/ray-OQ0d0a-k.esm.min.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-4HjKGwMm.esm.min.js +2 -0
- package/dist/chunks/rgbdDecode.fragment-4HjKGwMm.esm.min.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-CKVGwRZO.esm.js +13 -0
- package/dist/chunks/rgbdDecode.fragment-CKVGwRZO.esm.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-Cn6YVnkB.esm.js +13 -0
- package/dist/chunks/rgbdDecode.fragment-Cn6YVnkB.esm.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-DwcDy8Eo.esm.min.js +2 -0
- package/dist/chunks/rgbdDecode.fragment-DwcDy8Eo.esm.min.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-BUluDIqG.esm.min.js +2 -0
- package/dist/chunks/rgbdEncode.fragment-BUluDIqG.esm.min.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-CEiZq0Qt.esm.js +13 -0
- package/dist/chunks/rgbdEncode.fragment-CEiZq0Qt.esm.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-CY0yYtEl.esm.js +13 -0
- package/dist/chunks/rgbdEncode.fragment-CY0yYtEl.esm.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-DS4_h_Qc.esm.min.js +2 -0
- package/dist/chunks/rgbdEncode.fragment-DS4_h_Qc.esm.min.js.map +1 -0
- package/dist/chunks/splatFileLoader-C9ykR2nU.esm.js +3387 -0
- package/dist/chunks/splatFileLoader-C9ykR2nU.esm.js.map +1 -0
- package/dist/chunks/splatFileLoader-fz6lXWf1.esm.min.js +2 -0
- package/dist/chunks/splatFileLoader-fz6lXWf1.esm.min.js.map +1 -0
- package/dist/chunks/spotLight-BJUVKiS1.esm.min.js +2 -0
- package/dist/chunks/spotLight-BJUVKiS1.esm.min.js.map +1 -0
- package/dist/chunks/spotLight-DPadbSE2.esm.js +701 -0
- package/dist/chunks/spotLight-DPadbSE2.esm.js.map +1 -0
- package/dist/chunks/standardMaterial-BFBsF3pv.esm.min.js +2 -0
- package/dist/chunks/standardMaterial-BFBsF3pv.esm.min.js.map +1 -0
- package/dist/chunks/standardMaterial-eJkfs5dX.esm.js +1807 -0
- package/dist/chunks/standardMaterial-eJkfs5dX.esm.js.map +1 -0
- package/dist/chunks/stlFileLoader-D-4wZdg7.esm.js +238 -0
- package/dist/chunks/stlFileLoader-D-4wZdg7.esm.js.map +1 -0
- package/dist/chunks/stlFileLoader-DFdDdaYW.esm.min.js +2 -0
- package/dist/chunks/stlFileLoader-DFdDdaYW.esm.min.js.map +1 -0
- package/dist/chunks/tgaTextureLoader-84Uwk9uE.esm.min.js +2 -0
- package/dist/chunks/tgaTextureLoader-84Uwk9uE.esm.min.js.map +1 -0
- package/dist/chunks/tgaTextureLoader-DDAxGDFK.esm.js +349 -0
- package/dist/chunks/tgaTextureLoader-DDAxGDFK.esm.js.map +1 -0
- package/dist/chunks/thinEngine-CiBi1yBe.esm.min.js +2 -0
- package/dist/chunks/thinEngine-CiBi1yBe.esm.min.js.map +1 -0
- package/dist/chunks/thinEngine-iDkoF96X.esm.js +3848 -0
- package/dist/chunks/thinEngine-iDkoF96X.esm.js.map +1 -0
- package/dist/chunks/thinInstanceMesh-DGBYkFXN.esm.js +314 -0
- package/dist/chunks/thinInstanceMesh-DGBYkFXN.esm.js.map +1 -0
- package/dist/chunks/thinInstanceMesh-MROq1d7v.esm.min.js +2 -0
- package/dist/chunks/thinInstanceMesh-MROq1d7v.esm.min.js.map +1 -0
- package/dist/chunks/vertexColorMixing-0VXbzCuF.esm.js +428 -0
- package/dist/chunks/vertexColorMixing-0VXbzCuF.esm.js.map +1 -0
- package/dist/chunks/vertexColorMixing-B3GD6hE2.esm.js +538 -0
- package/dist/chunks/vertexColorMixing-B3GD6hE2.esm.js.map +1 -0
- package/dist/chunks/vertexColorMixing-ClVYo-h9.esm.min.js +2 -0
- package/dist/chunks/vertexColorMixing-ClVYo-h9.esm.min.js.map +1 -0
- package/dist/chunks/vertexColorMixing-j0Dix_Wy.esm.min.js +2 -0
- package/dist/chunks/vertexColorMixing-j0Dix_Wy.esm.min.js.map +1 -0
- package/dist/chunks/webgpuEngine-BLhhEybd.esm.min.js +2 -0
- package/dist/chunks/webgpuEngine-BLhhEybd.esm.min.js.map +1 -0
- package/dist/chunks/webgpuEngine-Cs5fkngY.esm.js +11533 -0
- package/dist/chunks/webgpuEngine-Cs5fkngY.esm.js.map +1 -0
- package/dist/chunks/workerPool-BUOov2K1.esm.js +122 -0
- package/dist/chunks/workerPool-BUOov2K1.esm.js.map +1 -0
- package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js +2 -0
- package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js.map +1 -0
- package/lib/index.d.ts +591 -0
- package/lib/index.js +2165 -0
- package/lib/index.js.map +1 -0
- package/package.json +19 -28
- package/readme.md +28 -28
- package/configuration/configuration.d.ts +0 -107
- package/configuration/configuration.js +0 -16
- package/configuration/configuration.js.map +0 -1
- package/configuration/configurationCompatibility.d.ts +0 -8
- package/configuration/configurationCompatibility.js +0 -66
- package/configuration/configurationCompatibility.js.map +0 -1
- package/configuration/configurationContainer.d.ts +0 -10
- package/configuration/configurationContainer.js +0 -10
- package/configuration/configurationContainer.js.map +0 -1
- package/configuration/globals.d.ts +0 -6
- package/configuration/globals.js +0 -18
- package/configuration/globals.js.map +0 -1
- package/configuration/index.d.ts +0 -2
- package/configuration/index.js +0 -4
- package/configuration/index.js.map +0 -1
- package/configuration/interfaces/cameraConfiguration.d.ts +0 -31
- package/configuration/interfaces/cameraConfiguration.js +0 -2
- package/configuration/interfaces/cameraConfiguration.js.map +0 -1
- package/configuration/interfaces/colorGradingConfiguration.d.ts +0 -81
- package/configuration/interfaces/colorGradingConfiguration.js +0 -2
- package/configuration/interfaces/colorGradingConfiguration.js.map +0 -1
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.d.ts +0 -20
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.js +0 -2
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.js.map +0 -1
- package/configuration/interfaces/environmentMapConfiguration.d.ts +0 -22
- package/configuration/interfaces/environmentMapConfiguration.js +0 -2
- package/configuration/interfaces/environmentMapConfiguration.js.map +0 -1
- package/configuration/interfaces/groundConfiguration.d.ts +0 -24
- package/configuration/interfaces/groundConfiguration.js +0 -2
- package/configuration/interfaces/groundConfiguration.js.map +0 -1
- package/configuration/interfaces/imageProcessingConfiguration.d.ts +0 -45
- package/configuration/interfaces/imageProcessingConfiguration.js +0 -2
- package/configuration/interfaces/imageProcessingConfiguration.js.map +0 -1
- package/configuration/interfaces/index.d.ts +0 -15
- package/configuration/interfaces/index.js +0 -16
- package/configuration/interfaces/index.js.map +0 -1
- package/configuration/interfaces/lightConfiguration.d.ts +0 -60
- package/configuration/interfaces/lightConfiguration.js +0 -2
- package/configuration/interfaces/lightConfiguration.js.map +0 -1
- package/configuration/interfaces/modelAnimationConfiguration.d.ts +0 -26
- package/configuration/interfaces/modelAnimationConfiguration.js +0 -2
- package/configuration/interfaces/modelAnimationConfiguration.js.map +0 -1
- package/configuration/interfaces/modelConfiguration.d.ts +0 -65
- package/configuration/interfaces/modelConfiguration.js +0 -2
- package/configuration/interfaces/modelConfiguration.js.map +0 -1
- package/configuration/interfaces/observersConfiguration.d.ts +0 -5
- package/configuration/interfaces/observersConfiguration.js +0 -2
- package/configuration/interfaces/observersConfiguration.js.map +0 -1
- package/configuration/interfaces/sceneConfiguration.d.ts +0 -48
- package/configuration/interfaces/sceneConfiguration.js +0 -2
- package/configuration/interfaces/sceneConfiguration.js.map +0 -1
- package/configuration/interfaces/sceneOptimizerConfiguration.d.ts +0 -23
- package/configuration/interfaces/sceneOptimizerConfiguration.js +0 -2
- package/configuration/interfaces/sceneOptimizerConfiguration.js.map +0 -1
- package/configuration/interfaces/skyboxConfiguration.d.ts +0 -21
- package/configuration/interfaces/skyboxConfiguration.js +0 -2
- package/configuration/interfaces/skyboxConfiguration.js.map +0 -1
- package/configuration/interfaces/templateConfiguration.d.ts +0 -67
- package/configuration/interfaces/templateConfiguration.js +0 -2
- package/configuration/interfaces/templateConfiguration.js.map +0 -1
- package/configuration/interfaces/vrConfiguration.d.ts +0 -16
- package/configuration/interfaces/vrConfiguration.js +0 -2
- package/configuration/interfaces/vrConfiguration.js.map +0 -1
- package/configuration/loader.d.ts +0 -4
- package/configuration/loader.js +0 -17
- package/configuration/loader.js.map +0 -1
- package/configuration/mappers.d.ts +0 -43
- package/configuration/mappers.js +0 -193
- package/configuration/mappers.js.map +0 -1
- package/configuration/renderOnlyLoader.d.ts +0 -33
- package/configuration/renderOnlyLoader.js +0 -162
- package/configuration/renderOnlyLoader.js.map +0 -1
- package/configuration/types/default.d.ts +0 -6
- package/configuration/types/default.js +0 -121
- package/configuration/types/default.js.map +0 -1
- package/configuration/types/environmentMap.d.ts +0 -5
- package/configuration/types/environmentMap.js +0 -14
- package/configuration/types/environmentMap.js.map +0 -1
- package/configuration/types/extended.d.ts +0 -6
- package/configuration/types/extended.js +0 -317
- package/configuration/types/extended.js.map +0 -1
- package/configuration/types/index.d.ts +0 -14
- package/configuration/types/index.js +0 -51
- package/configuration/types/index.js.map +0 -1
- package/configuration/types/minimal.d.ts +0 -6
- package/configuration/types/minimal.js +0 -43
- package/configuration/types/minimal.js.map +0 -1
- package/configuration/types/renderOnlyDefault.d.ts +0 -30
- package/configuration/types/renderOnlyDefault.js +0 -31
- package/configuration/types/renderOnlyDefault.js.map +0 -1
- package/configuration/types/shadowLight.d.ts +0 -9
- package/configuration/types/shadowLight.js +0 -64
- package/configuration/types/shadowLight.js.map +0 -1
- package/helper/index.d.ts +0 -29
- package/helper/index.js +0 -66
- package/helper/index.js.map +0 -1
- package/index.d.ts +0 -30
- package/index.js +0 -46
- package/index.js.map +0 -1
- package/initializer.d.ts +0 -11
- package/initializer.js +0 -35
- package/initializer.js.map +0 -1
- package/interfaces.d.ts +0 -5
- package/interfaces.js +0 -7
- package/interfaces.js.map +0 -1
- package/labs/environmentSerializer.d.ts +0 -126
- package/labs/environmentSerializer.js +0 -191
- package/labs/environmentSerializer.js.map +0 -1
- package/labs/texture.d.ts +0 -183
- package/labs/texture.js +0 -351
- package/labs/texture.js.map +0 -1
- package/labs/viewerLabs.d.ts +0 -51
- package/labs/viewerLabs.js +0 -134
- package/labs/viewerLabs.js.map +0 -1
- package/loader/modelLoader.d.ts +0 -56
- package/loader/modelLoader.js +0 -202
- package/loader/modelLoader.js.map +0 -1
- package/loader/plugins/applyMaterialConfig.d.ts +0 -12
- package/loader/plugins/applyMaterialConfig.js +0 -16
- package/loader/plugins/applyMaterialConfig.js.map +0 -1
- package/loader/plugins/extendedMaterialLoaderPlugin.d.ts +0 -9
- package/loader/plugins/extendedMaterialLoaderPlugin.js +0 -16
- package/loader/plugins/extendedMaterialLoaderPlugin.js.map +0 -1
- package/loader/plugins/index.d.ts +0 -19
- package/loader/plugins/index.js +0 -44
- package/loader/plugins/index.js.map +0 -1
- package/loader/plugins/loaderPlugin.d.ts +0 -24
- package/loader/plugins/loaderPlugin.js +0 -2
- package/loader/plugins/loaderPlugin.js.map +0 -1
- package/loader/plugins/msftLodLoaderPlugin.d.ts +0 -12
- package/loader/plugins/msftLodLoaderPlugin.js +0 -21
- package/loader/plugins/msftLodLoaderPlugin.js.map +0 -1
- package/loader/plugins/telemetryLoaderPlugin.d.ts +0 -12
- package/loader/plugins/telemetryLoaderPlugin.js +0 -36
- package/loader/plugins/telemetryLoaderPlugin.js.map +0 -1
- package/managers/observablesManager.d.ts +0 -66
- package/managers/observablesManager.js +0 -35
- package/managers/observablesManager.js.map +0 -1
- package/managers/sceneManager.d.ts +0 -245
- package/managers/sceneManager.js +0 -1375
- package/managers/sceneManager.js.map +0 -1
- package/managers/telemetryManager.d.ts +0 -78
- package/managers/telemetryManager.js +0 -117
- package/managers/telemetryManager.js.map +0 -1
- package/model/modelAnimation.d.ts +0 -215
- package/model/modelAnimation.js +0 -237
- package/model/modelAnimation.js.map +0 -1
- package/model/viewerModel.d.ts +0 -233
- package/model/viewerModel.js +0 -673
- package/model/viewerModel.js.map +0 -1
- package/optimizer/custom/extended.d.ts +0 -13
- package/optimizer/custom/extended.js +0 -101
- package/optimizer/custom/extended.js.map +0 -1
- package/optimizer/custom/index.d.ts +0 -9
- package/optimizer/custom/index.js +0 -26
- package/optimizer/custom/index.js.map +0 -1
- package/renderOnlyIndex.d.ts +0 -11
- package/renderOnlyIndex.js +0 -18
- package/renderOnlyIndex.js.map +0 -1
- package/templating/eventManager.d.ts +0 -35
- package/templating/eventManager.js +0 -66
- package/templating/eventManager.js.map +0 -1
- package/templating/plugins/hdButtonPlugin.d.ts +0 -9
- package/templating/plugins/hdButtonPlugin.js +0 -22
- package/templating/plugins/hdButtonPlugin.js.map +0 -1
- package/templating/plugins/printButton.d.ts +0 -9
- package/templating/plugins/printButton.js +0 -41
- package/templating/plugins/printButton.js.map +0 -1
- package/templating/templateManager.d.ts +0 -197
- package/templating/templateManager.js +0 -561
- package/templating/templateManager.js.map +0 -1
- package/templating/viewerTemplatePlugin.d.ts +0 -21
- package/templating/viewerTemplatePlugin.js +0 -69
- package/templating/viewerTemplatePlugin.js.map +0 -1
- package/viewer/defaultViewer.d.ts +0 -130
- package/viewer/defaultViewer.js +0 -672
- package/viewer/defaultViewer.js.map +0 -1
- package/viewer/renderOnlyViewer.d.ts +0 -9
- package/viewer/renderOnlyViewer.js +0 -46
- package/viewer/renderOnlyViewer.js.map +0 -1
- package/viewer/viewer.d.ts +0 -258
- package/viewer/viewer.js +0 -783
- package/viewer/viewer.js.map +0 -1
- package/viewer/viewerManager.d.ts +0 -58
- package/viewer/viewerManager.js +0 -91
- package/viewer/viewerManager.js.map +0 -1
- package/viewer/viewerWithTemplate.d.ts +0 -9
- package/viewer/viewerWithTemplate.js +0 -20
- package/viewer/viewerWithTemplate.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MSFT_audio_emitter-ClwdeJaR.esm.js","sources":["../../../../../dev/core/dist/Animations/animationEvent.js","../../../../../dev/core/dist/Audio/sound.js","../../../../../dev/core/dist/Audio/weightedsound.js","../../../../../dev/core/dist/Audio/soundTrack.js","../../../../../dev/core/dist/Audio/audioSceneComponent.js","../../../../../dev/loaders/dist/glTF/2.0/Extensions/MSFT_audio_emitter.js"],"sourcesContent":["/**\n * Composed of a frame, and an action function\n */\nexport class AnimationEvent {\n /**\n * Initializes the animation event\n * @param frame The frame for which the event is triggered\n * @param action The event to perform when triggered\n * @param onlyOnce Specifies if the event should be triggered only once\n */\n constructor(\n /** The frame for which the event is triggered **/\n frame, \n /** The event to perform when triggered **/\n action, \n /** Specifies if the event should be triggered only once**/\n onlyOnce) {\n this.frame = frame;\n this.action = action;\n this.onlyOnce = onlyOnce;\n /**\n * Specifies if the animation event is done\n */\n this.isDone = false;\n }\n /** @internal */\n _clone() {\n return new AnimationEvent(this.frame, this.action, this.onlyOnce);\n }\n}\n//# sourceMappingURL=animationEvent.js.map","import { Tools } from \"../Misc/tools\";\nimport { Observable } from \"../Misc/observable\";\nimport { Vector3 } from \"../Maths/math.vector\";\nimport { Logger } from \"../Misc/logger\";\nimport { _WarnImport } from \"../Misc/devTools\";\nimport { EngineStore } from \"../Engines/engineStore\";\nimport { RegisterClass } from \"../Misc/typeStore\";\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\nimport { _retryWithInterval } from \"core/Misc/timingTools\";\n/**\n * Defines a sound that can be played in the application.\n * The sound can either be an ambient track or a simple sound played in reaction to a user action.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\n */\nexport class Sound {\n /**\n * Does the sound loop after it finishes playing once.\n */\n get loop() {\n return this._loop;\n }\n set loop(value) {\n if (value === this._loop) {\n return;\n }\n this._loop = value;\n this.updateOptions({ loop: value });\n }\n /**\n * Gets the current time for the sound.\n */\n get currentTime() {\n if (this._htmlAudioElement) {\n return this._htmlAudioElement.currentTime;\n }\n if (AbstractEngine.audioEngine?.audioContext && (this.isPlaying || this.isPaused)) {\n // The `_currentTime` member is only updated when the sound is paused. Add the time since the last start\n // to get the actual current time.\n const timeSinceLastStart = this.isPaused ? 0 : AbstractEngine.audioEngine.audioContext.currentTime - this._startTime;\n return this._currentTime + timeSinceLastStart;\n }\n return 0;\n }\n /**\n * Does this sound enables spatial sound.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n get spatialSound() {\n return this._spatialSound;\n }\n /**\n * Does this sound enables spatial sound.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n set spatialSound(newValue) {\n if (newValue == this._spatialSound) {\n return;\n }\n const wasPlaying = this.isPlaying;\n this.pause();\n if (newValue) {\n this._spatialSound = newValue;\n this._updateSpatialParameters();\n }\n else {\n this._disableSpatialSound();\n }\n if (wasPlaying) {\n this.play();\n }\n }\n /**\n * Create a sound and attach it to a scene\n * @param name Name of your sound\n * @param urlOrArrayBuffer Url to the sound to load async or ArrayBuffer, it also works with MediaStreams and AudioBuffers\n * @param scene defines the scene the sound belongs to\n * @param readyToPlayCallback Provide a callback function if you'd like to load your code once the sound is ready to be played\n * @param options Objects to provide with the current available options: autoplay, loop, volume, spatialSound, maxDistance, rolloffFactor, refDistance, distanceModel, panningModel, streaming\n */\n constructor(name, urlOrArrayBuffer, scene, readyToPlayCallback = null, options) {\n /**\n * Does the sound autoplay once loaded.\n */\n this.autoplay = false;\n this._loop = false;\n /**\n * Does the sound use a custom attenuation curve to simulate the falloff\n * happening when the source gets further away from the camera.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-your-own-custom-attenuation-function\n */\n this.useCustomAttenuation = false;\n /**\n * Is this sound currently played.\n */\n this.isPlaying = false;\n /**\n * Is this sound currently paused.\n */\n this.isPaused = false;\n /**\n * Define the reference distance the sound should be heard perfectly.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.refDistance = 1;\n /**\n * Define the roll off factor of spatial sounds.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.rolloffFactor = 1;\n /**\n * Define the max distance the sound should be heard (intensity just became 0 at this point).\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.maxDistance = 100;\n /**\n * Define the distance attenuation model the sound will follow.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.distanceModel = \"linear\";\n /**\n * Gets or sets an object used to store user defined information for the sound.\n */\n this.metadata = null;\n /**\n * Observable event when the current playing sound finishes.\n */\n this.onEndedObservable = new Observable();\n this._spatialSound = false;\n this._panningModel = \"equalpower\";\n this._playbackRate = 1;\n this._streaming = false;\n this._startTime = 0;\n this._currentTime = 0;\n this._position = Vector3.Zero();\n this._localDirection = new Vector3(1, 0, 0);\n this._volume = 1;\n this._isReadyToPlay = false;\n this._isDirectional = false;\n // Used if you'd like to create a directional sound.\n // If not set, the sound will be omnidirectional\n this._coneInnerAngle = 360;\n this._coneOuterAngle = 360;\n this._coneOuterGain = 0;\n this._isOutputConnected = false;\n this._urlType = \"Unknown\";\n this.name = name;\n scene = scene || EngineStore.LastCreatedScene;\n if (!scene) {\n return;\n }\n this._scene = scene;\n Sound._SceneComponentInitialization(scene);\n this._readyToPlayCallback = readyToPlayCallback;\n // Default custom attenuation function is a linear attenuation\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this._customAttenuationFunction = (currentVolume, currentDistance, maxDistance, refDistance, rolloffFactor) => {\n if (currentDistance < maxDistance) {\n return currentVolume * (1 - currentDistance / maxDistance);\n }\n else {\n return 0;\n }\n };\n if (options) {\n this.autoplay = options.autoplay || false;\n this._loop = options.loop || false;\n // if volume === 0, we need another way to check this option\n if (options.volume !== undefined) {\n this._volume = options.volume;\n }\n this._spatialSound = options.spatialSound ?? false;\n this.maxDistance = options.maxDistance ?? 100;\n this.useCustomAttenuation = options.useCustomAttenuation ?? false;\n this.rolloffFactor = options.rolloffFactor || 1;\n this.refDistance = options.refDistance || 1;\n this.distanceModel = options.distanceModel || \"linear\";\n this._playbackRate = options.playbackRate || 1;\n this._streaming = options.streaming ?? false;\n this._length = options.length;\n this._offset = options.offset;\n }\n if (AbstractEngine.audioEngine?.canUseWebAudio && AbstractEngine.audioEngine.audioContext) {\n this._soundGain = AbstractEngine.audioEngine.audioContext.createGain();\n this._soundGain.gain.value = this._volume;\n this._inputAudioNode = this._soundGain;\n this._outputAudioNode = this._soundGain;\n if (this._spatialSound) {\n this._createSpatialParameters();\n }\n this._scene.mainSoundTrack.addSound(this);\n let validParameter = true;\n // if no parameter is passed, you need to call setAudioBuffer yourself to prepare the sound\n if (urlOrArrayBuffer) {\n try {\n if (typeof urlOrArrayBuffer === \"string\") {\n this._urlType = \"String\";\n this._url = urlOrArrayBuffer;\n }\n else if (urlOrArrayBuffer instanceof ArrayBuffer) {\n this._urlType = \"ArrayBuffer\";\n }\n else if (urlOrArrayBuffer instanceof HTMLMediaElement) {\n this._urlType = \"MediaElement\";\n }\n else if (urlOrArrayBuffer instanceof MediaStream) {\n this._urlType = \"MediaStream\";\n }\n else if (urlOrArrayBuffer instanceof AudioBuffer) {\n this._urlType = \"AudioBuffer\";\n }\n else if (Array.isArray(urlOrArrayBuffer)) {\n this._urlType = \"Array\";\n }\n let urls = [];\n let codecSupportedFound = false;\n switch (this._urlType) {\n case \"MediaElement\":\n this._streaming = true;\n this._isReadyToPlay = true;\n this._streamingSource = AbstractEngine.audioEngine.audioContext.createMediaElementSource(urlOrArrayBuffer);\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n break;\n case \"MediaStream\":\n this._streaming = true;\n this._isReadyToPlay = true;\n this._streamingSource = AbstractEngine.audioEngine.audioContext.createMediaStreamSource(urlOrArrayBuffer);\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n break;\n case \"ArrayBuffer\":\n if (urlOrArrayBuffer.byteLength > 0) {\n codecSupportedFound = true;\n this._soundLoaded(urlOrArrayBuffer);\n }\n break;\n case \"AudioBuffer\":\n this._audioBufferLoaded(urlOrArrayBuffer);\n break;\n case \"String\":\n urls.push(urlOrArrayBuffer);\n // eslint-disable-next-line no-fallthrough\n case \"Array\":\n if (urls.length === 0) {\n urls = urlOrArrayBuffer;\n }\n // If we found a supported format, we load it immediately and stop the loop\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n codecSupportedFound =\n (options && options.skipCodecCheck) ||\n (url.indexOf(\".mp3\", url.length - 4) !== -1 && AbstractEngine.audioEngine.isMP3supported) ||\n (url.indexOf(\".ogg\", url.length - 4) !== -1 && AbstractEngine.audioEngine.isOGGsupported) ||\n url.indexOf(\".wav\", url.length - 4) !== -1 ||\n url.indexOf(\".m4a\", url.length - 4) !== -1 ||\n url.indexOf(\".mp4\", url.length - 4) !== -1 ||\n url.indexOf(\"blob:\") !== -1;\n if (codecSupportedFound) {\n // Loading sound\n if (!this._streaming) {\n this._scene._loadFile(url, (data) => {\n this._soundLoaded(data);\n }, undefined, true, true, (exception) => {\n if (exception) {\n Logger.Error(\"XHR \" + exception.status + \" error on: \" + url + \".\");\n }\n Logger.Error(\"Sound creation aborted.\");\n this._scene.mainSoundTrack.removeSound(this);\n });\n }\n // Streaming sound using HTML5 Audio tag\n else {\n this._htmlAudioElement = new Audio(url);\n this._htmlAudioElement.controls = false;\n this._htmlAudioElement.loop = this.loop;\n Tools.SetCorsBehavior(url, this._htmlAudioElement);\n this._htmlAudioElement.preload = \"auto\";\n this._htmlAudioElement.addEventListener(\"canplaythrough\", () => {\n this._isReadyToPlay = true;\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }, { once: true });\n document.body.appendChild(this._htmlAudioElement);\n this._htmlAudioElement.load();\n }\n break;\n }\n }\n break;\n default:\n validParameter = false;\n break;\n }\n if (!validParameter) {\n Logger.Error(\"Parameter must be a URL to the sound, an Array of URLs (.mp3 & .ogg) or an ArrayBuffer of the sound.\");\n }\n else {\n if (!codecSupportedFound) {\n this._isReadyToPlay = true;\n // Simulating a ready to play event to avoid breaking code path\n if (this._readyToPlayCallback) {\n setTimeout(() => {\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }, 1000);\n }\n }\n }\n }\n catch (ex) {\n Logger.Error(\"Unexpected error. Sound creation aborted.\");\n this._scene.mainSoundTrack.removeSound(this);\n }\n }\n }\n else {\n // Adding an empty sound to avoid breaking audio calls for non Web Audio browsers\n this._scene.mainSoundTrack.addSound(this);\n if (AbstractEngine.audioEngine && !AbstractEngine.audioEngine.WarnedWebAudioUnsupported) {\n Logger.Error(\"Web Audio is not supported by your browser.\");\n AbstractEngine.audioEngine.WarnedWebAudioUnsupported = true;\n }\n // Simulating a ready to play event to avoid breaking code for non web audio browsers\n if (this._readyToPlayCallback) {\n setTimeout(() => {\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }, 1000);\n }\n }\n }\n /**\n * Release the sound and its associated resources\n */\n dispose() {\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n if (this.isPlaying) {\n this.stop();\n }\n this._isReadyToPlay = false;\n if (this.soundTrackId === -1) {\n this._scene.mainSoundTrack.removeSound(this);\n }\n else if (this._scene.soundTracks) {\n this._scene.soundTracks[this.soundTrackId].removeSound(this);\n }\n if (this._soundGain) {\n this._soundGain.disconnect();\n this._soundGain = null;\n }\n if (this._soundPanner) {\n this._soundPanner.disconnect();\n this._soundPanner = null;\n }\n if (this._soundSource) {\n this._soundSource.disconnect();\n this._soundSource = null;\n }\n this._audioBuffer = null;\n if (this._htmlAudioElement) {\n this._htmlAudioElement.pause();\n this._htmlAudioElement.src = \"\";\n document.body.removeChild(this._htmlAudioElement);\n this._htmlAudioElement = null;\n }\n if (this._streamingSource) {\n this._streamingSource.disconnect();\n this._streamingSource = null;\n }\n if (this._connectedTransformNode && this._registerFunc) {\n this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc);\n this._connectedTransformNode = null;\n }\n this._clearTimeoutsAndObservers();\n }\n }\n /**\n * Gets if the sounds is ready to be played or not.\n * @returns true if ready, otherwise false\n */\n isReady() {\n return this._isReadyToPlay;\n }\n /**\n * Get the current class name.\n * @returns current class name\n */\n getClassName() {\n return \"Sound\";\n }\n _audioBufferLoaded(buffer) {\n if (!AbstractEngine.audioEngine?.audioContext) {\n return;\n }\n this._audioBuffer = buffer;\n this._isReadyToPlay = true;\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }\n _soundLoaded(audioData) {\n if (!AbstractEngine.audioEngine?.audioContext) {\n return;\n }\n AbstractEngine.audioEngine.audioContext.decodeAudioData(audioData, (buffer) => {\n this._audioBufferLoaded(buffer);\n }, (err) => {\n Logger.Error(\"Error while decoding audio data for: \" + this.name + \" / Error: \" + err);\n });\n }\n /**\n * Sets the data of the sound from an audiobuffer\n * @param audioBuffer The audioBuffer containing the data\n */\n setAudioBuffer(audioBuffer) {\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n this._audioBuffer = audioBuffer;\n this._isReadyToPlay = true;\n }\n }\n /**\n * Updates the current sounds options such as maxdistance, loop...\n * @param options A JSON object containing values named as the object properties\n */\n updateOptions(options) {\n if (options) {\n this.loop = options.loop ?? this.loop;\n this.maxDistance = options.maxDistance ?? this.maxDistance;\n this.useCustomAttenuation = options.useCustomAttenuation ?? this.useCustomAttenuation;\n this.rolloffFactor = options.rolloffFactor ?? this.rolloffFactor;\n this.refDistance = options.refDistance ?? this.refDistance;\n this.distanceModel = options.distanceModel ?? this.distanceModel;\n this._playbackRate = options.playbackRate ?? this._playbackRate;\n this._length = options.length ?? undefined;\n this.spatialSound = options.spatialSound ?? this._spatialSound;\n this._setOffset(options.offset ?? undefined);\n this.setVolume(options.volume ?? this._volume);\n this._updateSpatialParameters();\n if (this.isPlaying) {\n if (this._streaming && this._htmlAudioElement) {\n this._htmlAudioElement.playbackRate = this._playbackRate;\n if (this._htmlAudioElement.loop !== this.loop) {\n this._htmlAudioElement.loop = this.loop;\n }\n }\n else {\n if (this._soundSource) {\n this._soundSource.playbackRate.value = this._playbackRate;\n if (this._soundSource.loop !== this.loop) {\n this._soundSource.loop = this.loop;\n }\n if (this._offset !== undefined && this._soundSource.loopStart !== this._offset) {\n this._soundSource.loopStart = this._offset;\n }\n if (this._length !== undefined && this._length !== this._soundSource.loopEnd) {\n this._soundSource.loopEnd = (this._offset | 0) + this._length;\n }\n }\n }\n }\n }\n }\n _createSpatialParameters() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && AbstractEngine.audioEngine.audioContext) {\n if (this._scene.headphone) {\n this._panningModel = \"HRTF\";\n }\n this._soundPanner = this._soundPanner ?? AbstractEngine.audioEngine.audioContext.createPanner();\n if (this._soundPanner && this._outputAudioNode) {\n this._updateSpatialParameters();\n this._soundPanner.connect(this._outputAudioNode);\n this._inputAudioNode = this._soundPanner;\n }\n }\n }\n _disableSpatialSound() {\n if (!this._spatialSound) {\n return;\n }\n this._inputAudioNode = this._soundGain;\n this._soundPanner?.disconnect();\n this._soundPanner = null;\n this._spatialSound = false;\n }\n _updateSpatialParameters() {\n if (!this._spatialSound) {\n return;\n }\n if (this._soundPanner) {\n if (this.useCustomAttenuation) {\n // Tricks to disable in a way embedded Web Audio attenuation\n this._soundPanner.distanceModel = \"linear\";\n this._soundPanner.maxDistance = Number.MAX_VALUE;\n this._soundPanner.refDistance = 1;\n this._soundPanner.rolloffFactor = 1;\n this._soundPanner.panningModel = this._panningModel;\n }\n else {\n this._soundPanner.distanceModel = this.distanceModel;\n this._soundPanner.maxDistance = this.maxDistance;\n this._soundPanner.refDistance = this.refDistance;\n this._soundPanner.rolloffFactor = this.rolloffFactor;\n this._soundPanner.panningModel = this._panningModel;\n }\n }\n else {\n this._createSpatialParameters();\n }\n }\n /**\n * Switch the panning model to HRTF:\n * Renders a stereo output of higher quality than equalpower — it uses a convolution with measured impulse responses from human subjects.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n switchPanningModelToHRTF() {\n this._panningModel = \"HRTF\";\n this._switchPanningModel();\n }\n /**\n * Switch the panning model to Equal Power:\n * Represents the equal-power panning algorithm, generally regarded as simple and efficient. equalpower is the default value.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n switchPanningModelToEqualPower() {\n this._panningModel = \"equalpower\";\n this._switchPanningModel();\n }\n _switchPanningModel() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._spatialSound && this._soundPanner) {\n this._soundPanner.panningModel = this._panningModel;\n }\n }\n /**\n * Connect this sound to a sound track audio node like gain...\n * @param soundTrackAudioNode the sound track audio node to connect to\n */\n connectToSoundTrackAudioNode(soundTrackAudioNode) {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._outputAudioNode) {\n if (this._isOutputConnected) {\n this._outputAudioNode.disconnect();\n }\n this._outputAudioNode.connect(soundTrackAudioNode);\n this._isOutputConnected = true;\n }\n }\n /**\n * Transform this sound into a directional source\n * @param coneInnerAngle Size of the inner cone in degree\n * @param coneOuterAngle Size of the outer cone in degree\n * @param coneOuterGain Volume of the sound outside the outer cone (between 0.0 and 1.0)\n */\n setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) {\n if (coneOuterAngle < coneInnerAngle) {\n Logger.Error(\"setDirectionalCone(): outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneInnerAngle = coneInnerAngle;\n this._coneOuterAngle = coneOuterAngle;\n this._coneOuterGain = coneOuterGain;\n this._isDirectional = true;\n if (this.isPlaying && this.loop) {\n this.stop();\n this.play(0, this._offset, this._length);\n }\n }\n /**\n * Gets or sets the inner angle for the directional cone.\n */\n get directionalConeInnerAngle() {\n return this._coneInnerAngle;\n }\n /**\n * Gets or sets the inner angle for the directional cone.\n */\n set directionalConeInnerAngle(value) {\n if (value != this._coneInnerAngle) {\n if (this._coneOuterAngle < value) {\n Logger.Error(\"directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneInnerAngle = value;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._spatialSound && this._soundPanner) {\n this._soundPanner.coneInnerAngle = this._coneInnerAngle;\n }\n }\n }\n /**\n * Gets or sets the outer angle for the directional cone.\n */\n get directionalConeOuterAngle() {\n return this._coneOuterAngle;\n }\n /**\n * Gets or sets the outer angle for the directional cone.\n */\n set directionalConeOuterAngle(value) {\n if (value != this._coneOuterAngle) {\n if (value < this._coneInnerAngle) {\n Logger.Error(\"directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneOuterAngle = value;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._spatialSound && this._soundPanner) {\n this._soundPanner.coneOuterAngle = this._coneOuterAngle;\n }\n }\n }\n /**\n * Sets the position of the emitter if spatial sound is enabled\n * @param newPosition Defines the new position\n */\n setPosition(newPosition) {\n if (newPosition.equals(this._position)) {\n return;\n }\n this._position.copyFrom(newPosition);\n if (AbstractEngine.audioEngine?.canUseWebAudio &&\n this._spatialSound &&\n this._soundPanner &&\n !isNaN(this._position.x) &&\n !isNaN(this._position.y) &&\n !isNaN(this._position.z)) {\n this._soundPanner.positionX.value = this._position.x;\n this._soundPanner.positionY.value = this._position.y;\n this._soundPanner.positionZ.value = this._position.z;\n }\n }\n /**\n * Sets the local direction of the emitter if spatial sound is enabled\n * @param newLocalDirection Defines the new local direction\n */\n setLocalDirectionToMesh(newLocalDirection) {\n this._localDirection = newLocalDirection;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._connectedTransformNode && this.isPlaying) {\n this._updateDirection();\n }\n }\n _updateDirection() {\n if (!this._connectedTransformNode || !this._soundPanner) {\n return;\n }\n const mat = this._connectedTransformNode.getWorldMatrix();\n const direction = Vector3.TransformNormal(this._localDirection, mat);\n direction.normalize();\n this._soundPanner.orientationX.value = direction.x;\n this._soundPanner.orientationY.value = direction.y;\n this._soundPanner.orientationZ.value = direction.z;\n }\n /** @internal */\n updateDistanceFromListener() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._connectedTransformNode && this.useCustomAttenuation && this._soundGain && this._scene.activeCamera) {\n const distance = this._scene.audioListenerPositionProvider\n ? this._connectedTransformNode.position.subtract(this._scene.audioListenerPositionProvider()).length()\n : this._connectedTransformNode.getDistanceToCamera(this._scene.activeCamera);\n this._soundGain.gain.value = this._customAttenuationFunction(this._volume, distance, this.maxDistance, this.refDistance, this.rolloffFactor);\n }\n }\n /**\n * Sets a new custom attenuation function for the sound.\n * @param callback Defines the function used for the attenuation\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-your-own-custom-attenuation-function\n */\n setAttenuationFunction(callback) {\n this._customAttenuationFunction = callback;\n }\n /**\n * Play the sound\n * @param time (optional) Start the sound after X seconds. Start immediately (0) by default.\n * @param offset (optional) Start the sound at a specific time in seconds\n * @param length (optional) Sound duration (in seconds)\n */\n play(time, offset, length) {\n if (this._isReadyToPlay && this._scene.audioEnabled && AbstractEngine.audioEngine?.audioContext) {\n try {\n this._clearTimeoutsAndObservers();\n let startTime = time ? AbstractEngine.audioEngine?.audioContext.currentTime + time : AbstractEngine.audioEngine?.audioContext.currentTime;\n if (!this._soundSource || !this._streamingSource) {\n if (this._spatialSound && this._soundPanner) {\n if (!isNaN(this._position.x) && !isNaN(this._position.y) && !isNaN(this._position.z)) {\n this._soundPanner.positionX.value = this._position.x;\n this._soundPanner.positionY.value = this._position.y;\n this._soundPanner.positionZ.value = this._position.z;\n }\n if (this._isDirectional) {\n this._soundPanner.coneInnerAngle = this._coneInnerAngle;\n this._soundPanner.coneOuterAngle = this._coneOuterAngle;\n this._soundPanner.coneOuterGain = this._coneOuterGain;\n if (this._connectedTransformNode) {\n this._updateDirection();\n }\n else {\n this._soundPanner.setOrientation(this._localDirection.x, this._localDirection.y, this._localDirection.z);\n }\n }\n }\n }\n if (this._streaming) {\n if (!this._streamingSource && this._htmlAudioElement) {\n this._streamingSource = AbstractEngine.audioEngine.audioContext.createMediaElementSource(this._htmlAudioElement);\n this._htmlAudioElement.onended = () => {\n this._onended();\n };\n this._htmlAudioElement.playbackRate = this._playbackRate;\n }\n if (this._streamingSource) {\n this._streamingSource.disconnect();\n if (this._inputAudioNode) {\n this._streamingSource.connect(this._inputAudioNode);\n }\n }\n if (this._htmlAudioElement) {\n // required to manage properly the new suspended default state of Chrome\n // When the option 'streaming: true' is used, we need first to wait for\n // the audio engine to be unlocked by a user gesture before trying to play\n // an HTML Audio element\n const tryToPlay = () => {\n if (AbstractEngine.audioEngine?.unlocked) {\n if (!this._htmlAudioElement) {\n return;\n }\n this._htmlAudioElement.currentTime = offset ?? 0;\n const playPromise = this._htmlAudioElement.play();\n // In browsers that don’t yet support this functionality,\n // playPromise won’t be defined.\n if (playPromise !== undefined) {\n playPromise.catch(() => {\n // Automatic playback failed.\n // Waiting for the audio engine to be unlocked by user click on unmute\n AbstractEngine.audioEngine?.lock();\n if (this.loop || this.autoplay) {\n this._audioUnlockedObserver = AbstractEngine.audioEngine?.onAudioUnlockedObservable.addOnce(() => {\n tryToPlay();\n });\n }\n });\n }\n }\n else {\n if (this.loop || this.autoplay) {\n this._audioUnlockedObserver = AbstractEngine.audioEngine?.onAudioUnlockedObservable.addOnce(() => {\n tryToPlay();\n });\n }\n }\n };\n tryToPlay();\n }\n }\n else {\n const tryToPlay = () => {\n if (AbstractEngine.audioEngine?.audioContext) {\n length = length || this._length;\n if (offset !== undefined) {\n this._setOffset(offset);\n }\n if (this._soundSource) {\n const oldSource = this._soundSource;\n oldSource.onended = () => {\n oldSource.disconnect();\n };\n }\n this._soundSource = AbstractEngine.audioEngine?.audioContext.createBufferSource();\n if (this._soundSource && this._inputAudioNode) {\n this._soundSource.buffer = this._audioBuffer;\n this._soundSource.connect(this._inputAudioNode);\n this._soundSource.loop = this.loop;\n if (offset !== undefined) {\n this._soundSource.loopStart = offset;\n }\n if (length !== undefined) {\n this._soundSource.loopEnd = (offset | 0) + length;\n }\n this._soundSource.playbackRate.value = this._playbackRate;\n this._soundSource.onended = () => {\n this._onended();\n };\n startTime = time ? AbstractEngine.audioEngine?.audioContext.currentTime + time : AbstractEngine.audioEngine.audioContext.currentTime;\n const actualOffset = ((this.isPaused ? this.currentTime : 0) + (this._offset ?? 0)) % this._soundSource.buffer.duration;\n this._soundSource.start(startTime, actualOffset, this.loop ? undefined : length);\n }\n }\n };\n if (AbstractEngine.audioEngine?.audioContext.state === \"suspended\") {\n // Wait a bit for FF as context seems late to be ready.\n this._tryToPlayTimeout = setTimeout(() => {\n if (AbstractEngine.audioEngine?.audioContext.state === \"suspended\") {\n // Automatic playback failed.\n // Waiting for the audio engine to be unlocked by user click on unmute\n AbstractEngine.audioEngine.lock();\n if (this.loop || this.autoplay) {\n this._audioUnlockedObserver = AbstractEngine.audioEngine.onAudioUnlockedObservable.addOnce(() => {\n tryToPlay();\n });\n }\n }\n else {\n tryToPlay();\n }\n }, 500);\n }\n else {\n tryToPlay();\n }\n }\n this._startTime = startTime;\n this.isPlaying = true;\n this.isPaused = false;\n }\n catch (ex) {\n Logger.Error(\"Error while trying to play audio: \" + this.name + \", \" + ex.message);\n }\n }\n }\n _onended() {\n this.isPlaying = false;\n this._startTime = 0;\n this._currentTime = 0;\n if (this.onended) {\n this.onended();\n }\n this.onEndedObservable.notifyObservers(this);\n }\n /**\n * Stop the sound\n * @param time (optional) Stop the sound after X seconds. Stop immediately (0) by default.\n */\n stop(time) {\n if (this.isPlaying) {\n this._clearTimeoutsAndObservers();\n if (this._streaming) {\n if (this._htmlAudioElement) {\n this._htmlAudioElement.pause();\n // Test needed for Firefox or it will generate an Invalid State Error\n if (this._htmlAudioElement.currentTime > 0) {\n this._htmlAudioElement.currentTime = 0;\n }\n }\n else {\n this._streamingSource?.disconnect();\n }\n this.isPlaying = false;\n }\n else if (AbstractEngine.audioEngine?.audioContext && this._soundSource) {\n const stopTime = time ? AbstractEngine.audioEngine.audioContext.currentTime + time : undefined;\n this._soundSource.onended = () => {\n this.isPlaying = false;\n this.isPaused = false;\n this._startTime = 0;\n this._currentTime = 0;\n if (this._soundSource) {\n this._soundSource.onended = () => void 0;\n }\n this._onended();\n };\n this._soundSource.stop(stopTime);\n }\n else {\n this.isPlaying = false;\n }\n }\n else if (this.isPaused) {\n this.isPaused = false;\n this._startTime = 0;\n this._currentTime = 0;\n }\n }\n /**\n * Put the sound in pause\n */\n pause() {\n if (this.isPlaying) {\n this._clearTimeoutsAndObservers();\n if (this._streaming) {\n if (this._htmlAudioElement) {\n this._htmlAudioElement.pause();\n }\n else {\n this._streamingSource?.disconnect();\n }\n this.isPlaying = false;\n this.isPaused = true;\n }\n else if (AbstractEngine.audioEngine?.audioContext && this._soundSource) {\n this._soundSource.onended = () => void 0;\n this._soundSource.stop();\n this.isPlaying = false;\n this.isPaused = true;\n this._currentTime += AbstractEngine.audioEngine.audioContext.currentTime - this._startTime;\n }\n }\n }\n /**\n * Sets a dedicated volume for this sounds\n * @param newVolume Define the new volume of the sound\n * @param time Define time for gradual change to new volume\n */\n setVolume(newVolume, time) {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._soundGain) {\n if (time && AbstractEngine.audioEngine.audioContext) {\n this._soundGain.gain.cancelScheduledValues(AbstractEngine.audioEngine.audioContext.currentTime);\n this._soundGain.gain.setValueAtTime(this._soundGain.gain.value, AbstractEngine.audioEngine.audioContext.currentTime);\n this._soundGain.gain.linearRampToValueAtTime(newVolume, AbstractEngine.audioEngine.audioContext.currentTime + time);\n }\n else {\n this._soundGain.gain.value = newVolume;\n }\n }\n this._volume = newVolume;\n }\n /**\n * Set the sound play back rate\n * @param newPlaybackRate Define the playback rate the sound should be played at\n */\n setPlaybackRate(newPlaybackRate) {\n this._playbackRate = newPlaybackRate;\n if (this.isPlaying) {\n if (this._streaming && this._htmlAudioElement) {\n this._htmlAudioElement.playbackRate = this._playbackRate;\n }\n else if (this._soundSource) {\n this._soundSource.playbackRate.value = this._playbackRate;\n }\n }\n }\n /**\n * Gets the sound play back rate.\n * @returns the play back rate of the sound\n */\n getPlaybackRate() {\n return this._playbackRate;\n }\n /**\n * Gets the volume of the sound.\n * @returns the volume of the sound\n */\n getVolume() {\n return this._volume;\n }\n /**\n * Attach the sound to a dedicated mesh\n * @param transformNode The transform node to connect the sound with\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#attaching-a-sound-to-a-mesh\n */\n attachToMesh(transformNode) {\n if (this._connectedTransformNode && this._registerFunc) {\n this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc);\n this._registerFunc = null;\n }\n this._connectedTransformNode = transformNode;\n if (!this._spatialSound) {\n this._spatialSound = true;\n this._createSpatialParameters();\n if (this.isPlaying && this.loop) {\n this.stop();\n this.play(0, this._offset, this._length);\n }\n }\n this._onRegisterAfterWorldMatrixUpdate(this._connectedTransformNode);\n this._registerFunc = (transformNode) => this._onRegisterAfterWorldMatrixUpdate(transformNode);\n this._connectedTransformNode.registerAfterWorldMatrixUpdate(this._registerFunc);\n }\n /**\n * Detach the sound from the previously attached mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#attaching-a-sound-to-a-mesh\n */\n detachFromMesh() {\n if (this._connectedTransformNode && this._registerFunc) {\n this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc);\n this._registerFunc = null;\n this._connectedTransformNode = null;\n }\n }\n _onRegisterAfterWorldMatrixUpdate(node) {\n if (!node.getBoundingInfo) {\n this.setPosition(node.absolutePosition);\n }\n else {\n const mesh = node;\n const boundingInfo = mesh.getBoundingInfo();\n this.setPosition(boundingInfo.boundingSphere.centerWorld);\n }\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._isDirectional && this.isPlaying) {\n this._updateDirection();\n }\n }\n /**\n * Clone the current sound in the scene.\n * @returns the new sound clone\n */\n clone() {\n if (!this._streaming) {\n const setBufferAndRun = () => {\n _retryWithInterval(() => this._isReadyToPlay, () => {\n clonedSound._audioBuffer = this.getAudioBuffer();\n clonedSound._isReadyToPlay = true;\n if (clonedSound.autoplay) {\n clonedSound.play(0, this._offset, this._length);\n }\n }, undefined, 300);\n };\n const currentOptions = {\n autoplay: this.autoplay,\n loop: this.loop,\n volume: this._volume,\n spatialSound: this._spatialSound,\n maxDistance: this.maxDistance,\n useCustomAttenuation: this.useCustomAttenuation,\n rolloffFactor: this.rolloffFactor,\n refDistance: this.refDistance,\n distanceModel: this.distanceModel,\n };\n const clonedSound = new Sound(this.name + \"_cloned\", new ArrayBuffer(0), this._scene, null, currentOptions);\n if (this.useCustomAttenuation) {\n clonedSound.setAttenuationFunction(this._customAttenuationFunction);\n }\n clonedSound.setPosition(this._position);\n clonedSound.setPlaybackRate(this._playbackRate);\n setBufferAndRun();\n return clonedSound;\n }\n // Can't clone a streaming sound\n else {\n return null;\n }\n }\n /**\n * Gets the current underlying audio buffer containing the data\n * @returns the audio buffer\n */\n getAudioBuffer() {\n return this._audioBuffer;\n }\n /**\n * Gets the WebAudio AudioBufferSourceNode, lets you keep track of and stop instances of this Sound.\n * @returns the source node\n */\n getSoundSource() {\n return this._soundSource;\n }\n /**\n * Gets the WebAudio GainNode, gives you precise control over the gain of instances of this Sound.\n * @returns the gain node\n */\n getSoundGain() {\n return this._soundGain;\n }\n /**\n * Serializes the Sound in a JSON representation\n * @returns the JSON representation of the sound\n */\n serialize() {\n const serializationObject = {\n name: this.name,\n url: this._url,\n autoplay: this.autoplay,\n loop: this.loop,\n volume: this._volume,\n spatialSound: this._spatialSound,\n maxDistance: this.maxDistance,\n rolloffFactor: this.rolloffFactor,\n refDistance: this.refDistance,\n distanceModel: this.distanceModel,\n playbackRate: this._playbackRate,\n panningModel: this._panningModel,\n soundTrackId: this.soundTrackId,\n metadata: this.metadata,\n };\n if (this._spatialSound) {\n if (this._connectedTransformNode) {\n serializationObject.connectedMeshId = this._connectedTransformNode.id;\n }\n serializationObject.position = this._position.asArray();\n serializationObject.refDistance = this.refDistance;\n serializationObject.distanceModel = this.distanceModel;\n serializationObject.isDirectional = this._isDirectional;\n serializationObject.localDirectionToMesh = this._localDirection.asArray();\n serializationObject.coneInnerAngle = this._coneInnerAngle;\n serializationObject.coneOuterAngle = this._coneOuterAngle;\n serializationObject.coneOuterGain = this._coneOuterGain;\n }\n return serializationObject;\n }\n /**\n * Parse a JSON representation of a sound to instantiate in a given scene\n * @param parsedSound Define the JSON representation of the sound (usually coming from the serialize method)\n * @param scene Define the scene the new parsed sound should be created in\n * @param rootUrl Define the rooturl of the load in case we need to fetch relative dependencies\n * @param sourceSound Define a sound place holder if do not need to instantiate a new one\n * @returns the newly parsed sound\n */\n static Parse(parsedSound, scene, rootUrl, sourceSound) {\n const soundName = parsedSound.name;\n let soundUrl;\n if (parsedSound.url) {\n soundUrl = rootUrl + parsedSound.url;\n }\n else {\n soundUrl = rootUrl + soundName;\n }\n const options = {\n autoplay: parsedSound.autoplay,\n loop: parsedSound.loop,\n volume: parsedSound.volume,\n spatialSound: parsedSound.spatialSound,\n maxDistance: parsedSound.maxDistance,\n rolloffFactor: parsedSound.rolloffFactor,\n refDistance: parsedSound.refDistance,\n distanceModel: parsedSound.distanceModel,\n playbackRate: parsedSound.playbackRate,\n };\n let newSound;\n if (!sourceSound) {\n newSound = new Sound(soundName, soundUrl, scene, () => {\n scene.removePendingData(newSound);\n }, options);\n scene.addPendingData(newSound);\n }\n else {\n const setBufferAndRun = () => {\n _retryWithInterval(() => sourceSound._isReadyToPlay, () => {\n newSound._audioBuffer = sourceSound.getAudioBuffer();\n newSound._isReadyToPlay = true;\n if (newSound.autoplay) {\n newSound.play(0, newSound._offset, newSound._length);\n }\n }, undefined, 300);\n };\n newSound = new Sound(soundName, new ArrayBuffer(0), scene, null, options);\n setBufferAndRun();\n }\n if (parsedSound.position) {\n const soundPosition = Vector3.FromArray(parsedSound.position);\n newSound.setPosition(soundPosition);\n }\n if (parsedSound.isDirectional) {\n newSound.setDirectionalCone(parsedSound.coneInnerAngle || 360, parsedSound.coneOuterAngle || 360, parsedSound.coneOuterGain || 0);\n if (parsedSound.localDirectionToMesh) {\n const localDirectionToMesh = Vector3.FromArray(parsedSound.localDirectionToMesh);\n newSound.setLocalDirectionToMesh(localDirectionToMesh);\n }\n }\n if (parsedSound.connectedMeshId) {\n const connectedMesh = scene.getMeshById(parsedSound.connectedMeshId);\n if (connectedMesh) {\n newSound.attachToMesh(connectedMesh);\n }\n }\n if (parsedSound.metadata) {\n newSound.metadata = parsedSound.metadata;\n }\n return newSound;\n }\n _setOffset(value) {\n if (this._offset === value) {\n return;\n }\n if (this.isPaused) {\n this.stop();\n this.isPaused = false;\n }\n this._offset = value;\n }\n _clearTimeoutsAndObservers() {\n if (this._tryToPlayTimeout) {\n clearTimeout(this._tryToPlayTimeout);\n this._tryToPlayTimeout = null;\n }\n if (this._audioUnlockedObserver) {\n AbstractEngine.audioEngine?.onAudioUnlockedObservable.remove(this._audioUnlockedObserver);\n this._audioUnlockedObserver = null;\n }\n }\n}\n/**\n * @internal\n */\nSound._SceneComponentInitialization = (_) => {\n throw _WarnImport(\"AudioSceneComponent\");\n};\n// Register Class Name\nRegisterClass(\"BABYLON.Sound\", Sound);\n//# sourceMappingURL=sound.js.map","import { Logger } from \"../Misc/logger\";\n/**\n * Wraps one or more Sound objects and selects one with random weight for playback.\n */\nexport class WeightedSound {\n /**\n * Creates a new WeightedSound from the list of sounds given.\n * @param loop When true a Sound will be selected and played when the current playing Sound completes.\n * @param sounds Array of Sounds that will be selected from.\n * @param weights Array of number values for selection weights; length must equal sounds, values will be normalized to 1\n */\n constructor(loop, sounds, weights) {\n /** When true a Sound will be selected and played when the current playing Sound completes. */\n this.loop = false;\n this._coneInnerAngle = 360;\n this._coneOuterAngle = 360;\n this._volume = 1;\n /** A Sound is currently playing. */\n this.isPlaying = false;\n /** A Sound is currently paused. */\n this.isPaused = false;\n this._sounds = [];\n this._weights = [];\n if (sounds.length !== weights.length) {\n throw new Error(\"Sounds length does not equal weights length\");\n }\n this.loop = loop;\n this._weights = weights;\n // Normalize the weights\n let weightSum = 0;\n for (const weight of weights) {\n weightSum += weight;\n }\n const invWeightSum = weightSum > 0 ? 1 / weightSum : 0;\n for (let i = 0; i < this._weights.length; i++) {\n this._weights[i] *= invWeightSum;\n }\n this._sounds = sounds;\n for (const sound of this._sounds) {\n sound.onEndedObservable.add(() => {\n this._onended();\n });\n }\n }\n /**\n * The size of cone in degrees for a directional sound in which there will be no attenuation.\n */\n get directionalConeInnerAngle() {\n return this._coneInnerAngle;\n }\n /**\n * The size of cone in degrees for a directional sound in which there will be no attenuation.\n */\n set directionalConeInnerAngle(value) {\n if (value !== this._coneInnerAngle) {\n if (this._coneOuterAngle < value) {\n Logger.Error(\"directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneInnerAngle = value;\n for (const sound of this._sounds) {\n sound.directionalConeInnerAngle = value;\n }\n }\n }\n /**\n * Size of cone in degrees for a directional sound outside of which there will be no sound.\n * Listener angles between innerAngle and outerAngle will falloff linearly.\n */\n get directionalConeOuterAngle() {\n return this._coneOuterAngle;\n }\n /**\n * Size of cone in degrees for a directional sound outside of which there will be no sound.\n * Listener angles between innerAngle and outerAngle will falloff linearly.\n */\n set directionalConeOuterAngle(value) {\n if (value !== this._coneOuterAngle) {\n if (value < this._coneInnerAngle) {\n Logger.Error(\"directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneOuterAngle = value;\n for (const sound of this._sounds) {\n sound.directionalConeOuterAngle = value;\n }\n }\n }\n /**\n * Playback volume.\n */\n get volume() {\n return this._volume;\n }\n /**\n * Playback volume.\n */\n set volume(value) {\n if (value !== this._volume) {\n for (const sound of this._sounds) {\n sound.setVolume(value);\n }\n }\n }\n _onended() {\n if (this._currentIndex !== undefined) {\n this._sounds[this._currentIndex].autoplay = false;\n }\n if (this.loop && this.isPlaying) {\n this.play();\n }\n else {\n this.isPlaying = false;\n }\n }\n /**\n * Suspend playback\n */\n pause() {\n if (this.isPlaying) {\n this.isPaused = true;\n if (this._currentIndex !== undefined) {\n this._sounds[this._currentIndex].pause();\n }\n }\n }\n /**\n * Stop playback\n */\n stop() {\n this.isPlaying = false;\n if (this._currentIndex !== undefined) {\n this._sounds[this._currentIndex].stop();\n }\n }\n /**\n * Start playback.\n * @param startOffset Position the clip head at a specific time in seconds.\n */\n play(startOffset) {\n if (!this.isPaused) {\n this.stop();\n const randomValue = Math.random();\n let total = 0;\n for (let i = 0; i < this._weights.length; i++) {\n total += this._weights[i];\n if (randomValue <= total) {\n this._currentIndex = i;\n break;\n }\n }\n }\n const sound = this._sounds[this._currentIndex ?? 0];\n if (sound.isReady()) {\n sound.play(0, this.isPaused ? undefined : startOffset);\n }\n else {\n sound.autoplay = true;\n }\n this.isPlaying = true;\n this.isPaused = false;\n }\n}\n//# sourceMappingURL=weightedsound.js.map","import { EngineStore } from \"../Engines/engineStore\";\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\n/**\n * It could be useful to isolate your music & sounds on several tracks to better manage volume on a grouped instance of sounds.\n * It will be also used in a future release to apply effects on a specific track.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#using-sound-tracks\n */\nexport class SoundTrack {\n /**\n * Creates a new sound track.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#using-sound-tracks\n * @param scene Define the scene the sound track belongs to\n * @param options\n */\n constructor(scene, options = {}) {\n /**\n * The unique identifier of the sound track in the scene.\n */\n this.id = -1;\n this._isInitialized = false;\n scene = scene || EngineStore.LastCreatedScene;\n if (!scene) {\n return;\n }\n this._scene = scene;\n this.soundCollection = [];\n this._options = options;\n if (!this._options.mainTrack && this._scene.soundTracks) {\n this._scene.soundTracks.push(this);\n this.id = this._scene.soundTracks.length - 1;\n }\n }\n _initializeSoundTrackAudioGraph() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && AbstractEngine.audioEngine.audioContext) {\n this._outputAudioNode = AbstractEngine.audioEngine.audioContext.createGain();\n this._outputAudioNode.connect(AbstractEngine.audioEngine.masterGain);\n if (this._options) {\n if (this._options.volume) {\n this._outputAudioNode.gain.value = this._options.volume;\n }\n }\n this._isInitialized = true;\n }\n }\n /**\n * Release the sound track and its associated resources\n */\n dispose() {\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.canUseWebAudio) {\n if (this._connectedAnalyser) {\n this._connectedAnalyser.stopDebugCanvas();\n }\n while (this.soundCollection.length) {\n this.soundCollection[0].dispose();\n }\n if (this._outputAudioNode) {\n this._outputAudioNode.disconnect();\n }\n this._outputAudioNode = null;\n }\n }\n /**\n * Adds a sound to this sound track\n * @param sound define the sound to add\n * @ignoreNaming\n */\n addSound(sound) {\n if (!this._isInitialized) {\n this._initializeSoundTrackAudioGraph();\n }\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._outputAudioNode) {\n sound.connectToSoundTrackAudioNode(this._outputAudioNode);\n }\n if (sound.soundTrackId !== undefined) {\n if (sound.soundTrackId === -1) {\n this._scene.mainSoundTrack.removeSound(sound);\n }\n else if (this._scene.soundTracks) {\n this._scene.soundTracks[sound.soundTrackId].removeSound(sound);\n }\n }\n this.soundCollection.push(sound);\n sound.soundTrackId = this.id;\n }\n /**\n * Removes a sound to this sound track\n * @param sound define the sound to remove\n * @ignoreNaming\n */\n removeSound(sound) {\n const index = this.soundCollection.indexOf(sound);\n if (index !== -1) {\n this.soundCollection.splice(index, 1);\n }\n }\n /**\n * Set a global volume for the full sound track.\n * @param newVolume Define the new volume of the sound track\n */\n setVolume(newVolume) {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._outputAudioNode) {\n this._outputAudioNode.gain.value = newVolume;\n }\n }\n /**\n * Switch the panning model to HRTF:\n * Renders a stereo output of higher quality than equalpower — it uses a convolution with measured impulse responses from human subjects.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n switchPanningModelToHRTF() {\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n for (let i = 0; i < this.soundCollection.length; i++) {\n this.soundCollection[i].switchPanningModelToHRTF();\n }\n }\n }\n /**\n * Switch the panning model to Equal Power:\n * Represents the equal-power panning algorithm, generally regarded as simple and efficient. equalpower is the default value.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n switchPanningModelToEqualPower() {\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n for (let i = 0; i < this.soundCollection.length; i++) {\n this.soundCollection[i].switchPanningModelToEqualPower();\n }\n }\n }\n /**\n * Connect the sound track to an audio analyser allowing some amazing\n * synchronization between the sounds/music and your visualization (VuMeter for instance).\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#using-the-analyser\n * @param analyser The analyser to connect to the engine\n */\n connectToAnalyser(analyser) {\n if (this._connectedAnalyser) {\n this._connectedAnalyser.stopDebugCanvas();\n }\n this._connectedAnalyser = analyser;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._outputAudioNode) {\n this._outputAudioNode.disconnect();\n this._connectedAnalyser.connectAudioNodes(this._outputAudioNode, AbstractEngine.audioEngine.masterGain);\n }\n }\n}\n//# sourceMappingURL=soundTrack.js.map","import { Sound } from \"./sound\";\nimport { SoundTrack } from \"./soundTrack\";\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\nimport { SceneComponentConstants } from \"../sceneComponent\";\nimport { Scene } from \"../scene\";\nimport \"./audioEngine\";\nimport { PrecisionDate } from \"../Misc/precisionDate\";\nimport { EngineStore } from \"../Engines/engineStore\";\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\nimport { AddParser } from \"core/Loading/Plugins/babylonFileParser.function\";\n// Adds the parser to the scene parsers.\nAddParser(SceneComponentConstants.NAME_AUDIO, (parsedData, scene, container, rootUrl) => {\n // TODO: add sound\n let loadedSounds = [];\n let loadedSound;\n container.sounds = container.sounds || [];\n if (parsedData.sounds !== undefined && parsedData.sounds !== null) {\n for (let index = 0, cache = parsedData.sounds.length; index < cache; index++) {\n const parsedSound = parsedData.sounds[index];\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n if (!parsedSound.url) {\n parsedSound.url = parsedSound.name;\n }\n if (!loadedSounds[parsedSound.url]) {\n loadedSound = Sound.Parse(parsedSound, scene, rootUrl);\n loadedSounds[parsedSound.url] = loadedSound;\n container.sounds.push(loadedSound);\n }\n else {\n container.sounds.push(Sound.Parse(parsedSound, scene, rootUrl, loadedSounds[parsedSound.url]));\n }\n }\n else {\n container.sounds.push(new Sound(parsedSound.name, null, scene));\n }\n }\n }\n loadedSounds = [];\n});\nObject.defineProperty(Scene.prototype, \"mainSoundTrack\", {\n get: function () {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n if (!this._mainSoundTrack) {\n this._mainSoundTrack = new SoundTrack(this, { mainTrack: true });\n }\n return this._mainSoundTrack;\n },\n enumerable: true,\n configurable: true,\n});\nScene.prototype.getSoundByName = function (name) {\n let index;\n for (index = 0; index < this.mainSoundTrack.soundCollection.length; index++) {\n if (this.mainSoundTrack.soundCollection[index].name === name) {\n return this.mainSoundTrack.soundCollection[index];\n }\n }\n if (this.soundTracks) {\n for (let sdIndex = 0; sdIndex < this.soundTracks.length; sdIndex++) {\n for (index = 0; index < this.soundTracks[sdIndex].soundCollection.length; index++) {\n if (this.soundTracks[sdIndex].soundCollection[index].name === name) {\n return this.soundTracks[sdIndex].soundCollection[index];\n }\n }\n }\n }\n return null;\n};\nObject.defineProperty(Scene.prototype, \"audioEnabled\", {\n get: function () {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n return compo.audioEnabled;\n },\n set: function (value) {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n if (value) {\n compo.enableAudio();\n }\n else {\n compo.disableAudio();\n }\n },\n enumerable: true,\n configurable: true,\n});\nObject.defineProperty(Scene.prototype, \"headphone\", {\n get: function () {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n return compo.headphone;\n },\n set: function (value) {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n if (value) {\n compo.switchAudioModeForHeadphones();\n }\n else {\n compo.switchAudioModeForNormalSpeakers();\n }\n },\n enumerable: true,\n configurable: true,\n});\nObject.defineProperty(Scene.prototype, \"audioListenerPositionProvider\", {\n get: function () {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n return compo.audioListenerPositionProvider;\n },\n set: function (value) {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n if (value && typeof value !== \"function\") {\n throw new Error(\"The value passed to [Scene.audioListenerPositionProvider] must be a function that returns a Vector3\");\n }\n else {\n compo.audioListenerPositionProvider = value;\n }\n },\n enumerable: true,\n configurable: true,\n});\nObject.defineProperty(Scene.prototype, \"audioListenerRotationProvider\", {\n get: function () {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n return compo.audioListenerRotationProvider;\n },\n set: function (value) {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n if (value && typeof value !== \"function\") {\n throw new Error(\"The value passed to [Scene.audioListenerRotationProvider] must be a function that returns a Vector3\");\n }\n else {\n compo.audioListenerRotationProvider = value;\n }\n },\n enumerable: true,\n configurable: true,\n});\nObject.defineProperty(Scene.prototype, \"audioPositioningRefreshRate\", {\n get: function () {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n return compo.audioPositioningRefreshRate;\n },\n set: function (value) {\n let compo = this._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(this);\n this._addComponent(compo);\n }\n compo.audioPositioningRefreshRate = value;\n },\n enumerable: true,\n configurable: true,\n});\n/**\n * Defines the sound scene component responsible to manage any sounds\n * in a given scene.\n */\nexport class AudioSceneComponent {\n /**\n * Gets whether audio is enabled or not.\n * Please use related enable/disable method to switch state.\n */\n get audioEnabled() {\n return this._audioEnabled;\n }\n /**\n * Gets whether audio is outputting to headphone or not.\n * Please use the according Switch methods to change output.\n */\n get headphone() {\n return this._headphone;\n }\n /**\n * Creates a new instance of the component for the given scene\n * @param scene Defines the scene to register the component in\n */\n constructor(scene) {\n /**\n * The component name helpful to identify the component in the list of scene components.\n */\n this.name = SceneComponentConstants.NAME_AUDIO;\n this._audioEnabled = true;\n this._headphone = false;\n /**\n * Gets or sets a refresh rate when using 3D audio positioning\n */\n this.audioPositioningRefreshRate = 500;\n /**\n * Gets or Sets a custom listener position for all sounds in the scene\n * By default, this is the position of the first active camera\n */\n this.audioListenerPositionProvider = null;\n /**\n * Gets or Sets a custom listener rotation for all sounds in the scene\n * By default, this is the rotation of the first active camera\n */\n this.audioListenerRotationProvider = null;\n this._cachedCameraDirection = new Vector3();\n this._cachedCameraPosition = new Vector3();\n this._lastCheck = 0;\n this._invertMatrixTemp = new Matrix();\n this._cameraDirectionTemp = new Vector3();\n scene = scene || EngineStore.LastCreatedScene;\n if (!scene) {\n return;\n }\n this.scene = scene;\n scene.soundTracks = [];\n scene.sounds = [];\n }\n /**\n * Registers the component in a given scene\n */\n register() {\n this.scene._afterRenderStage.registerStep(SceneComponentConstants.STEP_AFTERRENDER_AUDIO, this, this._afterRender);\n }\n /**\n * Rebuilds the elements related to this component in case of\n * context lost for instance.\n */\n rebuild() {\n // Nothing to do here. (Not rendering related)\n }\n /**\n * Serializes the component data to the specified json object\n * @param serializationObject The object to serialize to\n */\n serialize(serializationObject) {\n serializationObject.sounds = [];\n if (this.scene.soundTracks) {\n for (let index = 0; index < this.scene.soundTracks.length; index++) {\n const soundtrack = this.scene.soundTracks[index];\n for (let soundId = 0; soundId < soundtrack.soundCollection.length; soundId++) {\n serializationObject.sounds.push(soundtrack.soundCollection[soundId].serialize());\n }\n }\n }\n }\n /**\n * Adds all the elements from the container to the scene\n * @param container the container holding the elements\n */\n addFromContainer(container) {\n if (!container.sounds) {\n return;\n }\n container.sounds.forEach((sound) => {\n sound.play();\n sound.autoplay = true;\n this.scene.mainSoundTrack.addSound(sound);\n });\n }\n /**\n * Removes all the elements in the container from the scene\n * @param container contains the elements to remove\n * @param dispose if the removed element should be disposed (default: false)\n */\n removeFromContainer(container, dispose = false) {\n if (!container.sounds) {\n return;\n }\n container.sounds.forEach((sound) => {\n sound.stop();\n sound.autoplay = false;\n this.scene.mainSoundTrack.removeSound(sound);\n if (dispose) {\n sound.dispose();\n }\n });\n }\n /**\n * Disposes the component and the associated resources.\n */\n dispose() {\n const scene = this.scene;\n if (scene._mainSoundTrack) {\n scene.mainSoundTrack.dispose();\n }\n if (scene.soundTracks) {\n for (let scIndex = 0; scIndex < scene.soundTracks.length; scIndex++) {\n scene.soundTracks[scIndex].dispose();\n }\n }\n }\n /**\n * Disables audio in the associated scene.\n */\n disableAudio() {\n const scene = this.scene;\n this._audioEnabled = false;\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.audioContext) {\n AbstractEngine.audioEngine.audioContext.suspend();\n }\n let i;\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\n scene.mainSoundTrack.soundCollection[i].pause();\n }\n if (scene.soundTracks) {\n for (i = 0; i < scene.soundTracks.length; i++) {\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\n scene.soundTracks[i].soundCollection[j].pause();\n }\n }\n }\n }\n /**\n * Enables audio in the associated scene.\n */\n enableAudio() {\n const scene = this.scene;\n this._audioEnabled = true;\n if (AbstractEngine.audioEngine && AbstractEngine.audioEngine.audioContext) {\n AbstractEngine.audioEngine.audioContext.resume();\n }\n let i;\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\n if (scene.mainSoundTrack.soundCollection[i].isPaused) {\n scene.mainSoundTrack.soundCollection[i].play();\n }\n }\n if (scene.soundTracks) {\n for (i = 0; i < scene.soundTracks.length; i++) {\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\n if (scene.soundTracks[i].soundCollection[j].isPaused) {\n scene.soundTracks[i].soundCollection[j].play();\n }\n }\n }\n }\n }\n /**\n * Switch audio to headphone output.\n */\n switchAudioModeForHeadphones() {\n const scene = this.scene;\n this._headphone = true;\n scene.mainSoundTrack.switchPanningModelToHRTF();\n if (scene.soundTracks) {\n for (let i = 0; i < scene.soundTracks.length; i++) {\n scene.soundTracks[i].switchPanningModelToHRTF();\n }\n }\n }\n /**\n * Switch audio to normal speakers.\n */\n switchAudioModeForNormalSpeakers() {\n const scene = this.scene;\n this._headphone = false;\n scene.mainSoundTrack.switchPanningModelToEqualPower();\n if (scene.soundTracks) {\n for (let i = 0; i < scene.soundTracks.length; i++) {\n scene.soundTracks[i].switchPanningModelToEqualPower();\n }\n }\n }\n _afterRender() {\n const now = PrecisionDate.Now;\n if (this._lastCheck && now - this._lastCheck < this.audioPositioningRefreshRate) {\n return;\n }\n this._lastCheck = now;\n const scene = this.scene;\n if (!this._audioEnabled || !scene._mainSoundTrack || !scene.soundTracks || (scene._mainSoundTrack.soundCollection.length === 0 && scene.soundTracks.length === 1)) {\n return;\n }\n const audioEngine = AbstractEngine.audioEngine;\n if (!audioEngine) {\n return;\n }\n if (audioEngine.audioContext) {\n let listeningCamera = scene.activeCamera;\n if (scene.activeCameras && scene.activeCameras.length > 0) {\n listeningCamera = scene.activeCameras[0];\n }\n // A custom listener position provider was set\n // Use the users provided position instead of camera's\n if (this.audioListenerPositionProvider) {\n const position = this.audioListenerPositionProvider();\n // Set the listener position\n audioEngine.audioContext.listener.setPosition(position.x || 0, position.y || 0, position.z || 0);\n // Check if there is a listening camera\n }\n else if (listeningCamera) {\n // Set the listener position to the listening camera global position\n if (!this._cachedCameraPosition.equals(listeningCamera.globalPosition)) {\n this._cachedCameraPosition.copyFrom(listeningCamera.globalPosition);\n audioEngine.audioContext.listener.setPosition(listeningCamera.globalPosition.x, listeningCamera.globalPosition.y, listeningCamera.globalPosition.z);\n }\n }\n // Otherwise set the listener position to 0, 0 ,0\n else {\n // Set the listener position\n audioEngine.audioContext.listener.setPosition(0, 0, 0);\n }\n // A custom listener rotation provider was set\n // Use the users provided rotation instead of camera's\n if (this.audioListenerRotationProvider) {\n const rotation = this.audioListenerRotationProvider();\n audioEngine.audioContext.listener.setOrientation(rotation.x || 0, rotation.y || 0, rotation.z || 0, 0, 1, 0);\n // Check if there is a listening camera\n }\n else if (listeningCamera) {\n // for VR cameras\n if (listeningCamera.rigCameras && listeningCamera.rigCameras.length > 0) {\n listeningCamera = listeningCamera.rigCameras[0];\n }\n listeningCamera.getViewMatrix().invertToRef(this._invertMatrixTemp);\n Vector3.TransformNormalToRef(AudioSceneComponent._CameraDirection, this._invertMatrixTemp, this._cameraDirectionTemp);\n this._cameraDirectionTemp.normalize();\n // To avoid some errors on GearVR\n if (!isNaN(this._cameraDirectionTemp.x) && !isNaN(this._cameraDirectionTemp.y) && !isNaN(this._cameraDirectionTemp.z)) {\n if (!this._cachedCameraDirection.equals(this._cameraDirectionTemp)) {\n this._cachedCameraDirection.copyFrom(this._cameraDirectionTemp);\n audioEngine.audioContext.listener.setOrientation(this._cameraDirectionTemp.x, this._cameraDirectionTemp.y, this._cameraDirectionTemp.z, 0, 1, 0);\n }\n }\n }\n // Otherwise set the listener rotation to 0, 0 ,0\n else {\n // Set the listener position\n audioEngine.audioContext.listener.setOrientation(0, 0, 0, 0, 1, 0);\n }\n let i;\n for (i = 0; i < scene.mainSoundTrack.soundCollection.length; i++) {\n const sound = scene.mainSoundTrack.soundCollection[i];\n if (sound.useCustomAttenuation) {\n sound.updateDistanceFromListener();\n }\n }\n if (scene.soundTracks) {\n for (i = 0; i < scene.soundTracks.length; i++) {\n for (let j = 0; j < scene.soundTracks[i].soundCollection.length; j++) {\n const sound = scene.soundTracks[i].soundCollection[j];\n if (sound.useCustomAttenuation) {\n sound.updateDistanceFromListener();\n }\n }\n }\n }\n }\n }\n}\nAudioSceneComponent._CameraDirection = new Vector3(0, 0, -1);\nSound._SceneComponentInitialization = (scene) => {\n let compo = scene._getComponent(SceneComponentConstants.NAME_AUDIO);\n if (!compo) {\n compo = new AudioSceneComponent(scene);\n scene._addComponent(compo);\n }\n};\n//# sourceMappingURL=audioSceneComponent.js.map","import { Vector3 } from \"core/Maths/math.vector\";\nimport { Tools } from \"core/Misc/tools\";\nimport { AnimationEvent } from \"core/Animations/animationEvent\";\nimport { Sound } from \"core/Audio/sound\";\nimport { WeightedSound } from \"core/Audio/weightedsound\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nimport \"core/Audio/audioSceneComponent\";\nconst NAME = \"MSFT_audio_emitter\";\n/**\n * [Specification](https://github.com/najadojo/glTF/blob/MSFT_audio_emitter/extensions/2.0/Vendor/MSFT_audio_emitter/README.md)\n * !!! Experimental Extension Subject to Changes !!!\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class MSFT_audio_emitter {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n this._clips = null;\n this._emitters = null;\n }\n /** @internal */\n onLoading() {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name];\n this._clips = extension.clips;\n this._emitters = extension.emitters;\n ArrayItem.Assign(this._clips);\n ArrayItem.Assign(this._emitters);\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n return GLTFLoader.LoadExtensionAsync(context, scene, this.name, (extensionContext, extension) => {\n const promises = new Array();\n promises.push(this._loader.loadSceneAsync(context, scene));\n for (const emitterIndex of extension.emitters) {\n const emitter = ArrayItem.Get(`${extensionContext}/emitters`, this._emitters, emitterIndex);\n if (emitter.refDistance != undefined ||\n emitter.maxDistance != undefined ||\n emitter.rolloffFactor != undefined ||\n emitter.distanceModel != undefined ||\n emitter.innerAngle != undefined ||\n emitter.outerAngle != undefined) {\n throw new Error(`${extensionContext}: Direction or Distance properties are not allowed on emitters attached to a scene`);\n }\n promises.push(this._loadEmitterAsync(`${extensionContext}/emitters/${emitter.index}`, emitter));\n }\n return Promise.all(promises).then(() => { });\n });\n }\n /**\n * @internal\n */\n loadNodeAsync(context, node, assign) {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n const promises = new Array();\n return this._loader\n .loadNodeAsync(extensionContext, node, (babylonMesh) => {\n for (const emitterIndex of extension.emitters) {\n const emitter = ArrayItem.Get(`${extensionContext}/emitters`, this._emitters, emitterIndex);\n promises.push(this._loadEmitterAsync(`${extensionContext}/emitters/${emitter.index}`, emitter).then(() => {\n for (const sound of emitter._babylonSounds) {\n sound.attachToMesh(babylonMesh);\n if (emitter.innerAngle != undefined || emitter.outerAngle != undefined) {\n sound.setLocalDirectionToMesh(Vector3.Forward());\n sound.setDirectionalCone(2 * Tools.ToDegrees(emitter.innerAngle == undefined ? Math.PI : emitter.innerAngle), 2 * Tools.ToDegrees(emitter.outerAngle == undefined ? Math.PI : emitter.outerAngle), 0);\n }\n }\n }));\n }\n assign(babylonMesh);\n })\n .then((babylonMesh) => {\n return Promise.all(promises).then(() => {\n return babylonMesh;\n });\n });\n });\n }\n /**\n * @internal\n */\n loadAnimationAsync(context, animation) {\n return GLTFLoader.LoadExtensionAsync(context, animation, this.name, (extensionContext, extension) => {\n return this._loader.loadAnimationAsync(context, animation).then((babylonAnimationGroup) => {\n const promises = new Array();\n ArrayItem.Assign(extension.events);\n for (const event of extension.events) {\n promises.push(this._loadAnimationEventAsync(`${extensionContext}/events/${event.index}`, context, animation, event, babylonAnimationGroup));\n }\n return Promise.all(promises).then(() => {\n return babylonAnimationGroup;\n });\n });\n });\n }\n _loadClipAsync(context, clip) {\n if (clip._objectURL) {\n return clip._objectURL;\n }\n let promise;\n if (clip.uri) {\n promise = this._loader.loadUriAsync(context, clip, clip.uri);\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._loader.gltf.bufferViews, clip.bufferView);\n promise = this._loader.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView);\n }\n clip._objectURL = promise.then((data) => {\n return URL.createObjectURL(new Blob([data], { type: clip.mimeType }));\n });\n return clip._objectURL;\n }\n _loadEmitterAsync(context, emitter) {\n emitter._babylonSounds = emitter._babylonSounds || [];\n if (!emitter._babylonData) {\n const clipPromises = new Array();\n const name = emitter.name || `emitter${emitter.index}`;\n const options = {\n loop: false,\n autoplay: false,\n volume: emitter.volume == undefined ? 1 : emitter.volume,\n };\n for (let i = 0; i < emitter.clips.length; i++) {\n const clipContext = `/extensions/${this.name}/clips`;\n const clip = ArrayItem.Get(clipContext, this._clips, emitter.clips[i].clip);\n clipPromises.push(this._loadClipAsync(`${clipContext}/${emitter.clips[i].clip}`, clip).then((objectURL) => {\n const sound = (emitter._babylonSounds[i] = new Sound(name, objectURL, this._loader.babylonScene, null, options));\n sound.refDistance = emitter.refDistance || 1;\n sound.maxDistance = emitter.maxDistance || 256;\n sound.rolloffFactor = emitter.rolloffFactor || 1;\n sound.distanceModel = emitter.distanceModel || \"exponential\";\n }));\n }\n const promise = Promise.all(clipPromises).then(() => {\n const weights = emitter.clips.map((clip) => {\n return clip.weight || 1;\n });\n const weightedSound = new WeightedSound(emitter.loop || false, emitter._babylonSounds, weights);\n if (emitter.innerAngle) {\n weightedSound.directionalConeInnerAngle = 2 * Tools.ToDegrees(emitter.innerAngle);\n }\n if (emitter.outerAngle) {\n weightedSound.directionalConeOuterAngle = 2 * Tools.ToDegrees(emitter.outerAngle);\n }\n if (emitter.volume) {\n weightedSound.volume = emitter.volume;\n }\n emitter._babylonData.sound = weightedSound;\n });\n emitter._babylonData = {\n loaded: promise,\n };\n }\n return emitter._babylonData.loaded;\n }\n _getEventAction(context, sound, action, time, startOffset) {\n switch (action) {\n case \"play\" /* IMSFTAudioEmitter_AnimationEventAction.play */: {\n return (currentFrame) => {\n const frameOffset = (startOffset || 0) + (currentFrame - time);\n sound.play(frameOffset);\n };\n }\n case \"stop\" /* IMSFTAudioEmitter_AnimationEventAction.stop */: {\n return () => {\n sound.stop();\n };\n }\n case \"pause\" /* IMSFTAudioEmitter_AnimationEventAction.pause */: {\n return () => {\n sound.pause();\n };\n }\n default: {\n throw new Error(`${context}: Unsupported action ${action}`);\n }\n }\n }\n _loadAnimationEventAsync(context, animationContext, animation, event, babylonAnimationGroup) {\n if (babylonAnimationGroup.targetedAnimations.length == 0) {\n return Promise.resolve();\n }\n const babylonAnimation = babylonAnimationGroup.targetedAnimations[0];\n const emitterIndex = event.emitter;\n const emitter = ArrayItem.Get(`/extensions/${this.name}/emitters`, this._emitters, emitterIndex);\n return this._loadEmitterAsync(context, emitter).then(() => {\n const sound = emitter._babylonData.sound;\n if (sound) {\n const babylonAnimationEvent = new AnimationEvent(event.time, this._getEventAction(context, sound, event.action, event.time, event.startOffset));\n babylonAnimation.animation.addEvent(babylonAnimationEvent);\n // Make sure all started audio stops when this animation is terminated.\n babylonAnimationGroup.onAnimationGroupEndObservable.add(() => {\n sound.stop();\n });\n babylonAnimationGroup.onAnimationGroupPauseObservable.add(() => {\n sound.pause();\n });\n }\n });\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new MSFT_audio_emitter(loader));\n//# sourceMappingURL=MSFT_audio_emitter.js.map"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{aV as e,bv as s,aQ as t,aR as r}from"./index-Bo5F_mGk.esm.min.js";import{G as i,A as o}from"./glTFLoader-Dj_JCgqJ.esm.min.js";import"./rawTexture-BAt5J3G4.esm.min.js";import"./assetContainer-CMuD-n3X.esm.min.js";import"./glTFLoaderAnimation-A_WVS-lt.esm.min.js";const a="MSFT_lod";class n{constructor(s){this.name=a,this.order=100,this.maxLODsToLoad=10,this.onNodeLODsLoadedObservable=new e,this.onMaterialLODsLoadedObservable=new e,this._bufferLODs=new Array,this._nodeIndexLOD=null,this._nodeSignalLODs=new Array,this._nodePromiseLODs=new Array,this._nodeBufferLODs=new Array,this._materialIndexLOD=null,this._materialSignalLODs=new Array,this._materialPromiseLODs=new Array,this._materialBufferLODs=new Array,this._loader=s,this.maxLODsToLoad=this._loader.parent.extensionOptions[a]?.maxLODsToLoad??this.maxLODsToLoad,this.enabled=this._loader.isExtensionUsed(a)}dispose(){this._loader=null,this._nodeIndexLOD=null,this._nodeSignalLODs.length=0,this._nodePromiseLODs.length=0,this._nodeBufferLODs.length=0,this._materialIndexLOD=null,this._materialSignalLODs.length=0,this._materialPromiseLODs.length=0,this._materialBufferLODs.length=0,this.onMaterialLODsLoadedObservable.clear(),this.onNodeLODsLoadedObservable.clear()}onReady(){for(let e=0;e<this._nodePromiseLODs.length;e++){const s=Promise.all(this._nodePromiseLODs[e]).then((()=>{0!==e&&(this._loader.endPerformanceCounter(`Node LOD ${e}`),this._loader.log(`Loaded node LOD ${e}`)),this.onNodeLODsLoadedObservable.notifyObservers(e),e!==this._nodePromiseLODs.length-1&&(this._loader.startPerformanceCounter(`Node LOD ${e+1}`),this._loadBufferLOD(this._nodeBufferLODs,e+1),this._nodeSignalLODs[e]&&this._nodeSignalLODs[e].resolve())}));this._loader._completePromises.push(s)}for(let e=0;e<this._materialPromiseLODs.length;e++){const s=Promise.all(this._materialPromiseLODs[e]).then((()=>{0!==e&&(this._loader.endPerformanceCounter(`Material LOD ${e}`),this._loader.log(`Loaded material LOD ${e}`)),this.onMaterialLODsLoadedObservable.notifyObservers(e),e!==this._materialPromiseLODs.length-1&&(this._loader.startPerformanceCounter(`Material LOD ${e+1}`),this._loadBufferLOD(this._materialBufferLODs,e+1),this._materialSignalLODs[e]&&this._materialSignalLODs[e].resolve())}));this._loader._completePromises.push(s)}}loadSceneAsync(e,s){const t=this._loader.loadSceneAsync(e,s);return this._loadBufferLOD(this._bufferLODs,0),t}loadNodeAsync(e,t,r){return i.LoadExtensionAsync(e,t,this.name,((e,i)=>{let o;const a=this._getLODs(e,t,this._loader.gltf.nodes,i.ids);this._loader.logOpen(`${e}`);for(let e=0;e<a.length;e++){const t=a[e];0!==e&&(this._nodeIndexLOD=e,this._nodeSignalLODs[e]=this._nodeSignalLODs[e]||new s);const i=e=>{r(e),e.setEnabled(!1)},n=this._loader.loadNodeAsync(`/nodes/${t.index}`,t,i).then((s=>{if(0!==e){const s=a[e-1];s._babylonTransformNode&&(this._disposeTransformNode(s._babylonTransformNode),delete s._babylonTransformNode)}return s.setEnabled(!0),s}));this._nodePromiseLODs[e]=this._nodePromiseLODs[e]||[],0===e?o=n:(this._nodeIndexLOD=null,this._nodePromiseLODs[e].push(n))}return this._loader.logClose(),o}))}_loadMaterialAsync(e,s,t,r,o){return this._nodeIndexLOD?null:i.LoadExtensionAsync(e,s,this.name,((e,i)=>{let a;const n=this._getLODs(e,s,this._loader.gltf.materials,i.ids);this._loader.logOpen(`${e}`);for(let e=0;e<n.length;e++){const s=n[e];0!==e&&(this._materialIndexLOD=e);const i=this._loader._loadMaterialAsync(`/materials/${s.index}`,s,t,r,(s=>{0===e&&o(s)})).then((s=>{if(0!==e){o(s);const t=n[e-1]._data;t[r]&&(this._disposeMaterials([t[r].babylonMaterial]),delete t[r])}return s}));this._materialPromiseLODs[e]=this._materialPromiseLODs[e]||[],0===e?a=i:(this._materialIndexLOD=null,this._materialPromiseLODs[e].push(i))}return this._loader.logClose(),a}))}_loadUriAsync(e,t,r){if(null!==this._nodeIndexLOD){this._loader.log("deferred");const i=this._nodeIndexLOD-1;return this._nodeSignalLODs[i]=this._nodeSignalLODs[i]||new s,this._nodeSignalLODs[this._nodeIndexLOD-1].promise.then((()=>this._loader.loadUriAsync(e,t,r)))}if(null!==this._materialIndexLOD){this._loader.log("deferred");const i=this._materialIndexLOD-1;return this._materialSignalLODs[i]=this._materialSignalLODs[i]||new s,this._materialSignalLODs[i].promise.then((()=>this._loader.loadUriAsync(e,t,r)))}return null}loadBufferAsync(e,t,r,i){if(this._loader.parent.useRangeRequests&&!t.uri){if(!this._loader.bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);const t=(e,t)=>{const o=r,a=o+i-1;let n=e[t];return n?(n.start=Math.min(n.start,o),n.end=Math.max(n.end,a)):(n={start:o,end:a,loaded:new s},e[t]=n),n.loaded.promise.then((e=>new Uint8Array(e.buffer,e.byteOffset+r-n.start,i)))};return this._loader.log("deferred"),null!==this._nodeIndexLOD?t(this._nodeBufferLODs,this._nodeIndexLOD):null!==this._materialIndexLOD?t(this._materialBufferLODs,this._materialIndexLOD):t(this._bufferLODs,0)}return null}_loadBufferLOD(e,s){const t=e[s];t&&(this._loader.log(`Loading buffer range [${t.start}-${t.end}]`),this._loader.bin.readAsync(t.start,t.end-t.start+1).then((e=>{t.loaded.resolve(e)}),(e=>{t.loaded.reject(e)})))}_getLODs(e,s,t,r){if(this.maxLODsToLoad<=0)throw new Error("maxLODsToLoad must be greater than zero");const i=[];for(let s=r.length-1;s>=0;s--)if(i.push(o.Get(`${e}/ids/${r[s]}`,t,r[s])),i.length===this.maxLODsToLoad)return i;return i.push(s),i}_disposeTransformNode(e){const s=[],t=e.material;t&&s.push(t);for(const t of e.getChildMeshes())t.material&&s.push(t.material);e.dispose();const r=s.filter((e=>this._loader.babylonScene.meshes.every((s=>s.material!=e))));this._disposeMaterials(r)}_disposeMaterials(e){const s={};for(const t of e){for(const e of t.getActiveTextures())s[e.uniqueId]=e;t.dispose()}for(const e in s)for(const t of this._loader.babylonScene.materials)t.hasTexture(s[e])&&delete s[e];for(const e in s)s[e].dispose()}}t(a),r(a,!0,(e=>new n(e)));export{n as MSFT_lod};
|
|
2
|
+
//# sourceMappingURL=MSFT_lod-D3MQWFc3.esm.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MSFT_lod-D3MQWFc3.esm.min.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/MSFT_lod.js"],"sourcesContent":["import { Observable } from \"core/Misc/observable\";\nimport { Deferred } from \"core/Misc/deferred\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"MSFT_lod\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/MSFT_lod/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class MSFT_lod {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n this.order = 100;\n /**\n * Maximum number of LODs to load, starting from the lowest LOD.\n */\n this.maxLODsToLoad = 10;\n /**\n * Observable raised when all node LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n this.onNodeLODsLoadedObservable = new Observable();\n /**\n * Observable raised when all material LODs of one level are loaded.\n * The event data is the index of the loaded LOD starting from zero.\n * Dispose the loader to cancel the loading of the next level of LODs.\n */\n this.onMaterialLODsLoadedObservable = new Observable();\n this._bufferLODs = new Array();\n this._nodeIndexLOD = null;\n this._nodeSignalLODs = new Array();\n this._nodePromiseLODs = new Array();\n this._nodeBufferLODs = new Array();\n this._materialIndexLOD = null;\n this._materialSignalLODs = new Array();\n this._materialPromiseLODs = new Array();\n this._materialBufferLODs = new Array();\n this._loader = loader;\n // Options takes precedence. The maxLODsToLoad extension property is retained for back compat.\n // For new extensions, they should only use options.\n this.maxLODsToLoad = this._loader.parent.extensionOptions[NAME]?.maxLODsToLoad ?? this.maxLODsToLoad;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n this._nodeIndexLOD = null;\n this._nodeSignalLODs.length = 0;\n this._nodePromiseLODs.length = 0;\n this._nodeBufferLODs.length = 0;\n this._materialIndexLOD = null;\n this._materialSignalLODs.length = 0;\n this._materialPromiseLODs.length = 0;\n this._materialBufferLODs.length = 0;\n this.onMaterialLODsLoadedObservable.clear();\n this.onNodeLODsLoadedObservable.clear();\n }\n /** @internal */\n onReady() {\n for (let indexLOD = 0; indexLOD < this._nodePromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._nodePromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Node LOD ${indexLOD}`);\n this._loader.log(`Loaded node LOD ${indexLOD}`);\n }\n this.onNodeLODsLoadedObservable.notifyObservers(indexLOD);\n if (indexLOD !== this._nodePromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Node LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._nodeBufferLODs, indexLOD + 1);\n if (this._nodeSignalLODs[indexLOD]) {\n this._nodeSignalLODs[indexLOD].resolve();\n }\n }\n });\n this._loader._completePromises.push(promise);\n }\n for (let indexLOD = 0; indexLOD < this._materialPromiseLODs.length; indexLOD++) {\n const promise = Promise.all(this._materialPromiseLODs[indexLOD]).then(() => {\n if (indexLOD !== 0) {\n this._loader.endPerformanceCounter(`Material LOD ${indexLOD}`);\n this._loader.log(`Loaded material LOD ${indexLOD}`);\n }\n this.onMaterialLODsLoadedObservable.notifyObservers(indexLOD);\n if (indexLOD !== this._materialPromiseLODs.length - 1) {\n this._loader.startPerformanceCounter(`Material LOD ${indexLOD + 1}`);\n this._loadBufferLOD(this._materialBufferLODs, indexLOD + 1);\n if (this._materialSignalLODs[indexLOD]) {\n this._materialSignalLODs[indexLOD].resolve();\n }\n }\n });\n this._loader._completePromises.push(promise);\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n const promise = this._loader.loadSceneAsync(context, scene);\n this._loadBufferLOD(this._bufferLODs, 0);\n return promise;\n }\n /**\n * @internal\n */\n loadNodeAsync(context, node, assign) {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n let firstPromise;\n const nodeLODs = this._getLODs(extensionContext, node, this._loader.gltf.nodes, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n for (let indexLOD = 0; indexLOD < nodeLODs.length; indexLOD++) {\n const nodeLOD = nodeLODs[indexLOD];\n if (indexLOD !== 0) {\n this._nodeIndexLOD = indexLOD;\n this._nodeSignalLODs[indexLOD] = this._nodeSignalLODs[indexLOD] || new Deferred();\n }\n const assignWrap = (babylonTransformNode) => {\n assign(babylonTransformNode);\n babylonTransformNode.setEnabled(false);\n };\n const promise = this._loader.loadNodeAsync(`/nodes/${nodeLOD.index}`, nodeLOD, assignWrap).then((babylonMesh) => {\n if (indexLOD !== 0) {\n // TODO: should not rely on _babylonTransformNode\n const previousNodeLOD = nodeLODs[indexLOD - 1];\n if (previousNodeLOD._babylonTransformNode) {\n this._disposeTransformNode(previousNodeLOD._babylonTransformNode);\n delete previousNodeLOD._babylonTransformNode;\n }\n }\n babylonMesh.setEnabled(true);\n return babylonMesh;\n });\n this._nodePromiseLODs[indexLOD] = this._nodePromiseLODs[indexLOD] || [];\n if (indexLOD === 0) {\n firstPromise = promise;\n }\n else {\n this._nodeIndexLOD = null;\n this._nodePromiseLODs[indexLOD].push(promise);\n }\n }\n this._loader.logClose();\n return firstPromise;\n });\n }\n /**\n * @internal\n */\n _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign) {\n // Don't load material LODs if already loading a node LOD.\n if (this._nodeIndexLOD) {\n return null;\n }\n return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {\n let firstPromise;\n const materialLODs = this._getLODs(extensionContext, material, this._loader.gltf.materials, extension.ids);\n this._loader.logOpen(`${extensionContext}`);\n for (let indexLOD = 0; indexLOD < materialLODs.length; indexLOD++) {\n const materialLOD = materialLODs[indexLOD];\n if (indexLOD !== 0) {\n this._materialIndexLOD = indexLOD;\n }\n const promise = this._loader\n ._loadMaterialAsync(`/materials/${materialLOD.index}`, materialLOD, babylonMesh, babylonDrawMode, (babylonMaterial) => {\n if (indexLOD === 0) {\n assign(babylonMaterial);\n }\n })\n .then((babylonMaterial) => {\n if (indexLOD !== 0) {\n assign(babylonMaterial);\n // TODO: should not rely on _data\n const previousDataLOD = materialLODs[indexLOD - 1]._data;\n if (previousDataLOD[babylonDrawMode]) {\n this._disposeMaterials([previousDataLOD[babylonDrawMode].babylonMaterial]);\n delete previousDataLOD[babylonDrawMode];\n }\n }\n return babylonMaterial;\n });\n this._materialPromiseLODs[indexLOD] = this._materialPromiseLODs[indexLOD] || [];\n if (indexLOD === 0) {\n firstPromise = promise;\n }\n else {\n this._materialIndexLOD = null;\n this._materialPromiseLODs[indexLOD].push(promise);\n }\n }\n this._loader.logClose();\n return firstPromise;\n });\n }\n /**\n * @internal\n */\n _loadUriAsync(context, property, uri) {\n // Defer the loading of uris if loading a node or material LOD.\n if (this._nodeIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._nodeIndexLOD - 1;\n this._nodeSignalLODs[previousIndexLOD] = this._nodeSignalLODs[previousIndexLOD] || new Deferred();\n return this._nodeSignalLODs[this._nodeIndexLOD - 1].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n else if (this._materialIndexLOD !== null) {\n this._loader.log(`deferred`);\n const previousIndexLOD = this._materialIndexLOD - 1;\n this._materialSignalLODs[previousIndexLOD] = this._materialSignalLODs[previousIndexLOD] || new Deferred();\n return this._materialSignalLODs[previousIndexLOD].promise.then(() => {\n return this._loader.loadUriAsync(context, property, uri);\n });\n }\n return null;\n }\n /**\n * @internal\n */\n loadBufferAsync(context, buffer, byteOffset, byteLength) {\n if (this._loader.parent.useRangeRequests && !buffer.uri) {\n if (!this._loader.bin) {\n throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);\n }\n const loadAsync = (bufferLODs, indexLOD) => {\n const start = byteOffset;\n const end = start + byteLength - 1;\n let bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n bufferLOD.start = Math.min(bufferLOD.start, start);\n bufferLOD.end = Math.max(bufferLOD.end, end);\n }\n else {\n bufferLOD = { start: start, end: end, loaded: new Deferred() };\n bufferLODs[indexLOD] = bufferLOD;\n }\n return bufferLOD.loaded.promise.then((data) => {\n return new Uint8Array(data.buffer, data.byteOffset + byteOffset - bufferLOD.start, byteLength);\n });\n };\n this._loader.log(`deferred`);\n if (this._nodeIndexLOD !== null) {\n return loadAsync(this._nodeBufferLODs, this._nodeIndexLOD);\n }\n else if (this._materialIndexLOD !== null) {\n return loadAsync(this._materialBufferLODs, this._materialIndexLOD);\n }\n else {\n return loadAsync(this._bufferLODs, 0);\n }\n }\n return null;\n }\n _loadBufferLOD(bufferLODs, indexLOD) {\n const bufferLOD = bufferLODs[indexLOD];\n if (bufferLOD) {\n this._loader.log(`Loading buffer range [${bufferLOD.start}-${bufferLOD.end}]`);\n this._loader.bin.readAsync(bufferLOD.start, bufferLOD.end - bufferLOD.start + 1).then((data) => {\n bufferLOD.loaded.resolve(data);\n }, (error) => {\n bufferLOD.loaded.reject(error);\n });\n }\n }\n /**\n * @returns an array of LOD properties from lowest to highest.\n * @param context\n * @param property\n * @param array\n * @param ids\n */\n _getLODs(context, property, array, ids) {\n if (this.maxLODsToLoad <= 0) {\n throw new Error(\"maxLODsToLoad must be greater than zero\");\n }\n const properties = [];\n for (let i = ids.length - 1; i >= 0; i--) {\n properties.push(ArrayItem.Get(`${context}/ids/${ids[i]}`, array, ids[i]));\n if (properties.length === this.maxLODsToLoad) {\n return properties;\n }\n }\n properties.push(property);\n return properties;\n }\n _disposeTransformNode(babylonTransformNode) {\n const babylonMaterials = [];\n const babylonMaterial = babylonTransformNode.material;\n if (babylonMaterial) {\n babylonMaterials.push(babylonMaterial);\n }\n for (const babylonMesh of babylonTransformNode.getChildMeshes()) {\n if (babylonMesh.material) {\n babylonMaterials.push(babylonMesh.material);\n }\n }\n babylonTransformNode.dispose();\n const babylonMaterialsToDispose = babylonMaterials.filter((babylonMaterial) => this._loader.babylonScene.meshes.every((mesh) => mesh.material != babylonMaterial));\n this._disposeMaterials(babylonMaterialsToDispose);\n }\n _disposeMaterials(babylonMaterials) {\n const babylonTextures = {};\n for (const babylonMaterial of babylonMaterials) {\n for (const babylonTexture of babylonMaterial.getActiveTextures()) {\n babylonTextures[babylonTexture.uniqueId] = babylonTexture;\n }\n babylonMaterial.dispose();\n }\n for (const uniqueId in babylonTextures) {\n for (const babylonMaterial of this._loader.babylonScene.materials) {\n if (babylonMaterial.hasTexture(babylonTextures[uniqueId])) {\n delete babylonTextures[uniqueId];\n }\n }\n }\n for (const uniqueId in babylonTextures) {\n babylonTextures[uniqueId].dispose();\n }\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new MSFT_lod(loader));\n//# sourceMappingURL=MSFT_lod.js.map"],"names":["NAME","MSFT_lod","constructor","loader","this","name","order","maxLODsToLoad","onNodeLODsLoadedObservable","Observable","onMaterialLODsLoadedObservable","_bufferLODs","Array","_nodeIndexLOD","_nodeSignalLODs","_nodePromiseLODs","_nodeBufferLODs","_materialIndexLOD","_materialSignalLODs","_materialPromiseLODs","_materialBufferLODs","_loader","parent","extensionOptions","enabled","isExtensionUsed","dispose","length","clear","onReady","indexLOD","promise","Promise","all","then","endPerformanceCounter","log","notifyObservers","startPerformanceCounter","_loadBufferLOD","resolve","_completePromises","push","loadSceneAsync","context","scene","loadNodeAsync","node","assign","GLTFLoader","LoadExtensionAsync","extensionContext","extension","firstPromise","nodeLODs","_getLODs","gltf","nodes","ids","logOpen","nodeLOD","Deferred","assignWrap","babylonTransformNode","setEnabled","index","babylonMesh","previousNodeLOD","_babylonTransformNode","_disposeTransformNode","logClose","_loadMaterialAsync","material","babylonDrawMode","materialLODs","materials","materialLOD","babylonMaterial","previousDataLOD","_data","_disposeMaterials","_loadUriAsync","property","uri","previousIndexLOD","loadUriAsync","loadBufferAsync","buffer","byteOffset","byteLength","useRangeRequests","bin","Error","loadAsync","bufferLODs","start","end","bufferLOD","Math","min","max","loaded","data","Uint8Array","readAsync","error","reject","array","properties","i","ArrayItem","Get","babylonMaterials","getChildMeshes","babylonMaterialsToDispose","filter","babylonScene","meshes","every","mesh","babylonTextures","babylonTexture","getActiveTextures","uniqueId","hasTexture","unregisterGLTFExtension","registerGLTFExtension"],"mappings":"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"}
|