@zephyr3d/scene 0.9.1 → 0.9.3
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/dist/animation/animationset.js +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scriptregistry.js","sources":["../../src/app/scriptregistry.ts"],"sourcesContent":["import type * as TS from 'typescript';\r\nimport type { Nullable, VFS } from '@zephyr3d/base';\r\nimport { textToBase64 } from '@zephyr3d/base';\r\nimport { init, parse } from 'es-module-lexer';\r\nimport { getApp } from './api';\r\n\r\n/**\r\n * Converts JavaScript source to a data URL tied to a logical module id.\r\n *\r\n * @param js - The JavaScript source code to embed.\r\n * @param id - Logical module identifier (used only for sourceURL tagging).\r\n * @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.\r\n * @internal\r\n */\r\nfunction toDataUrl(js: string, id: string) {\r\n const b64 = textToBase64(js);\r\n return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is an absolute HTTP(S) URL.\r\n * @internal\r\n */\r\nfunction isAbsoluteUrl(spec: string) {\r\n return /^https?:\\/\\//i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a special URL (data: or blob:).\r\n * @internal\r\n */\r\nfunction isSpecialUrl(spec: string) {\r\n return /^(data|blob):/i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).\r\n * @internal\r\n */\r\nfunction isBareModule(spec: string) {\r\n return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');\r\n}\r\n\r\n/**\r\n * Resolves, builds, and serves runtime modules using a VFS.\r\n *\r\n * Responsibilities:\r\n * - Resolve logical module IDs to physical paths or URLs.\r\n * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.\r\n * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).\r\n * - Gather static and dynamic import dependencies for tooling.\r\n *\r\n * Modes:\r\n * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.\r\n * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\\> .js mapping).\r\n *\r\n * Caching:\r\n * - Built modules are memoized in `_built` map keyed by logical ID.\r\n *\r\n * @public\r\n */\r\nexport class ScriptRegistry {\r\n private _vfs: VFS;\r\n private _scriptsRoot: string;\r\n private _built: Map<string, string>; // logicalId -> dataURL\r\n\r\n /**\r\n * @param vfs - The virtual file system for existence checks, reads, and path ops.\r\n * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).\r\n * @param editorMode - Whether to build modules to data URLs and rewrite imports.\r\n */\r\n constructor(vfs: VFS, scriptsRoot: string) {\r\n this._vfs = vfs;\r\n this._scriptsRoot = scriptsRoot;\r\n this._built = new Map();\r\n }\r\n\r\n /**\r\n * The active virtual file system.\r\n *\r\n * Assigning a new VFS clears the build cache.\r\n */\r\n get VFS() {\r\n return this._vfs;\r\n }\r\n set VFS(vfs: VFS) {\r\n if (vfs !== this._vfs) {\r\n this._vfs = vfs;\r\n this._built.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The root path used by `#/` specifiers.\r\n */\r\n get scriptsRoot() {\r\n return this._scriptsRoot;\r\n }\r\n set scriptsRoot(path: string) {\r\n this._scriptsRoot = path;\r\n }\r\n\r\n /**\r\n * Fetches raw source for a logical module id by probing known extensions.\r\n *\r\n * Search order:\r\n * - If `id` already ends with `.ts` or `.js` and is a file -\\> return it.\r\n * - Else try `.id.ts`, then `.id.js`.\r\n *\r\n * @param id - Logical module identifier (absolute or logical path-like).\r\n * @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.\r\n */\r\n protected async fetchSource(id: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (id.endsWith('.ts')) {\r\n pathWithExt = id;\r\n type = 'ts';\r\n } else if (id.endsWith('.js')) {\r\n pathWithExt = id;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${id}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (type) {\r\n const code = (await this._vfs.readFile(pathWithExt, { encoding: 'utf8' })) as string;\r\n return { code, type, path: pathWithExt };\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a module entry to a URL suitable for dynamic import.\r\n *\r\n * Behavior:\r\n * - In editor mode, builds the module to a data URL.\r\n * - Otherwise, returns `.js` URL directly:\r\n * - If `id` ends with `.js`: return as-is.\r\n * - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).\r\n * - Else: append `.js`.\r\n *\r\n * @param entryId - Entry module identifier (logical or path-like).\r\n * @returns A URL string that can be used in `import(...)`.\r\n */\r\n async resolveRuntimeUrl(entryId: string) {\r\n const id = await this.resolveLogicalId(entryId);\r\n if (id.startsWith('/assets/@builtins/')) {\r\n return await this.build(String(id));\r\n }\r\n return getApp().editorMode !== 'none'\r\n ? await this.build(String(id))\r\n : id.endsWith('.js')\r\n ? id\r\n : id.endsWith('.ts')\r\n ? `${id.slice(0, -3)}.js`\r\n : `${id}.js`;\r\n }\r\n\r\n /**\r\n * Recursively gathers direct static and dynamic import dependencies for a module.\r\n *\r\n * Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare\r\n * module specifiers are ignored here.\r\n *\r\n * @param entryId - The starting (possibly relative) specifier from `fromId`.\r\n * @param fromId - The logical id of the module containing `entryId`.\r\n * @param dependencies - Output map of `resolvedSourcePath -\\> file contents`.\r\n */\r\n async getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>) {\r\n const reStatic = /\\b(?:import|export)\\s+[^\"']*?from\\s+(['\"])([^'\"]+)\\1/g;\r\n const reDynamic = /\\bimport\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g;\r\n\r\n const normalizedId = await this.resolveLogicalId(entryId, fromId);\r\n const srcPath = await this.resolveSourcePath(normalizedId);\r\n if (!srcPath || dependencies[srcPath.path] !== undefined) {\r\n return;\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n dependencies[srcPath.path] = code;\r\n\r\n const gather = async (input: string, re: RegExp) => {\r\n for (;;) {\r\n const m = re.exec(input);\r\n if (!m) {\r\n break;\r\n }\r\n\r\n const spec = m[2];\r\n\r\n if (spec.startsWith('./') || spec.startsWith('../')) {\r\n await this.getDependencies(spec, normalizedId, dependencies);\r\n }\r\n }\r\n };\r\n\r\n await gather(code, reStatic);\r\n await gather(code, reDynamic);\r\n }\r\n\r\n /**\r\n * Builds a logical module id into a data URL (editor mode pipeline).\r\n *\r\n * Steps:\r\n * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.\r\n * - Read source code.\r\n * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.\r\n * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.\r\n * - Convert to `data:` URL and memoize in `_built`.\r\n *\r\n * @param id - Logical module id to build.\r\n * @returns Data URL string for dynamic import, or empty string if not found.\r\n */\r\n private async build(id: string) {\r\n const key = String(id);\r\n const cached = this._built.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const srcPath = await this.resolveSourcePath(key);\r\n if (!srcPath) {\r\n return '';\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n\r\n const rewritten = await this.rewriteImports(code, key);\r\n const js = await this.transpile(rewritten, key, srcPath.type);\r\n const url = toDataUrl(js, key);\r\n this._built.set(key, url);\r\n return url;\r\n }\r\n\r\n /**\r\n * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.\r\n *\r\n * Behavior:\r\n * - For `'js'`, returns code with `//# sourceURL=logicalId`.\r\n * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and\r\n * transpiles to ES2015/ESNext module with inline source maps.\r\n *\r\n * @param code - Source code to transpile.\r\n * @param _id - Logical module id (used for fileName/sourceURL).\r\n * @param type - Source type (`'js' | 'ts'`).\r\n * @returns Transpiled JavaScript source.\r\n * @throws If TypeScript runtime is not found for TS input.\r\n */\r\n private async transpile(code: string, _id: string, type: 'js' | 'ts') {\r\n const logicalId = String(_id);\r\n\r\n if (type === 'js') {\r\n return `${code}\\n//# sourceURL=${logicalId}`;\r\n }\r\n\r\n const ts = (window as any).ts as typeof TS;\r\n if (!ts) {\r\n throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');\r\n }\r\n\r\n const res = ts.transpileModule(code, {\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2015,\r\n module: ts.ModuleKind.ESNext,\r\n sourceMap: true,\r\n inlineSources: true,\r\n experimentalDecorators: true,\r\n useDefineForClassFields: false\r\n },\r\n fileName: logicalId\r\n });\r\n\r\n let out = res.outputText || '';\r\n if (res.sourceMapText) {\r\n const mapBase64 = btoa(unescape(encodeURIComponent(res.sourceMapText)));\r\n out += `\\n//# sourceMappingURL=data:application/json;base64,${mapBase64}`;\r\n }\r\n out += `\\n//# sourceURL=${logicalId}`;\r\n return out;\r\n }\r\n\r\n /**\r\n * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.\r\n *\r\n * Parsing:\r\n * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.\r\n *\r\n * Replacement rules:\r\n * - Skip invalid spans or ones without quoted specifiers.\r\n * - If spec is absolute URL, special URL (data:, blob:), or bare module:\r\n * - If it starts with `@zephyr3d/`, keep as-is (external).\r\n * - Otherwise resolve to a logical id and attempt to `build` it (if available).\r\n * - Else (relative spec), resolve from `fromId` and `build` recursively.\r\n *\r\n * Output:\r\n * - Directly writes the replacement specifier without re-adding quotes,\r\n * so replacements must themselves be quoted or be valid URLs/data URLs.\r\n *\r\n * @param code - Module source code to transform.\r\n * @param fromId - The logical id of the current module (resolution base for relatives).\r\n * @returns Transformed source with rewritten import specifiers.\r\n */\r\n private async rewriteImports(code: string, fromId: string) {\r\n await init;\r\n const [imports] = parse(code);\r\n const list = [...imports].sort((a, b) => (a.s || 0) - (b.s || 0));\r\n let out = '';\r\n let last = 0;\r\n\r\n for (const im of list) {\r\n // Skip import.meta entries reported by es-module-lexer.\r\n // Their \"specifier\" span points to the whole \"import.meta\" expression,\r\n // which must remain untouched.\r\n if (im.d === -2) {\r\n continue;\r\n }\r\n // must have quotes\r\n const hasQuote = im.ss != null && im.se != null;\r\n if (!hasQuote || im.se <= im.ss) {\r\n continue;\r\n }\r\n // must have contents\r\n if (im.e <= im.s) {\r\n continue;\r\n }\r\n // append [last, s)\r\n out += code.slice(last, im.s);\r\n\r\n const spec = code.slice(im.s, im.e); // original spec\r\n let replacement = spec;\r\n if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || isBareModule(spec)) {\r\n if (spec.startsWith('@zephyr3d/')) {\r\n replacement = spec;\r\n } else {\r\n const depId = await this.resolveLogicalId(spec);\r\n replacement = await this.build(depId); // try build as dependence\r\n }\r\n } else {\r\n const depId = await this.resolveLogicalId(spec, String(fromId));\r\n replacement = await this.build(depId); // recursively build as dataURL\r\n }\r\n out += replacement; // 不加引号\r\n last = im.e;\r\n }\r\n out += code.slice(last);\r\n return out;\r\n }\r\n\r\n /**\r\n * Resolves a specifier to a logical id suitable for further processing.\r\n *\r\n * Resolution rules:\r\n * - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.\r\n * - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).\r\n * - `/absolute`: treated as absolute from root (normalized).\r\n * - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,\r\n * map to the dependency's `entry` path; otherwise return as-is.\r\n * - Else (non-editor bare module): return `spec` unchanged (external).\r\n *\r\n * @param spec - Import specifier string.\r\n * @param fromId - Optional base logical id used for relative resolution.\r\n * @returns A normalized logical id or an external specifier string.\r\n * @throws If a relative import is provided without `fromId`.\r\n */\r\n async resolveLogicalId(spec: string, fromId?: string) {\r\n if (spec.startsWith('#/')) {\r\n return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));\r\n } else if (spec.startsWith('./') || spec.startsWith('../')) {\r\n if (!fromId) {\r\n throw new Error(`Relative import \"${spec}\" requires fromId`);\r\n }\r\n return this._vfs.normalizePath(\r\n this._vfs.join(this._vfs.dirname(this._vfs.normalizePath(fromId)), spec)\r\n );\r\n } else if (spec.startsWith('/')) {\r\n return spec.replace(/^\\/+/, '/');\r\n } else if (getApp().editorMode !== 'none') {\r\n const libRoot = '/';\r\n // naked module, checking if it is a installed module in editor mode\r\n let depsLockPath = this._vfs.normalizePath(this._vfs.join(libRoot, 'libs/deps.lock.json'));\r\n let depsExists = await this._vfs.exists(depsLockPath);\r\n if (depsExists) {\r\n const content = (await this._vfs.readFile(depsLockPath, { encoding: 'utf8' })) as string;\r\n const depsInfo = JSON.parse(content) as { dependencies: Record<string, { entry: string }> };\r\n if (depsInfo?.dependencies[spec]) {\r\n return this._vfs.normalizePath(this._vfs.join(libRoot, depsInfo.dependencies[spec].entry));\r\n }\r\n }\r\n }\r\n return spec;\r\n }\r\n\r\n /**\r\n * Resolves a logical id to a concrete source path and type by probing extensions.\r\n *\r\n * Rules:\r\n * - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.\r\n * - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.\r\n * - Maps `.mjs` to type `'js'`.\r\n *\r\n * @param logicalId - The normalized logical module id (path-like).\r\n * @returns `{ type, path }` or `null` if not found.\r\n */\r\n async resolveSourcePath(logicalId: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (logicalId.endsWith('.ts')) {\r\n pathWithExt = logicalId;\r\n type = 'ts';\r\n } else if (logicalId.endsWith('.js') || logicalId.endsWith('.mjs')) {\r\n pathWithExt = logicalId;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js', 'mjs'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${logicalId}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t === 'ts' ? 'ts' : 'js';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return type ? { type, path: pathWithExt } : null;\r\n }\r\n}\r\n"],"names":["toDataUrl","js","id","b64","textToBase64","encodeURIComponent","String","isAbsoluteUrl","spec","test","isSpecialUrl","isBareModule","startsWith","ScriptRegistry","_vfs","_scriptsRoot","_built","vfs","scriptsRoot","Map","VFS","clear","path","fetchSource","type","pathWithExt","endsWith","exists","stat","isDirectory","types","t","stats","isFile","code","readFile","encoding","resolveRuntimeUrl","entryId","resolveLogicalId","build","getApp","editorMode","slice","getDependencies","fromId","dependencies","reStatic","reDynamic","normalizedId","srcPath","resolveSourcePath","undefined","gather","input","re","m","exec","key","cached","get","rewritten","rewriteImports","transpile","url","set","_id","logicalId","ts","window","Error","res","transpileModule","compilerOptions","target","ScriptTarget","ES2015","module","ModuleKind","ESNext","sourceMap","inlineSources","experimentalDecorators","useDefineForClassFields","fileName","out","outputText","sourceMapText","mapBase64","btoa","unescape","init","imports","parse","list","sort","a","b","s","last","im","d","hasQuote","ss","se","e","replacement","depId","normalizePath","join","dirname","replace","libRoot","depsLockPath","depsExists","content","depsInfo","JSON","entry"],"mappings":";;;;AAMA;;;;;;;AAOC,IACD,SAASA,SAAAA,CAAUC,EAAU,EAAEC,EAAU,EAAA;AACvC,IAAA,MAAMC,MAAMC,YAAaH,CAAAA,EAAAA,CAAAA;IACzB,OAAO,CAAC,4BAA4B,EAAEE,GAAAA,CAAI,CAAC,EAAEE,kBAAAA,CAAmBC,OAAOJ,EAAM,CAAA,CAAA,CAAA,CAAA;AAC/E;AAEA;;;IAIA,SAASK,cAAcC,IAAY,EAAA;IACjC,OAAO,eAAA,CAAgBC,IAAI,CAACD,IAAAA,CAAAA;AAC9B;AAEA;;;IAIA,SAASE,aAAaF,IAAY,EAAA;IAChC,OAAO,gBAAA,CAAiBC,IAAI,CAACD,IAAAA,CAAAA;AAC/B;AAEA;;;IAIA,SAASG,aAAaH,IAAY,EAAA;AAChC,IAAA,OAAO,CAACA,IAAKI,CAAAA,UAAU,CAAC,IAAS,CAAA,IAAA,CAACJ,KAAKI,UAAU,CAAC,KAAU,CAAA,IAAA,CAACJ,KAAKI,UAAU,CAAC,QAAQ,CAACJ,IAAAA,CAAKI,UAAU,CAAC,IAAA,CAAA;AACxG;AAEA;;;;;;;;;;;;;;;;;AAiBC,IACM,MAAMC,cAAAA,CAAAA;IACHC,IAAU;IACVC,YAAqB;IACrBC,MAA4B;AAEpC;;;;AAIC,MACD,WAAYC,CAAAA,GAAQ,EAAEC,WAAmB,CAAE;QACzC,IAAI,CAACJ,IAAI,GAAGG,GAAAA;QACZ,IAAI,CAACF,YAAY,GAAGG,WAAAA;QACpB,IAAI,CAACF,MAAM,GAAG,IAAIG,GAAAA,EAAAA;AACpB;AAEA;;;;AAIC,MACD,IAAIC,GAAM,GAAA;QACR,OAAO,IAAI,CAACN,IAAI;AAClB;IACA,IAAIM,GAAAA,CAAIH,GAAQ,EAAE;AAChB,QAAA,IAAIA,GAAQ,KAAA,IAAI,CAACH,IAAI,EAAE;YACrB,IAAI,CAACA,IAAI,GAAGG,GAAAA;YACZ,IAAI,CAACD,MAAM,CAACK,KAAK,EAAA;AACnB;AACF;AAEA;;AAEC,MACD,IAAIH,WAAc,GAAA;QAChB,OAAO,IAAI,CAACH,YAAY;AAC1B;IACA,IAAIG,WAAAA,CAAYI,IAAY,EAAE;QAC5B,IAAI,CAACP,YAAY,GAAGO,IAAAA;AACtB;AAEA;;;;;;;;;MAUA,MAAgBC,WAAYrB,CAAAA,EAAU,EAAE;AACtC,QAAA,IAAIsB,IAA8B,GAAA,IAAA;AAClC,QAAA,IAAIC,WAAc,GAAA,EAAA;QAClB,IAAIvB,EAAAA,CAAGwB,QAAQ,CAAC,KAAQ,CAAA,EAAA;YACtBD,WAAcvB,GAAAA,EAAAA;YACdsB,IAAO,GAAA,IAAA;AACT,SAAA,MAAO,IAAItB,EAAAA,CAAGwB,QAAQ,CAAC,KAAQ,CAAA,EAAA;YAC7BD,WAAcvB,GAAAA,EAAAA;YACdsB,IAAO,GAAA,IAAA;AACT;AACA,QAAA,IAAIA,IAAM,EAAA;AACR,YAAA,MAAMG,SAAS,MAAM,IAAI,CAACb,IAAI,CAACa,MAAM,CAACF,WAAAA,CAAAA;AACtC,YAAA,IAAI,CAACE,MAAQ,EAAA;gBACXH,IAAO,GAAA,IAAA;AACT;AACA,YAAA,MAAMI,OAAO,MAAM,IAAI,CAACd,IAAI,CAACc,IAAI,CAACH,WAAAA,CAAAA;YAClC,IAAIG,IAAAA,CAAKC,WAAW,EAAE;gBACpBL,IAAO,GAAA,IAAA;AACT;AACF;AACA,QAAA,MAAMM,KAAQ,GAAA;AAAC,YAAA,IAAA;AAAM,YAAA;AAAK,SAAA;AAC1B,QAAA,IAAI,CAACN,IAAM,EAAA;YACT,KAAK,MAAMO,KAAKD,KAAO,CAAA;AACrBL,gBAAAA,WAAAA,GAAc,CAAGvB,EAAAA,EAAAA,CAAG,CAAC,EAAE6B,CAAG,CAAA,CAAA;AAC1B,gBAAA,MAAMJ,SAAS,MAAM,IAAI,CAACb,IAAI,CAACa,MAAM,CAACF,WAAAA,CAAAA;AACtC,gBAAA,IAAIE,MAAQ,EAAA;AACV,oBAAA,MAAMK,QAAQ,MAAM,IAAI,CAAClB,IAAI,CAACc,IAAI,CAACH,WAAAA,CAAAA;oBACnC,IAAIO,KAAAA,CAAMC,MAAM,EAAE;wBAChBT,IAAOO,GAAAA,CAAAA;AACP,wBAAA;AACF;AACF;AACF;AACF;AACA,QAAA,IAAIP,IAAM,EAAA;YACR,MAAMU,IAAAA,GAAQ,MAAM,IAAI,CAACpB,IAAI,CAACqB,QAAQ,CAACV,WAAa,EAAA;gBAAEW,QAAU,EAAA;AAAO,aAAA,CAAA;YACvE,OAAO;AAAEF,gBAAAA,IAAAA;AAAMV,gBAAAA,IAAAA;gBAAMF,IAAMG,EAAAA;AAAY,aAAA;AACzC;AACF;AAEA;;;;;;;;;;;;MAaA,MAAMY,iBAAkBC,CAAAA,OAAe,EAAE;AACvC,QAAA,MAAMpC,EAAK,GAAA,MAAM,IAAI,CAACqC,gBAAgB,CAACD,OAAAA,CAAAA;QACvC,IAAIpC,EAAAA,CAAGU,UAAU,CAAC,oBAAuB,CAAA,EAAA;AACvC,YAAA,OAAO,MAAM,IAAI,CAAC4B,KAAK,CAAClC,MAAOJ,CAAAA,EAAAA,CAAAA,CAAAA;AACjC;AACA,QAAA,OAAOuC,MAASC,EAAAA,CAAAA,UAAU,KAAK,MAAA,GAC3B,MAAM,IAAI,CAACF,KAAK,CAAClC,MAAOJ,CAAAA,EAAAA,CAAAA,CAAAA,GACxBA,EAAGwB,CAAAA,QAAQ,CAAC,KACVxB,CAAAA,GAAAA,EAAAA,GACAA,EAAGwB,CAAAA,QAAQ,CAAC,KAAA,CAAA,GACV,CAAGxB,EAAAA,EAAAA,CAAGyC,KAAK,CAAC,CAAA,EAAG,EAAC,CAAA,CAAG,GAAG,CAAC,GACvB,CAAGzC,EAAAA,EAAAA,CAAG,GAAG,CAAC;AACpB;AAEA;;;;;;;;;AASC,MACD,MAAM0C,eAAgBN,CAAAA,OAAe,EAAEO,MAAc,EAAEC,YAAoC,EAAE;AAC3F,QAAA,MAAMC,QAAW,GAAA,uDAAA;AACjB,QAAA,MAAMC,SAAY,GAAA,wCAAA;AAElB,QAAA,MAAMC,eAAe,MAAM,IAAI,CAACV,gBAAgB,CAACD,OAASO,EAAAA,MAAAA,CAAAA;AAC1D,QAAA,MAAMK,OAAU,GAAA,MAAM,IAAI,CAACC,iBAAiB,CAACF,YAAAA,CAAAA;QAC7C,IAAI,CAACC,WAAWJ,YAAY,CAACI,QAAQ5B,IAAI,CAAC,KAAK8B,SAAW,EAAA;AACxD,YAAA;AACF;QACA,MAAMlB,IAAAA,GAAQ,MAAM,IAAI,CAACpB,IAAI,CAACqB,QAAQ,CAACe,OAAQ5B,CAAAA,IAAI,EAAE;YAAEc,QAAU,EAAA;AAAO,SAAA,CAAA;AACxEU,QAAAA,YAAY,CAACI,OAAAA,CAAQ5B,IAAI,CAAC,GAAGY,IAAAA;QAE7B,MAAMmB,MAAAA,GAAS,OAAOC,KAAeC,EAAAA,EAAAA,GAAAA;YACnC,OAAS;gBACP,MAAMC,CAAAA,GAAID,EAAGE,CAAAA,IAAI,CAACH,KAAAA,CAAAA;AAClB,gBAAA,IAAI,CAACE,CAAG,EAAA;AACN,oBAAA;AACF;gBAEA,MAAMhD,IAAAA,GAAOgD,CAAC,CAAC,CAAE,CAAA;AAEjB,gBAAA,IAAIhD,KAAKI,UAAU,CAAC,SAASJ,IAAKI,CAAAA,UAAU,CAAC,KAAQ,CAAA,EAAA;AACnD,oBAAA,MAAM,IAAI,CAACgC,eAAe,CAACpC,MAAMyC,YAAcH,EAAAA,YAAAA,CAAAA;AACjD;AACF;AACF,SAAA;AAEA,QAAA,MAAMO,OAAOnB,IAAMa,EAAAA,QAAAA,CAAAA;AACnB,QAAA,MAAMM,OAAOnB,IAAMc,EAAAA,SAAAA,CAAAA;AACrB;AAEA;;;;;;;;;;;;MAaA,MAAcR,KAAMtC,CAAAA,EAAU,EAAE;AAC9B,QAAA,MAAMwD,MAAMpD,MAAOJ,CAAAA,EAAAA,CAAAA;AACnB,QAAA,MAAMyD,SAAS,IAAI,CAAC3C,MAAM,CAAC4C,GAAG,CAACF,GAAAA,CAAAA;AAC/B,QAAA,IAAIC,MAAQ,EAAA;YACV,OAAOA,MAAAA;AACT;AAEA,QAAA,MAAMT,OAAU,GAAA,MAAM,IAAI,CAACC,iBAAiB,CAACO,GAAAA,CAAAA;AAC7C,QAAA,IAAI,CAACR,OAAS,EAAA;YACZ,OAAO,EAAA;AACT;QACA,MAAMhB,IAAAA,GAAQ,MAAM,IAAI,CAACpB,IAAI,CAACqB,QAAQ,CAACe,OAAQ5B,CAAAA,IAAI,EAAE;YAAEc,QAAU,EAAA;AAAO,SAAA,CAAA;AAExE,QAAA,MAAMyB,YAAY,MAAM,IAAI,CAACC,cAAc,CAAC5B,IAAMwB,EAAAA,GAAAA,CAAAA;QAClD,MAAMzD,EAAAA,GAAK,MAAM,IAAI,CAAC8D,SAAS,CAACF,SAAAA,EAAWH,GAAKR,EAAAA,OAAAA,CAAQ1B,IAAI,CAAA;QAC5D,MAAMwC,GAAAA,GAAMhE,UAAUC,EAAIyD,EAAAA,GAAAA,CAAAA;AAC1B,QAAA,IAAI,CAAC1C,MAAM,CAACiD,GAAG,CAACP,GAAKM,EAAAA,GAAAA,CAAAA;QACrB,OAAOA,GAAAA;AACT;AAEA;;;;;;;;;;;;;AAaC,MACD,MAAcD,SAAU7B,CAAAA,IAAY,EAAEgC,GAAW,EAAE1C,IAAiB,EAAE;AACpE,QAAA,MAAM2C,YAAY7D,MAAO4D,CAAAA,GAAAA,CAAAA;AAEzB,QAAA,IAAI1C,SAAS,IAAM,EAAA;AACjB,YAAA,OAAO,CAAGU,EAAAA,IAAAA,CAAK,gBAAgB,EAAEiC,SAAW,CAAA,CAAA;AAC9C;QAEA,MAAMC,EAAAA,GAAK,MAACC,CAAeD,EAAE;AAC7B,QAAA,IAAI,CAACA,EAAI,EAAA;AACP,YAAA,MAAM,IAAIE,KAAM,CAAA,qEAAA,CAAA;AAClB;AAEA,QAAA,MAAMC,GAAMH,GAAAA,EAAAA,CAAGI,eAAe,CAACtC,IAAM,EAAA;YACnCuC,eAAiB,EAAA;gBACfC,MAAQN,EAAAA,EAAAA,CAAGO,YAAY,CAACC,MAAM;gBAC9BC,MAAQT,EAAAA,EAAAA,CAAGU,UAAU,CAACC,MAAM;gBAC5BC,SAAW,EAAA,IAAA;gBACXC,aAAe,EAAA,IAAA;gBACfC,sBAAwB,EAAA,IAAA;gBACxBC,uBAAyB,EAAA;AAC3B,aAAA;YACAC,QAAUjB,EAAAA;AACZ,SAAA,CAAA;QAEA,IAAIkB,GAAAA,GAAMd,GAAIe,CAAAA,UAAU,IAAI,EAAA;QAC5B,IAAIf,GAAAA,CAAIgB,aAAa,EAAE;AACrB,YAAA,MAAMC,SAAYC,GAAAA,IAAAA,CAAKC,QAASrF,CAAAA,kBAAAA,CAAmBkE,IAAIgB,aAAa,CAAA,CAAA,CAAA;YACpEF,GAAO,IAAA,CAAC,oDAAoD,EAAEG,SAAW,CAAA,CAAA;AAC3E;QACAH,GAAO,IAAA,CAAC,gBAAgB,EAAElB,SAAW,CAAA,CAAA;QACrC,OAAOkB,GAAAA;AACT;AAEA;;;;;;;;;;;;;;;;;;;;AAoBC,MACD,MAAcvB,cAAAA,CAAe5B,IAAY,EAAEW,MAAc,EAAE;QACzD,MAAM8C,IAAAA;QACN,MAAM,CAACC,OAAQ,CAAA,GAAGC,KAAM3D,CAAAA,IAAAA,CAAAA;AACxB,QAAA,MAAM4D,IAAO,GAAA;AAAIF,YAAAA,GAAAA;AAAQ,SAAA,CAACG,IAAI,CAAC,CAACC,CAAGC,EAAAA,CAAAA,GAAM,CAACD,CAAAA,CAAEE,CAAC,IAAI,CAAA,KAAMD,CAAEC,CAAAA,CAAC,IAAI,CAAA,CAAA,CAAA;AAC9D,QAAA,IAAIb,GAAM,GAAA,EAAA;AACV,QAAA,IAAIc,IAAO,GAAA,CAAA;QAEX,KAAK,MAAMC,MAAMN,IAAM,CAAA;;;;AAIrB,YAAA,IAAIM,EAAGC,CAAAA,CAAC,KAAK,EAAI,EAAA;AACf,gBAAA;AACF;;AAEA,YAAA,MAAMC,WAAWF,EAAGG,CAAAA,EAAE,IAAI,IAAQH,IAAAA,EAAAA,CAAGI,EAAE,IAAI,IAAA;AAC3C,YAAA,IAAI,CAACF,QAAYF,IAAAA,EAAAA,CAAGI,EAAE,IAAIJ,EAAAA,CAAGG,EAAE,EAAE;AAC/B,gBAAA;AACF;;AAEA,YAAA,IAAIH,EAAGK,CAAAA,CAAC,IAAIL,EAAAA,CAAGF,CAAC,EAAE;AAChB,gBAAA;AACF;;AAEAb,YAAAA,GAAAA,IAAOnD,IAAKS,CAAAA,KAAK,CAACwD,IAAAA,EAAMC,GAAGF,CAAC,CAAA;YAE5B,MAAM1F,IAAAA,GAAO0B,IAAKS,CAAAA,KAAK,CAACyD,EAAAA,CAAGF,CAAC,EAAEE,EAAAA,CAAGK,CAAC,CAAA,CAAA;AAClC,YAAA,IAAIC,WAAclG,GAAAA,IAAAA;AAClB,YAAA,IAAID,aAAcC,CAAAA,IAAAA,CAAAA,IAASE,YAAaF,CAAAA,IAAAA,CAAAA,IAASG,aAAaH,IAAO,CAAA,EAAA;gBACnE,IAAIA,IAAAA,CAAKI,UAAU,CAAC,YAAe,CAAA,EAAA;oBACjC8F,WAAclG,GAAAA,IAAAA;iBACT,MAAA;AACL,oBAAA,MAAMmG,KAAQ,GAAA,MAAM,IAAI,CAACpE,gBAAgB,CAAC/B,IAAAA,CAAAA;AAC1CkG,oBAAAA,WAAAA,GAAc,MAAM,IAAI,CAAClE,KAAK,CAACmE;AACjC;aACK,MAAA;AACL,gBAAA,MAAMA,QAAQ,MAAM,IAAI,CAACpE,gBAAgB,CAAC/B,MAAMF,MAAOuC,CAAAA,MAAAA,CAAAA,CAAAA;AACvD6D,gBAAAA,WAAAA,GAAc,MAAM,IAAI,CAAClE,KAAK,CAACmE;AACjC;AACAtB,YAAAA,GAAAA,IAAOqB;AACPP,YAAAA,IAAAA,GAAOC,GAAGK,CAAC;AACb;QACApB,GAAOnD,IAAAA,IAAAA,CAAKS,KAAK,CAACwD,IAAAA,CAAAA;QAClB,OAAOd,GAAAA;AACT;AAEA;;;;;;;;;;;;;;;AAeC,MACD,MAAM9C,gBAAAA,CAAiB/B,IAAY,EAAEqC,MAAe,EAAE;QACpD,IAAIrC,IAAAA,CAAKI,UAAU,CAAC,IAAO,CAAA,EAAA;AACzB,YAAA,OAAO,IAAI,CAACE,IAAI,CAAC8F,aAAa,CAAC,IAAI,CAAC9F,IAAI,CAAC+F,IAAI,CAAC,IAAI,CAAC9F,YAAY,EAAEP,IAAAA,CAAKmC,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA;SACvE,MAAA,IAAInC,KAAKI,UAAU,CAAC,SAASJ,IAAKI,CAAAA,UAAU,CAAC,KAAQ,CAAA,EAAA;AAC1D,YAAA,IAAI,CAACiC,MAAQ,EAAA;AACX,gBAAA,MAAM,IAAIyB,KAAM,CAAA,CAAC,iBAAiB,EAAE9D,IAAAA,CAAK,iBAAiB,CAAC,CAAA;AAC7D;YACA,OAAO,IAAI,CAACM,IAAI,CAAC8F,aAAa,CAC5B,IAAI,CAAC9F,IAAI,CAAC+F,IAAI,CAAC,IAAI,CAAC/F,IAAI,CAACgG,OAAO,CAAC,IAAI,CAAChG,IAAI,CAAC8F,aAAa,CAAC/D,MAAUrC,CAAAA,CAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAEvE,SAAA,MAAO,IAAIA,IAAAA,CAAKI,UAAU,CAAC,GAAM,CAAA,EAAA;YAC/B,OAAOJ,IAAAA,CAAKuG,OAAO,CAAC,MAAQ,EAAA,GAAA,CAAA;AAC9B,SAAA,MAAO,IAAItE,MAAAA,EAAAA,CAASC,UAAU,KAAK,MAAQ,EAAA;AACzC,YAAA,MAAMsE,OAAU,GAAA,GAAA;;AAEhB,YAAA,IAAIC,YAAe,GAAA,IAAI,CAACnG,IAAI,CAAC8F,aAAa,CAAC,IAAI,CAAC9F,IAAI,CAAC+F,IAAI,CAACG,OAAS,EAAA,qBAAA,CAAA,CAAA;AACnE,YAAA,IAAIE,aAAa,MAAM,IAAI,CAACpG,IAAI,CAACa,MAAM,CAACsF,YAAAA,CAAAA;AACxC,YAAA,IAAIC,UAAY,EAAA;gBACd,MAAMC,OAAAA,GAAW,MAAM,IAAI,CAACrG,IAAI,CAACqB,QAAQ,CAAC8E,YAAc,EAAA;oBAAE7E,QAAU,EAAA;AAAO,iBAAA,CAAA;gBAC3E,MAAMgF,QAAAA,GAAWC,IAAKxB,CAAAA,KAAK,CAACsB,OAAAA,CAAAA;AAC5B,gBAAA,IAAIC,QAAUtE,EAAAA,YAAY,CAACtC,IAAAA,CAAK,EAAE;AAChC,oBAAA,OAAO,IAAI,CAACM,IAAI,CAAC8F,aAAa,CAAC,IAAI,CAAC9F,IAAI,CAAC+F,IAAI,CAACG,OAASI,EAAAA,QAAAA,CAAStE,YAAY,CAACtC,IAAAA,CAAK,CAAC8G,KAAK,CAAA,CAAA;AAC1F;AACF;AACF;QACA,OAAO9G,IAAAA;AACT;AAEA;;;;;;;;;;MAWA,MAAM2C,iBAAkBgB,CAAAA,SAAiB,EAAE;AACzC,QAAA,IAAI3C,IAA8B,GAAA,IAAA;AAClC,QAAA,IAAIC,WAAc,GAAA,EAAA;QAClB,IAAI0C,SAAAA,CAAUzC,QAAQ,CAAC,KAAQ,CAAA,EAAA;YAC7BD,WAAc0C,GAAAA,SAAAA;YACd3C,IAAO,GAAA,IAAA;SACF,MAAA,IAAI2C,UAAUzC,QAAQ,CAAC,UAAUyC,SAAUzC,CAAAA,QAAQ,CAAC,MAAS,CAAA,EAAA;YAClED,WAAc0C,GAAAA,SAAAA;YACd3C,IAAO,GAAA,IAAA;AACT;AACA,QAAA,IAAIA,IAAM,EAAA;AACR,YAAA,MAAMG,SAAS,MAAM,IAAI,CAACb,IAAI,CAACa,MAAM,CAACF,WAAAA,CAAAA;AACtC,YAAA,IAAI,CAACE,MAAQ,EAAA;gBACXH,IAAO,GAAA,IAAA;AACT;AACA,YAAA,MAAMI,OAAO,MAAM,IAAI,CAACd,IAAI,CAACc,IAAI,CAACH,WAAAA,CAAAA;YAClC,IAAIG,IAAAA,CAAKC,WAAW,EAAE;gBACpBL,IAAO,GAAA,IAAA;AACT;AACF;AACA,QAAA,MAAMM,KAAQ,GAAA;AAAC,YAAA,IAAA;AAAM,YAAA,IAAA;AAAM,YAAA;AAAM,SAAA;AACjC,QAAA,IAAI,CAACN,IAAM,EAAA;YACT,KAAK,MAAMO,KAAKD,KAAO,CAAA;AACrBL,gBAAAA,WAAAA,GAAc,CAAG0C,EAAAA,SAAAA,CAAU,CAAC,EAAEpC,CAAG,CAAA,CAAA;AACjC,gBAAA,MAAMJ,SAAS,MAAM,IAAI,CAACb,IAAI,CAACa,MAAM,CAACF,WAAAA,CAAAA;AACtC,gBAAA,IAAIE,MAAQ,EAAA;AACV,oBAAA,MAAMK,QAAQ,MAAM,IAAI,CAAClB,IAAI,CAACc,IAAI,CAACH,WAAAA,CAAAA;oBACnC,IAAIO,KAAAA,CAAMC,MAAM,EAAE;wBAChBT,IAAOO,GAAAA,CAAAA,KAAM,OAAO,IAAO,GAAA,IAAA;AAC3B,wBAAA;AACF;AACF;AACF;AACF;AACA,QAAA,OAAOP,IAAO,GAAA;AAAEA,YAAAA,IAAAA;YAAMF,IAAMG,EAAAA;SAAgB,GAAA,IAAA;AAC9C;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"scriptregistry.js","sources":["../../src/app/scriptregistry.ts"],"sourcesContent":["import type * as TS from 'typescript';\r\nimport type { Nullable, VFS } from '@zephyr3d/base';\r\nimport { textToBase64 } from '@zephyr3d/base';\r\nimport { init, parse } from 'es-module-lexer';\r\nimport { getApp } from './api';\r\n\r\n/**\r\n * Converts JavaScript source to a data URL tied to a logical module id.\r\n *\r\n * @param js - The JavaScript source code to embed.\r\n * @param id - Logical module identifier (used only for sourceURL tagging).\r\n * @returns A `data:text/javascript;base64,...` URL with an encoded `#id` suffix.\r\n * @internal\r\n */\r\nfunction toDataUrl(js: string, id: string) {\r\n const b64 = textToBase64(js);\r\n return `data:text/javascript;base64,${b64}#${encodeURIComponent(String(id))}`;\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is an absolute HTTP(S) URL.\r\n * @internal\r\n */\r\nfunction isAbsoluteUrl(spec: string) {\r\n return /^https?:\\/\\//i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a special URL (data: or blob:).\r\n * @internal\r\n */\r\nfunction isSpecialUrl(spec: string) {\r\n return /^(data|blob):/i.test(spec);\r\n}\r\n\r\n/**\r\n * Checks whether a specifier is a bare module (not starting with ./, ../, /, or #/).\r\n * @internal\r\n */\r\nfunction isBareModule(spec: string) {\r\n return !spec.startsWith('./') && !spec.startsWith('../') && !spec.startsWith('/') && !spec.startsWith('#/');\r\n}\r\n\r\n/**\r\n * Resolves, builds, and serves runtime modules using a VFS.\r\n *\r\n * Responsibilities:\r\n * - Resolve logical module IDs to physical paths or URLs.\r\n * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.\r\n * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).\r\n * - Gather static and dynamic import dependencies for tooling.\r\n *\r\n * Modes:\r\n * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.\r\n * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\\> .js mapping).\r\n *\r\n * Caching:\r\n * - Built modules are memoized in `_built` map keyed by logical ID.\r\n *\r\n * @public\r\n */\r\nexport class ScriptRegistry {\r\n private _vfs: VFS;\r\n private _scriptsRoot: string;\r\n private _built: Map<string, string>; // logicalId -> dataURL\r\n\r\n /**\r\n * @param vfs - The virtual file system for existence checks, reads, and path ops.\r\n * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).\r\n * @param editorMode - Whether to build modules to data URLs and rewrite imports.\r\n */\r\n constructor(vfs: VFS, scriptsRoot: string) {\r\n this._vfs = vfs;\r\n this._scriptsRoot = scriptsRoot;\r\n this._built = new Map();\r\n }\r\n\r\n /**\r\n * The active virtual file system.\r\n *\r\n * Assigning a new VFS clears the build cache.\r\n */\r\n get VFS() {\r\n return this._vfs;\r\n }\r\n set VFS(vfs: VFS) {\r\n if (vfs !== this._vfs) {\r\n this._vfs = vfs;\r\n this._built.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The root path used by `#/` specifiers.\r\n */\r\n get scriptsRoot() {\r\n return this._scriptsRoot;\r\n }\r\n set scriptsRoot(path: string) {\r\n this._scriptsRoot = path;\r\n }\r\n\r\n /**\r\n * Invalidates cached built module output for one logical module id, or clears the full cache.\r\n *\r\n * Pass the same logical id shape that callers use with {@link ScriptRegistry.resolveRuntimeUrl},\r\n * for example `/assets/scripts/foo.ts`, `/assets/scripts/foo.js`, or `/assets/scripts/foo`.\r\n *\r\n * @param moduleId - Optional logical module id to invalidate. Omit to clear the entire build cache.\r\n */\r\n invalidate(moduleId?: string) {\r\n if (!moduleId) {\r\n this._built.clear();\r\n return;\r\n }\r\n const normalized = String(moduleId);\r\n this._built.delete(normalized);\r\n if (normalized.endsWith('.ts') || normalized.endsWith('.js')) {\r\n this._built.delete(normalized.slice(0, -3));\r\n } else {\r\n this._built.delete(`${normalized}.ts`);\r\n this._built.delete(`${normalized}.js`);\r\n }\r\n }\r\n\r\n /**\r\n * Fetches raw source for a logical module id by probing known extensions.\r\n *\r\n * Search order:\r\n * - If `id` already ends with `.ts` or `.js` and is a file -\\> return it.\r\n * - Else try `.id.ts`, then `.id.js`.\r\n *\r\n * @param id - Logical module identifier (absolute or logical path-like).\r\n * @returns Source code, resolved path, and type (`'js' | 'ts'`), or `undefined` if not found.\r\n */\r\n protected async fetchSource(id: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (id.endsWith('.ts')) {\r\n pathWithExt = id;\r\n type = 'ts';\r\n } else if (id.endsWith('.js')) {\r\n pathWithExt = id;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${id}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (type) {\r\n const code = (await this._vfs.readFile(pathWithExt, { encoding: 'utf8' })) as string;\r\n return { code, type, path: pathWithExt };\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a module entry to a URL suitable for dynamic import.\r\n *\r\n * Behavior:\r\n * - In editor mode, builds the module to a data URL.\r\n * - Otherwise, returns `.js` URL directly:\r\n * - If `id` ends with `.js`: return as-is.\r\n * - If `id` ends with `.ts`: map to `.js` (assumes pre-built file exists).\r\n * - Else: append `.js`.\r\n *\r\n * @param entryId - Entry module identifier (logical or path-like).\r\n * @returns A URL string that can be used in `import(...)`.\r\n */\r\n async resolveRuntimeUrl(entryId: string) {\r\n const id = await this.resolveLogicalId(entryId);\r\n if (id.startsWith('/assets/@builtins/')) {\r\n return await this.build(String(id));\r\n }\r\n return getApp().editorMode !== 'none'\r\n ? await this.build(String(id))\r\n : id.endsWith('.js')\r\n ? id\r\n : id.endsWith('.ts')\r\n ? `${id.slice(0, -3)}.js`\r\n : `${id}.js`;\r\n }\r\n\r\n /**\r\n * Recursively gathers direct static and dynamic import dependencies for a module.\r\n *\r\n * Only relative specifiers (`./` or `../`) are followed. Absolute, special, and bare\r\n * module specifiers are ignored here.\r\n *\r\n * @param entryId - The starting (possibly relative) specifier from `fromId`.\r\n * @param fromId - The logical id of the module containing `entryId`.\r\n * @param dependencies - Output map of `resolvedSourcePath -\\> file contents`.\r\n */\r\n async getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>) {\r\n const reStatic = /\\b(?:import|export)\\s+[^\"']*?from\\s+(['\"])([^'\"]+)\\1/g;\r\n const reDynamic = /\\bimport\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g;\r\n\r\n const normalizedId = await this.resolveLogicalId(entryId, fromId);\r\n const srcPath = await this.resolveSourcePath(normalizedId);\r\n if (!srcPath || dependencies[srcPath.path] !== undefined) {\r\n return;\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n dependencies[srcPath.path] = code;\r\n\r\n const gather = async (input: string, re: RegExp) => {\r\n for (;;) {\r\n const m = re.exec(input);\r\n if (!m) {\r\n break;\r\n }\r\n\r\n const spec = m[2];\r\n\r\n if (spec.startsWith('./') || spec.startsWith('../')) {\r\n await this.getDependencies(spec, normalizedId, dependencies);\r\n }\r\n }\r\n };\r\n\r\n await gather(code, reStatic);\r\n await gather(code, reDynamic);\r\n }\r\n\r\n /**\r\n * Builds a logical module id into a data URL (editor mode pipeline).\r\n *\r\n * Steps:\r\n * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.\r\n * - Read source code.\r\n * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.\r\n * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.\r\n * - Convert to `data:` URL and memoize in `_built`.\r\n *\r\n * @param id - Logical module id to build.\r\n * @returns Data URL string for dynamic import, or empty string if not found.\r\n */\r\n private async build(id: string) {\r\n const key = String(id);\r\n const cached = this._built.get(key);\r\n if (cached) {\r\n return cached;\r\n }\r\n\r\n const srcPath = await this.resolveSourcePath(key);\r\n if (!srcPath) {\r\n return '';\r\n }\r\n const code = (await this._vfs.readFile(srcPath.path, { encoding: 'utf8' })) as string;\r\n\r\n const rewritten = await this.rewriteImports(code, key);\r\n const js = await this.transpile(rewritten, key, srcPath.type);\r\n const url = toDataUrl(js, key);\r\n this._built.set(key, url);\r\n return url;\r\n }\r\n\r\n /**\r\n * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.\r\n *\r\n * Behavior:\r\n * - For `'js'`, returns code with `//# sourceURL=logicalId`.\r\n * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and\r\n * transpiles to ES2015/ESNext module with inline source maps.\r\n *\r\n * @param code - Source code to transpile.\r\n * @param _id - Logical module id (used for fileName/sourceURL).\r\n * @param type - Source type (`'js' | 'ts'`).\r\n * @returns Transpiled JavaScript source.\r\n * @throws If TypeScript runtime is not found for TS input.\r\n */\r\n private async transpile(code: string, _id: string, type: 'js' | 'ts') {\r\n const logicalId = String(_id);\r\n\r\n if (type === 'js') {\r\n return `${code}\\n//# sourceURL=${logicalId}`;\r\n }\r\n\r\n const ts = (window as any).ts as typeof TS;\r\n if (!ts) {\r\n throw new Error('TypeScript runtime (window.ts) not found. Load typescript.js first.');\r\n }\r\n\r\n const res = ts.transpileModule(code, {\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2015,\r\n module: ts.ModuleKind.ESNext,\r\n sourceMap: true,\r\n inlineSources: true,\r\n experimentalDecorators: true,\r\n useDefineForClassFields: false\r\n },\r\n fileName: logicalId\r\n });\r\n\r\n let out = res.outputText || '';\r\n if (res.sourceMapText) {\r\n const mapBase64 = btoa(unescape(encodeURIComponent(res.sourceMapText)));\r\n out += `\\n//# sourceMappingURL=data:application/json;base64,${mapBase64}`;\r\n }\r\n out += `\\n//# sourceURL=${logicalId}`;\r\n return out;\r\n }\r\n\r\n /**\r\n * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.\r\n *\r\n * Parsing:\r\n * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.\r\n *\r\n * Replacement rules:\r\n * - Skip invalid spans or ones without quoted specifiers.\r\n * - If spec is absolute URL, special URL (data:, blob:), or bare module:\r\n * - If it starts with `@zephyr3d/`, keep as-is (external).\r\n * - Otherwise resolve to a logical id and attempt to `build` it (if available).\r\n * - Else (relative spec), resolve from `fromId` and `build` recursively.\r\n *\r\n * Output:\r\n * - Directly writes the replacement specifier without re-adding quotes,\r\n * so replacements must themselves be quoted or be valid URLs/data URLs.\r\n *\r\n * @param code - Module source code to transform.\r\n * @param fromId - The logical id of the current module (resolution base for relatives).\r\n * @returns Transformed source with rewritten import specifiers.\r\n */\r\n private async rewriteImports(code: string, fromId: string) {\r\n await init;\r\n const [imports] = parse(code);\r\n const list = [...imports].sort((a, b) => (a.s || 0) - (b.s || 0));\r\n let out = '';\r\n let last = 0;\r\n\r\n for (const im of list) {\r\n // Skip import.meta entries reported by es-module-lexer.\r\n // Their \"specifier\" span points to the whole \"import.meta\" expression,\r\n // which must remain untouched.\r\n if (im.d === -2) {\r\n continue;\r\n }\r\n // must have quotes\r\n const hasQuote = im.ss != null && im.se != null;\r\n if (!hasQuote || im.se <= im.ss) {\r\n continue;\r\n }\r\n // must have contents\r\n if (im.e <= im.s) {\r\n continue;\r\n }\r\n // append [last, s)\r\n out += code.slice(last, im.s);\r\n\r\n const spec = code.slice(im.s, im.e); // original spec\r\n let replacement = spec;\r\n if (isAbsoluteUrl(spec) || isSpecialUrl(spec) || isBareModule(spec)) {\r\n if (spec.startsWith('@zephyr3d/')) {\r\n replacement = spec;\r\n } else {\r\n const depId = await this.resolveLogicalId(spec);\r\n replacement = await this.build(depId); // try build as dependence\r\n }\r\n } else {\r\n const depId = await this.resolveLogicalId(spec, String(fromId));\r\n replacement = await this.build(depId); // recursively build as dataURL\r\n }\r\n out += replacement; // Do not wrap in quotes\r\n last = im.e;\r\n }\r\n out += code.slice(last);\r\n return out;\r\n }\r\n\r\n /**\r\n * Resolves a specifier to a logical id suitable for further processing.\r\n *\r\n * Resolution rules:\r\n * - `#/path`: resolved against `scriptsRoot` via VFS join/normalize.\r\n * - `./` or `../`: resolved relative to `fromId` directory (requires `fromId`).\r\n * - `/absolute`: treated as absolute from root (normalized).\r\n * - Bare module in editor mode: if `/deps.lock.json` exists and contains an entry,\r\n * map to the dependency's `entry` path; otherwise return as-is.\r\n * - Else (non-editor bare module): return `spec` unchanged (external).\r\n *\r\n * @param spec - Import specifier string.\r\n * @param fromId - Optional base logical id used for relative resolution.\r\n * @returns A normalized logical id or an external specifier string.\r\n * @throws If a relative import is provided without `fromId`.\r\n */\r\n async resolveLogicalId(spec: string, fromId?: string) {\r\n if (spec.startsWith('#/')) {\r\n return this._vfs.normalizePath(this._vfs.join(this._scriptsRoot, spec.slice(2)));\r\n } else if (spec.startsWith('./') || spec.startsWith('../')) {\r\n if (!fromId) {\r\n throw new Error(`Relative import \"${spec}\" requires fromId`);\r\n }\r\n return this._vfs.normalizePath(\r\n this._vfs.join(this._vfs.dirname(this._vfs.normalizePath(fromId)), spec)\r\n );\r\n } else if (spec.startsWith('/')) {\r\n return spec.replace(/^\\/+/, '/');\r\n } else if (getApp().editorMode !== 'none') {\r\n const libRoot = '/';\r\n // naked module, checking if it is a installed module in editor mode\r\n let depsLockPath = this._vfs.normalizePath(this._vfs.join(libRoot, 'libs/deps.lock.json'));\r\n let depsExists = await this._vfs.exists(depsLockPath);\r\n if (depsExists) {\r\n const content = (await this._vfs.readFile(depsLockPath, { encoding: 'utf8' })) as string;\r\n const depsInfo = JSON.parse(content) as { dependencies: Record<string, { entry: string }> };\r\n if (depsInfo?.dependencies[spec]) {\r\n return this._vfs.normalizePath(this._vfs.join(libRoot, depsInfo.dependencies[spec].entry));\r\n }\r\n }\r\n }\r\n return spec;\r\n }\r\n\r\n /**\r\n * Resolves a logical id to a concrete source path and type by probing extensions.\r\n *\r\n * Rules:\r\n * - If `logicalId` ends with `.ts` or `.js`/`.mjs` and is a file, return it.\r\n * - Else probe `logicalId.ts`, `logicalId.js`, `logicalId.mjs` in that order.\r\n * - Maps `.mjs` to type `'js'`.\r\n *\r\n * @param logicalId - The normalized logical module id (path-like).\r\n * @returns `{ type, path }` or `null` if not found.\r\n */\r\n async resolveSourcePath(logicalId: string) {\r\n let type: Nullable<'js' | 'ts'> = null;\r\n let pathWithExt = '';\r\n if (logicalId.endsWith('.ts')) {\r\n pathWithExt = logicalId;\r\n type = 'ts';\r\n } else if (logicalId.endsWith('.js') || logicalId.endsWith('.mjs')) {\r\n pathWithExt = logicalId;\r\n type = 'js';\r\n }\r\n if (type) {\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (!exists) {\r\n type = null;\r\n }\r\n const stat = await this._vfs.stat(pathWithExt);\r\n if (stat.isDirectory) {\r\n type = null;\r\n }\r\n }\r\n const types = ['ts', 'js', 'mjs'] as const;\r\n if (!type) {\r\n for (const t of types) {\r\n pathWithExt = `${logicalId}.${t}`;\r\n const exists = await this._vfs.exists(pathWithExt);\r\n if (exists) {\r\n const stats = await this._vfs.stat(pathWithExt);\r\n if (stats.isFile) {\r\n type = t === 'ts' ? 'ts' : 'js';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return type ? { type, path: pathWithExt } : null;\r\n }\r\n}\r\n"],"names":["toDataUrl","js","id","b64","textToBase64","encodeURIComponent","String","isAbsoluteUrl","spec","test","isSpecialUrl","isBareModule","startsWith","ScriptRegistry","_vfs","_scriptsRoot","_built","vfs","scriptsRoot","Map","VFS","clear","path","invalidate","moduleId","normalized","delete","endsWith","slice","fetchSource","type","pathWithExt","exists","stat","isDirectory","types","t","stats","isFile","code","readFile","encoding","resolveRuntimeUrl","entryId","resolveLogicalId","build","getApp","editorMode","getDependencies","fromId","dependencies","reStatic","reDynamic","normalizedId","srcPath","resolveSourcePath","undefined","gather","input","re","m","exec","key","cached","get","rewritten","rewriteImports","transpile","url","set","_id","logicalId","ts","window","Error","res","transpileModule","compilerOptions","target","ScriptTarget","ES2015","module","ModuleKind","ESNext","sourceMap","inlineSources","experimentalDecorators","useDefineForClassFields","fileName","out","outputText","sourceMapText","mapBase64","btoa","unescape","init","imports","parse","list","sort","a","b","s","last","im","d","hasQuote","ss","se","e","replacement","depId","normalizePath","join","dirname","replace","libRoot","depsLockPath","depsExists","content","depsInfo","JSON","entry"],"mappings":"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"}
|
|
@@ -609,7 +609,7 @@ import '../shaders/atmosphere.js';
|
|
|
609
609
|
const u = q.shift();
|
|
610
610
|
const ins = gs.incoming[u] || [];
|
|
611
611
|
for (const conn of ins){
|
|
612
|
-
const v = conn.targetNodeId; //
|
|
612
|
+
const v = conn.targetNodeId; // predecessor
|
|
613
613
|
if (!reachable.has(v)) {
|
|
614
614
|
reachable.add(v);
|
|
615
615
|
q.push(v);
|
|
@@ -649,7 +649,7 @@ import '../shaders/atmosphere.js';
|
|
|
649
649
|
for (const u of currentLevel){
|
|
650
650
|
const ins = gs.incoming[u] || [];
|
|
651
651
|
for (const conn of ins){
|
|
652
|
-
const v = conn.targetNodeId; //
|
|
652
|
+
const v = conn.targetNodeId; // predecessor
|
|
653
653
|
if (!sub.has(v)) {
|
|
654
654
|
continue;
|
|
655
655
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetmanager.js","sources":["../../src/asset/assetmanager.ts"],"sourcesContent":["import type { DecoderModule } from 'draco3d';\r\nimport type { HttpRequest, Nullable, ReadOptions, TypedArray, VFS, WriteOptions } from '@zephyr3d/base';\r\nimport {\r\n isPowerOf2,\r\n nextPowerOf2,\r\n DWeakRef,\r\n DRef,\r\n base64ToUint8Array,\r\n Vector3,\r\n ASSERT,\r\n VFSError,\r\n Vector4\r\n} from '@zephyr3d/base';\r\nimport type { SharedModel } from './model';\r\nimport { GLTFLoader } from './loaders/gltf/gltf_loader';\r\nimport { WebImageLoader } from './loaders/image/webimage_loader';\r\nimport { DDSLoader } from './loaders/dds/dds_loader';\r\nimport { HDRLoader } from './loaders/hdr/hdr';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport { CopyBlitter } from '../blitter';\r\nimport { getSheenLutLoader } from './builtin';\r\nimport { BUILTIN_ASSET_TEXTURE_SHEEN_LUT } from '../values';\r\nimport type { AnimationSet } from '../animation/animationset';\r\nimport type {\r\n BaseTexture,\r\n PrimitiveType,\r\n SamplerOptions,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n VertexAttribFormat,\r\n VertexSemantic\r\n} from '@zephyr3d/device';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { AbstractTextureLoader, AbstractModelLoader } from './loaders/loader';\r\nimport { TGALoader } from './loaders/image/tga_Loader';\r\nimport { getDevice, getEngine } from '../app/api';\r\nimport { Material, PBRBluePrintMaterial, SpriteBlueprintMaterial } from '../material';\r\nimport type {\r\n BluePrintEditorState,\r\n BluePrintUniformTexture,\r\n BluePrintUniformValue,\r\n GraphStructure,\r\n IGraphNode,\r\n NodeConnection,\r\n ResourceManager\r\n} from '../utility';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { MaterialBlueprintIR } from '../utility/blueprint/material/ir';\r\nimport type { Skeleton } from '../animation';\r\nimport { Primitive } from '../render';\r\n\r\n/**\r\n * Options for texture fetching.\r\n *\r\n * Controls how a texture is loaded, converted, and optionally uploaded into an existing texture object.\r\n *\r\n * @typeParam T - Texture type to be returned, extending BaseTexture.\r\n * @public\r\n */\r\nexport type TextureFetchOptions<T extends BaseTexture> = {\r\n /**\r\n * Explicit MIME type hint. If omitted, the type is inferred from file extension via VFS.\r\n */\r\n mimeType?: string;\r\n /**\r\n * If true, load the image as linear data. If false or omitted, load as sRGB (when supported).\r\n *\r\n * Note: For WebGL targets, non-power-of-two or sRGB textures may be repacked based on constraints.\r\n */\r\n linearColorSpace?: boolean;\r\n /**\r\n * Optional target texture to upload into. If provided, loader data will be copied/blitted\r\n * into this texture instead of creating a new one.\r\n */\r\n texture?: T;\r\n /**\r\n * Optional sampler options for the loaded texture. May be used by loaders for mip generation\r\n * or by blit paths when repacking textures on constrained backends.\r\n */\r\n samplerOptions?: SamplerOptions;\r\n};\r\n\r\n/**\r\n * Options for model fetching.\r\n *\r\n * Provides decoding and instancing hints used by supported model loaders.\r\n * @public\r\n */\r\nexport type ModelFetchOptions = {\r\n /**\r\n * Explicit MIME type hint for the model. If omitted, inferred from file extension via VFS.\r\n */\r\n mimeType?: string;\r\n /**\r\n * Optional Draco decoder module for compressed geometry decoding.\r\n */\r\n dracoDecoderModule?: DecoderModule;\r\n /**\r\n * If true, the created scene node may be prepared for instanced rendering (engine-dependent).\r\n * Default is false.\r\n */\r\n enableInstancing?: boolean;\r\n /**\r\n * Optional post-process callback applied to the loaded SharedModel before creating nodes.\r\n * Use this to remap materials, merge meshes, or apply custom data transforms.\r\n */\r\n postProcess?: (model: SharedModel) => SharedModel;\r\n};\r\n\r\n/**\r\n * Data structure returned by AssetManager.fetchModel().\r\n *\r\n * Bundles the created scene node group and an optional animation set if present in the asset.\r\n * @public\r\n */\r\nexport type ModelInfo = {\r\n /**\r\n * The root scene node of the loaded model (may contain child hierarchy).\r\n */\r\n group: SceneNode;\r\n /**\r\n * The animation set associated with the model or null if none.\r\n */\r\n animationSet: AnimationSet;\r\n};\r\n\r\n/**\r\n * Centralized asset manager for loading and caching resources.\r\n *\r\n * Responsibilities:\r\n * - Abstracts resource loading via VFS (text/json/binary).\r\n * - Dispatches texture/model loading to registered loaders by MIME type.\r\n * - Caches results and uses weak references to allow GPU resources to be GC'd when unused.\r\n * - Harmonizes cross-backend constraints (e.g., WebGL non-power-of-two rules and sRGB handling).\r\n * - Provides access to built-in textures with device-restore handlers.\r\n *\r\n * Threading/async model:\r\n * - All I/O is async; repeated calls are coalesced via internal promise caches keyed by URL or hash.\r\n *\r\n * @public\r\n */\r\nexport class AssetManager {\r\n /** @internal */\r\n private static _builtinTextures: {\r\n [name: string]: BaseTexture;\r\n } = {};\r\n /** @internal */\r\n private static _builtinTextureLoaders: {\r\n [name: string]: (assetManager: AssetManager, texture?: BaseTexture) => BaseTexture;\r\n } = {\r\n [BUILTIN_ASSET_TEXTURE_SHEEN_LUT]: getSheenLutLoader(64)\r\n };\r\n /** @internal */\r\n private static readonly _textureLoaders: AbstractTextureLoader[] = [\r\n new WebImageLoader(),\r\n new DDSLoader(),\r\n new HDRLoader(),\r\n new TGALoader()\r\n ];\r\n /** @internal */\r\n private static readonly _modelLoaders: AbstractModelLoader[] = [new GLTFLoader()];\r\n /** @internal */\r\n private _textures: {\r\n [hash: string]: Promise<BaseTexture> | DWeakRef<BaseTexture>;\r\n };\r\n /** @internal */\r\n private _models: {\r\n [url: string]: Promise<SharedModel> | DWeakRef<SharedModel>;\r\n };\r\n /** @internal */\r\n private _binaryDatas: {\r\n [url: string]: Promise<Nullable<ArrayBuffer>>;\r\n };\r\n /** @internal */\r\n private _textDatas: {\r\n [url: string]: Promise<string>;\r\n };\r\n /** @internal */\r\n private _bluePrints: {\r\n [url: string]: Promise<Nullable<Record<string, MaterialBlueprintIR>>>;\r\n };\r\n /** @internal */\r\n private _materials: {\r\n [url: string]: Promise<Nullable<Material>> | DWeakRef<Material>;\r\n };\r\n /** @internal */\r\n private _primitives: {\r\n [url: string]: Promise<Nullable<Primitive>> | DWeakRef<Primitive>;\r\n };\r\n /** @internal */\r\n private _skeletons: {\r\n [url: string]: Promise<Skeleton> | DWeakRef<Skeleton>;\r\n };\r\n /** @internal */\r\n private _jsonDatas: {\r\n [url: string]: Promise<any>;\r\n };\r\n /** @internal */\r\n private readonly _resourceManager: ResourceManager;\r\n /**\r\n * Creates an instance of AssetManager\r\n */\r\n constructor(resourceManager?: ResourceManager) {\r\n this._resourceManager = resourceManager ?? getEngine().resourceManager;\r\n this._textures = {};\r\n this._models = {};\r\n this._materials = {};\r\n this._primitives = {};\r\n this._skeletons = {};\r\n this._bluePrints = {};\r\n this._binaryDatas = {};\r\n this._textDatas = {};\r\n this._jsonDatas = {};\r\n }\r\n /**\r\n * VFS used to read resources (files, URLs, virtual mounts).\r\n */\r\n get vfs() {\r\n return this._resourceManager.VFS;\r\n }\r\n /**\r\n * Clear cached references and promises.\r\n *\r\n * - Disposes any DWeakRef holders maintained by this manager.\r\n * - Empties internal maps for textures, models, and raw data (text/json/binary).\r\n * - Does not forcibly dispose GPU resources; it only clears references so they can be GC'd\r\n * if no other owners are holding them.\r\n */\r\n clearCache() {\r\n for (const k in Object.keys(this._textures)) {\r\n const v = this._textures[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._textures = {};\r\n for (const k in Object.keys(this._models)) {\r\n const v = this._models[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._models = {};\r\n for (const k in Object.keys(this._materials)) {\r\n const v = this._materials[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._materials = {};\r\n for (const k in Object.keys(this._primitives)) {\r\n const v = this._primitives[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._primitives = {};\r\n for (const k in Object.keys(this._skeletons)) {\r\n const v = this._skeletons[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._skeletons = {};\r\n this._binaryDatas = {};\r\n this._textDatas = {};\r\n this._jsonDatas = {};\r\n }\r\n /**\r\n * Register a texture loader (highest priority first).\r\n *\r\n * Note: This is a static registry shared by all AssetManager instances.\r\n *\r\n * @param loader - A concrete texture loader implementation.\r\n */\r\n static addTextureLoader(loader: AbstractTextureLoader) {\r\n if (loader) {\r\n this._textureLoaders.unshift(loader);\r\n }\r\n }\r\n /**\r\n * Register a model loader (highest priority first).\r\n *\r\n * Note: This is a static registry shared by all AssetManager instances.\r\n *\r\n * @param loader - A concrete model loader implementation.\r\n */\r\n static addModelLoader(loader: AbstractModelLoader) {\r\n if (loader) {\r\n this._modelLoaders.unshift(loader);\r\n }\r\n }\r\n /**\r\n * Fetch a UTF-8 text resource via VFS.\r\n *\r\n * - Results are cached per resolved URL (via HttpRequest.urlResolver if provided; otherwise the raw URL).\r\n * - If cached, any provided postProcess is ignored for subsequent calls; create a separate AssetManager\r\n * if you need different post-processing of the same URL.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the loaded text.\r\n * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.\r\n * @returns A promise that resolves to the loaded (and optionally processed) text.\r\n */\r\n async fetchTextData(\r\n url: string,\r\n postProcess?: (text: string) => string,\r\n httpRequest?: HttpRequest,\r\n VFSs?: VFS[]\r\n ) {\r\n const hash = httpRequest?.urlResolver?.(url) ?? url;\r\n let P = this._textDatas[hash];\r\n if (!P) {\r\n P = this.loadTextData(url, postProcess, VFSs);\r\n this._textDatas[hash] = P;\r\n }\r\n return P;\r\n }\r\n /**\r\n * Fetch a JSON resource via VFS.\r\n *\r\n * - Parses as JSON after text load.\r\n * - Cached per resolved URL. Post-process is applied only on the first load for a given cache key.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the parsed JSON object.\r\n * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.\r\n * @returns A promise that resolves to the loaded (and optionally processed) JSON value.\r\n */\r\n async fetchJsonData<T = any>(\r\n url: string,\r\n postProcess?: (json: T) => T,\r\n httpRequest?: HttpRequest,\r\n VFSs?: VFS[]\r\n ): Promise<T> {\r\n const hash = httpRequest?.urlResolver?.(url) ?? url;\r\n let P = this._jsonDatas[hash] as Promise<T>;\r\n if (!P) {\r\n P = this.loadJsonData<T>(url, postProcess, VFSs);\r\n this._jsonDatas[hash] = P;\r\n }\r\n return P;\r\n }\r\n /**\r\n * Fetch a binary resource via VFS.\r\n *\r\n * - Cached per resolved URL. Post-process is applied only on first load for a given key.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the loaded ArrayBuffer.\r\n * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.\r\n * @returns A promise that resolves to the loaded (and optionally processed) ArrayBuffer.\r\n */\r\n async fetchBinaryData(\r\n url: string,\r\n postProcess?: Nullable<(data: ArrayBuffer) => ArrayBuffer>,\r\n httpRequest?: Nullable<HttpRequest>,\r\n VFSs?: VFS[]\r\n ) {\r\n const hash = httpRequest?.urlResolver?.(url) ?? url;\r\n let P = this._binaryDatas[hash];\r\n if (!P) {\r\n P = this.loadBinaryData(url, postProcess, VFSs);\r\n this._binaryDatas[hash] = P;\r\n }\r\n return P;\r\n }\r\n async fetchBluePrint(url: string, VFSs?: VFS[]) {\r\n const hash = url;\r\n let P = this._bluePrints[hash];\r\n if (!P) {\r\n P = this.loadBluePrint(url, VFSs);\r\n this._bluePrints[hash] = P;\r\n }\r\n return P;\r\n }\r\n /**\r\n * Fetch a material resource.\r\n *\r\n * @typeParam T - Expected concrete material type.\r\n * @param url - Resource URL or VFS path.\r\n * @returns A promise that resolves to the loaded material.\r\n */\r\n async fetchMaterial<T extends Material = Material>(url: string, VFSs?: VFS[]): Promise<Nullable<T>> {\r\n const hash = url;\r\n let P = this._materials[hash] as Promise<Nullable<T>> | DWeakRef<T>;\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadMaterial<T>(url, false, VFSs);\r\n this._materials[hash] = P;\r\n }\r\n const material = await P;\r\n if (this._materials[hash] instanceof Promise) {\r\n this._materials[hash] = new DWeakRef<Material>(material);\r\n }\r\n return material;\r\n }\r\n /**\r\n * Fetch a primitive resource.\r\n *\r\n * @typeParam T - Expected concrete primitive type.\r\n * @param url - Resource URL or VFS path.\r\n * @returns A promise that resolves to the loaded primitive.\r\n */\r\n async fetchPrimitive<T extends Primitive = Primitive>(url: string, VFSs?: VFS[]): Promise<Nullable<T>> {\r\n const hash = url;\r\n let P = this._primitives[hash] as Promise<Nullable<T>> | DWeakRef<T>;\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadPrimitive<T>(url, VFSs);\r\n this._primitives[hash] = P;\r\n }\r\n const primitive = await P;\r\n if (this._primitives[hash] instanceof Promise) {\r\n this._primitives[hash] = new DWeakRef<Primitive>(primitive);\r\n }\r\n return primitive;\r\n }\r\n /**\r\n * Fetch a texture resource via registered loaders.\r\n *\r\n * - Chooses loader by explicit MIME type or by VFS file extension inference.\r\n * - Deduplicates in-flight requests and caches ready textures.\r\n * - If `options.texture` is provided, the asset will be uploaded/blitted into that texture.\r\n * - On WebGL backends, enforces constraints by repacking non-power-of-two or sRGB textures.\r\n *\r\n * @typeParam T - Expected concrete texture type.\r\n * @param url - Resource URL or VFS path.\r\n * @param options - Texture fetching options (color space, sampler, target texture).\r\n * @param httpRequest - Optional HttpRequest (not used for binary read but may supply URL resolver for hashing).\r\n * @returns A promise that resolves to the loaded texture.\r\n */\r\n async fetchTexture<T extends BaseTexture>(\r\n url: string,\r\n options?: TextureFetchOptions<T>,\r\n VFSs?: VFS[]\r\n ): Promise<T> {\r\n if (options?.texture) {\r\n return this.loadTexture(\r\n url,\r\n options.mimeType ?? null,\r\n !options.linearColorSpace,\r\n options.samplerOptions,\r\n options.texture,\r\n VFSs\r\n ) as Promise<T>;\r\n } else {\r\n const hash = this.getHash('2d', url, options);\r\n let P = this._textures[hash] as Promise<T> | DWeakRef<T>;\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadTexture(\r\n url,\r\n options?.mimeType ?? null,\r\n !options?.linearColorSpace,\r\n options?.samplerOptions,\r\n null,\r\n VFSs\r\n ) as Promise<T>;\r\n this._textures[hash] = P;\r\n }\r\n const tex: T = await P;\r\n if (this._textures[hash] instanceof Promise) {\r\n this._textures[hash] = new DWeakRef<T>(tex);\r\n }\r\n return tex;\r\n }\r\n }\r\n /**\r\n * Fetch a model resource via registered model loaders (data only).\r\n *\r\n * - Returns a SharedModel which can create scene nodes in any Scene.\r\n * - Uses DWeakRef to cache and allow model data to be reclaimed if unused.\r\n *\r\n * @param url - Model URL or VFS path.\r\n * @param options - Model loader options (MIME override, Draco, instancing hint, post-process).\r\n * @returns A promise that resolves to the SharedModel.\r\n * @internal\r\n */\r\n async fetchModelData(url: string, options?: ModelFetchOptions, VFSs?: VFS[]) {\r\n const hash = url;\r\n let P = this._models[hash];\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadModel(url, options, VFSs);\r\n this._models[hash] = P;\r\n }\r\n const sharedModel = await P;\r\n if (this._models[hash] instanceof Promise) {\r\n this._models[hash] = new DWeakRef<SharedModel>(sharedModel);\r\n }\r\n return sharedModel;\r\n }\r\n /**\r\n * Fetch a model resource and instantiate it under a scene.\r\n *\r\n * - Loads or retrieves a cached SharedModel, then creates a SceneNode hierarchy.\r\n * - Returns both the created group node and any associated AnimationSet.\r\n *\r\n * @param scene - Scene into which the model node will be created.\r\n * @param url - Model URL or VFS path.\r\n * @param options - Model loader options and instancing hint.\r\n * @param httpRequest - Optional HttpRequest (unused for binary read; present for API symmetry).\r\n * @returns A promise with the created node group and animation set info.\r\n */\r\n async fetchModel(scene: Scene, url: string, options?: ModelFetchOptions, VFSs?: VFS[]) {\r\n const sharedModel = await this.fetchModelData(url, options, VFSs);\r\n const node = sharedModel.createSceneNode(scene, !!options?.enableInstancing);\r\n return { group: node, animationSet: node.animationSet };\r\n }\r\n /**\r\n * Load a text resource via VFS and optionally post-process it.\r\n *\r\n * - Does not use or modify the internal cache; use fetchTextData for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the text.\r\n * @returns A promise that resolves to the loaded (and optionally processed) text.\r\n * @internal\r\n */\r\n async loadTextData(url: string, postProcess?: (text: string) => string, VFSs?: VFS[]) {\r\n let text = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n if (postProcess) {\r\n try {\r\n text = postProcess(text);\r\n } catch (err) {\r\n throw new Error(`Load text data post process failed: ${err}`);\r\n }\r\n }\r\n return text;\r\n }\r\n /**\r\n * Load a JSON resource via VFS and optionally post-process it.\r\n *\r\n * - Does not use or modify the internal cache; use fetchJsonData for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the parsed JSON.\r\n * @returns A promise that resolves to the loaded (and optionally processed) JSON.\r\n * @internal\r\n */\r\n async loadJsonData<T = unknown>(url: string, postProcess?: (json: any) => any, VFSs?: VFS[]): Promise<T> {\r\n let json = JSON.parse((await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string) as T;\r\n\r\n if (postProcess) {\r\n try {\r\n json = postProcess(json);\r\n } catch (err) {\r\n throw new Error(`Load json data post process failed: ${err}`);\r\n }\r\n }\r\n return json;\r\n }\r\n /**\r\n * Load a binary resource via VFS and optionally post-process it.\r\n *\r\n * - Does not use or modify the internal cache; use fetchBinaryData for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the ArrayBuffer.\r\n * @returns A promise that resolves to the loaded (and optionally processed) ArrayBuffer.\r\n * @internal\r\n */\r\n async loadBinaryData(\r\n url: string,\r\n postProcess?: Nullable<(data: ArrayBuffer) => ArrayBuffer>,\r\n VFSs?: VFS[]\r\n ) {\r\n try {\r\n let data = (await this.readFileFromVFSs(url, { encoding: 'binary' }, VFSs)) as ArrayBuffer;\r\n if (postProcess) {\r\n data = postProcess(data);\r\n }\r\n return data;\r\n } catch (err) {\r\n console.error(`Load binary data failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n async loadPrimitive<T extends Primitive = Primitive>(url: string, VFSs?: VFS[]): Promise<Nullable<T>> {\r\n try {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n const content = JSON.parse(data) as { type: string; data: any };\r\n ASSERT(\r\n content.type === 'Primitive' || content.type === 'Default',\r\n `Unsupported primitive type: ${content.type}`\r\n );\r\n if (content.type === 'Primitive') {\r\n const data = content.data as {\r\n vertices: Record<VertexSemantic, { format: VertexAttribFormat; data: string }>;\r\n indices: string;\r\n indexType: 'u16' | 'u32';\r\n indexCount: number;\r\n type: PrimitiveType;\r\n boxMin: number[];\r\n boxMax: number[];\r\n };\r\n const primitive = new Primitive();\r\n for (const k in data.vertices) {\r\n const v = data.vertices[k as VertexSemantic];\r\n const vertexData = base64ToUint8Array(v.data);\r\n primitive.createAndSetVertexBuffer(v.format, vertexData);\r\n }\r\n if (data.indices) {\r\n const indexData = base64ToUint8Array(data.indices);\r\n const indices =\r\n data.indexType === 'u16'\r\n ? new Uint16Array(indexData.buffer)\r\n : data.indexType === 'u32'\r\n ? new Uint32Array(indexData.buffer)\r\n : null;\r\n if (!indices) {\r\n console.error(`Invalid index type in primitive data: ${data.indexType}`);\r\n return null;\r\n }\r\n primitive.createAndSetIndexBuffer(indices);\r\n }\r\n primitive.primitiveType = data.type;\r\n primitive.indexCount = data.indexCount;\r\n primitive.setBoundingVolume(\r\n new BoundingBox(\r\n new Vector3(data.boxMin[0], data.boxMin[1], data.boxMin[2]),\r\n new Vector3(data.boxMax[0], data.boxMax[1], data.boxMax[2])\r\n )\r\n );\r\n return primitive as T;\r\n } else {\r\n const obj = await this._resourceManager.deserializeObject<T>(null, content.data);\r\n if (!(obj instanceof Primitive)) {\r\n if (typeof (obj as any).dispose === 'function') {\r\n (obj as any).dispose();\r\n }\r\n return null;\r\n }\r\n return obj;\r\n }\r\n } catch (err) {\r\n console.error(`Load primitive failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n async reloadBluePrintMaterials(filter?: (m: PBRBluePrintMaterial) => boolean) {\r\n const promises: Promise<Nullable<Material>>[] = [];\r\n const paths: string[] = [];\r\n for (const k of Object.keys(this._materials)) {\r\n const m = this._materials[k];\r\n if (m instanceof Promise) {\r\n promises.push(m);\r\n paths.push(k);\r\n } else if (m instanceof DWeakRef && !!m.get()) {\r\n promises.push(Promise.resolve(m.get()!));\r\n paths.push(k);\r\n }\r\n }\r\n const materials = await Promise.all(promises);\r\n for (let i = 0; i < materials.length; i++) {\r\n const m = materials[i];\r\n if (m instanceof PBRBluePrintMaterial && (!filter || filter(m))) {\r\n const data = await this.loadBluePrintMaterialData(paths[i], true);\r\n if (data) {\r\n m.fragmentIR = data.irFragment!;\r\n m.vertexIR = data.irVertex!;\r\n m.uniformValues = data.uniformValues;\r\n m.uniformTextures = data.uniformTextures;\r\n }\r\n }\r\n }\r\n }\r\n private async loadBluePrintMaterialData(\r\n url:\r\n | string\r\n | { IR: string; uniformValues: BluePrintUniformValue[]; uniformTextures: BluePrintUniformTexture[] },\r\n reload: boolean,\r\n VFSs?: VFS[]\r\n ) {\r\n try {\r\n let irData: {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n };\r\n if (typeof url === 'string') {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n const content = JSON.parse(data) as { type: string; data: any };\r\n ASSERT(\r\n content.type === 'PBRBluePrintMaterial' || content.type === 'SpriteBluePrintMaterial',\r\n `Unsupported material type: ${content.type}`\r\n );\r\n irData = content.data as {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n };\r\n } else {\r\n irData = url;\r\n }\r\n const ir = reload\r\n ? await this.loadBluePrint(irData.IR, VFSs)\r\n : await this.fetchBluePrint(irData.IR, VFSs);\r\n const uniformValues: BluePrintUniformValue[] = irData.uniformValues.map((v) => ({\r\n ...v,\r\n finalValue: v.value.length === 1 ? v.value[0] : new Float32Array(v.value)\r\n }));\r\n const uniformTextures: BluePrintUniformTexture[] = [];\r\n const textures = irData.uniformTextures;\r\n for (const v of textures) {\r\n const tex = await this.fetchTexture(\r\n v.texture,\r\n {\r\n linearColorSpace: !v.sRGB\r\n },\r\n VFSs\r\n );\r\n uniformTextures.push({\r\n ...v,\r\n finalTexture: new DRef(tex),\r\n finalSampler: getDevice().createSampler({\r\n addressU: v.wrapS as TextureAddressMode,\r\n addressV: v.wrapT as TextureAddressMode,\r\n minFilter: v.minFilter as TextureFilterMode,\r\n magFilter: v.magFilter as TextureFilterMode,\r\n mipFilter: v.mipFilter as TextureFilterMode\r\n }),\r\n params: tex ? new Vector4(tex.width, tex.height, tex.depth, tex.mipLevelCount) : Vector4.zero()\r\n });\r\n }\r\n return {\r\n irFragment: ir?.['fragment'] ?? null,\r\n irVertex: ir?.['vertex'] ?? null,\r\n uniformValues,\r\n uniformTextures\r\n };\r\n } catch (err) {\r\n console.error(`Load material failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Load a material.\r\n *\r\n * - Does not use or modify the internal cache; use fetchMaterial for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @returns A promise that resolves to the loaded material.\r\n * @internal\r\n */\r\n async loadMaterial<T extends Material = Material>(\r\n url: string,\r\n reload: boolean,\r\n VFSs?: VFS[]\r\n ): Promise<Nullable<T>> {\r\n try {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n const content = JSON.parse(data) as { type: string; props: any; data: any };\r\n ASSERT(\r\n content.type === 'PBRBluePrintMaterial' ||\r\n content.type === 'SpriteBluePrintMaterial' ||\r\n content.type === 'Default',\r\n `Unsupported material type: ${content.type}`\r\n );\r\n let mat: T;\r\n if (content.type === 'PBRBluePrintMaterial') {\r\n const data = (await this.loadBluePrintMaterialData(\r\n content.data as {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n },\r\n reload,\r\n VFSs\r\n ))!;\r\n mat = new PBRBluePrintMaterial(\r\n data.irFragment!,\r\n data.irVertex!,\r\n data.uniformValues,\r\n data.uniformTextures\r\n ) as unknown as T;\r\n } else if (content.type === 'SpriteBluePrintMaterial') {\r\n const data = (await this.loadBluePrintMaterialData(\r\n content.data as {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n },\r\n reload,\r\n VFSs\r\n ))!;\r\n mat = new SpriteBlueprintMaterial(\r\n data.irFragment!,\r\n data.uniformValues,\r\n data.uniformTextures\r\n ) as unknown as T;\r\n } else {\r\n const obj = await this._resourceManager.deserializeObject<T>(null, content.data);\r\n if (!(obj instanceof Material)) {\r\n if (typeof (obj as any).dispose === 'function') {\r\n (obj as any).dispose();\r\n }\r\n return null;\r\n }\r\n return obj;\r\n }\r\n if (mat && content.props) {\r\n await this._resourceManager.deserializeObjectProps(mat, content.props);\r\n }\r\n return mat;\r\n } catch (err) {\r\n console.error(`Load material failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n private rebuildGraphStructure(\r\n nodes: Record<number, IGraphNode>,\r\n links: { startNodeId: number; startSlotId: number; endNodeId: number; endSlotId: number }[]\r\n ) {\r\n const gs: GraphStructure = {\r\n outgoing: {},\r\n incoming: {}\r\n };\r\n // Initialize adjacency lists\r\n for (const nodeId in nodes) {\r\n gs.outgoing[nodeId] = [];\r\n gs.incoming[nodeId] = [];\r\n }\r\n // Fill with links\r\n for (const link of links) {\r\n const outConnection: NodeConnection = {\r\n targetNodeId: link.endNodeId,\r\n startSlotId: link.startSlotId,\r\n endSlotId: link.endSlotId\r\n };\r\n\r\n const inConnection: NodeConnection = {\r\n targetNodeId: link.startNodeId,\r\n startSlotId: link.startSlotId,\r\n endSlotId: link.endSlotId\r\n };\r\n\r\n gs.outgoing[link.startNodeId]?.push(outConnection);\r\n gs.incoming[link.endNodeId]?.push(inConnection);\r\n }\r\n return gs;\r\n }\r\n private collectReachableBackward(gs: GraphStructure, nodes: Record<number, IGraphNode>, roots: number[]) {\r\n const reachable = new Set<number>();\r\n const q: number[] = [];\r\n\r\n for (const r of roots) {\r\n if (nodes[r]) {\r\n reachable.add(r);\r\n q.push(r);\r\n }\r\n }\r\n while (q.length > 0) {\r\n const u = q.shift()!;\r\n const ins = gs.incoming[u] || [];\r\n for (const conn of ins) {\r\n const v = conn.targetNodeId; // 前驱\r\n if (!reachable.has(v)) {\r\n reachable.add(v);\r\n q.push(v);\r\n }\r\n }\r\n }\r\n return reachable;\r\n }\r\n private getReverseTopologicalOrderFromRoots(\r\n gs: GraphStructure,\r\n nodes: Record<number, IGraphNode>,\r\n roots: number[]\r\n ) {\r\n if (!roots || roots.length === 0) {\r\n return { order: [], levels: [] };\r\n }\r\n const sub = this.collectReachableBackward(gs, nodes, roots);\r\n if (sub.size === 0) {\r\n return { order: [], levels: [] };\r\n }\r\n const outDegree = new Map<number, number>();\r\n for (const id of sub) {\r\n const outs = (gs.outgoing[id] || []).filter((c) => sub.has(c.targetNodeId));\r\n outDegree.set(id, outs.length);\r\n }\r\n let currentLevel = Array.from(outDegree.entries())\r\n .filter(([, deg]) => deg === 0)\r\n .map(([id]) => id);\r\n const result: number[] = [];\r\n const levels: number[][] = [];\r\n while (currentLevel.length > 0) {\r\n levels.push([...currentLevel]);\r\n result.push(...currentLevel);\r\n const nextLevel: number[] = [];\r\n for (const u of currentLevel) {\r\n const ins = gs.incoming[u] || [];\r\n for (const conn of ins) {\r\n const v = conn.targetNodeId; // 前驱\r\n if (!sub.has(v)) {\r\n continue;\r\n }\r\n const deg = outDegree.get(v)! - 1;\r\n outDegree.set(v, deg);\r\n if (deg === 0) {\r\n nextLevel.push(v);\r\n }\r\n }\r\n }\r\n currentLevel = nextLevel;\r\n }\r\n if (result.length !== sub.size) {\r\n console.warn('Subgraph contains cycles (from given roots).');\r\n return null;\r\n }\r\n return { order: result, levels };\r\n }\r\n createBluePrintDAG(\r\n nodeMap: Record<number, IGraphNode>,\r\n roots: number[],\r\n links: { startNodeId: number; startSlotId: number; endNodeId: number; endSlotId: number }[]\r\n ) {\r\n const gs = this.rebuildGraphStructure(nodeMap, links);\r\n for (const k in gs.incoming) {\r\n const node = nodeMap[k];\r\n for (const conn of gs.incoming[k]) {\r\n const input = node.inputs.find((input) => input.id === conn.endSlotId)!;\r\n input.inputNode = nodeMap[conn.targetNodeId];\r\n input.inputId = conn.startSlotId;\r\n }\r\n }\r\n return {\r\n graph: gs,\r\n nodeMap,\r\n roots,\r\n order: this.getReverseTopologicalOrderFromRoots(gs, nodeMap, roots)!.order.reverse()\r\n };\r\n }\r\n invalidateBluePrint(path: string) {\r\n delete this._bluePrints[path];\r\n }\r\n async loadBluePrint(path: string, VFSs?: VFS[]) {\r\n try {\r\n const content = (await this.readFileFromVFSs(path, { encoding: 'utf8' }, VFSs)) as string;\r\n const bp = JSON.parse(content) as {\r\n type: string;\r\n state: Record<string, BluePrintEditorState>;\r\n };\r\n ASSERT(\r\n bp.type === 'PBRMaterial' || bp.type === 'SpriteMaterial' || bp.type === 'MaterialFunction',\r\n `Unsupported blueprint type: ${bp.type}`\r\n );\r\n const states = bp.state;\r\n const result: Record<string, MaterialBlueprintIR> = {};\r\n for (const k of Object.keys(states)) {\r\n const roots: number[] = [];\r\n const nodeMap: Record<number, IGraphNode> = {};\r\n const state = states[k];\r\n for (const node of state.nodes) {\r\n const impl = await this._resourceManager.deserializeObject<IGraphNode>(null, node.node);\r\n nodeMap[node.id] = impl!;\r\n if (impl!.outputs.length === 0) {\r\n roots.push(node.id);\r\n }\r\n }\r\n const dag = await this.createBluePrintDAG(nodeMap, roots, state.links);\r\n result[k] = new MaterialBlueprintIR(dag, path, state);\r\n }\r\n return result;\r\n } catch (err) {\r\n const msg = `Load material failed: ${err}`;\r\n console.error(msg);\r\n return null;\r\n }\r\n }\r\n /**\r\n * Load a texture directly from an ArrayBuffer or typed array.\r\n *\r\n * - Chooses an appropriate loader based on the provided MIME type.\r\n * - Can upload into an existing texture if `texture` is specified.\r\n *\r\n * @typeParam T - Expected concrete texture type.\r\n * @param arrayBuffer - Raw texture data buffer.\r\n * @param mimeType - MIME type of the texture (must be supported by a registered loader).\r\n * @param srgb - If true, treat image as sRGB; otherwise linear.\r\n * @param samplerOptions - Optional sampler options passed to the loader path.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns A promise that resolves to the created or populated texture.\r\n */\r\n async loadTextureFromBuffer<T extends BaseTexture>(\r\n arrayBuffer: ArrayBuffer | TypedArray,\r\n mimeType: string,\r\n srgb?: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<T> {\r\n for (const loader of AssetManager._textureLoaders) {\r\n if (!loader.supportMIMEType(mimeType)) {\r\n continue;\r\n }\r\n const tex = await this.doLoadTexture(loader, mimeType, arrayBuffer, !!srgb, samplerOptions, texture);\r\n return tex as T;\r\n }\r\n throw new Error(`Can not find loader for MIME type '${mimeType}'`);\r\n }\r\n /**\r\n * Load a texture via VFS by URL and MIME type.\r\n *\r\n * - Uses the first loader that supports the inferred or provided MIME type.\r\n * - On WebGL, may repack textures (resample to power-of-two, convert formats) to meet backend constraints.\r\n * - If `texture` is provided, the source is blitted into it, possibly resizing or changing sampling accordingly.\r\n *\r\n * @param url - Texture URL or VFS path.\r\n * @param mimeType - Optional explicit MIME type; otherwise inferred by VFS.\r\n * @param srgb - If true, treat image as sRGB; otherwise linear.\r\n * @param samplerOptions - Optional sampler options for loader or blit path.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns A promise that resolves to the created or populated texture.\r\n * @internal\r\n */\r\n async loadTexture(\r\n url: string,\r\n mimeType?: Nullable<string>,\r\n srgb?: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: Nullable<BaseTexture>,\r\n VFSs?: VFS[]\r\n ) {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'binary' }, VFSs)) as ArrayBuffer;\r\n mimeType = mimeType ?? this.vfs.guessMIMEType(url);\r\n for (const loader of AssetManager._textureLoaders) {\r\n if (!loader.supportMIMEType(mimeType)) {\r\n continue;\r\n }\r\n const tex = await this.doLoadTexture(loader, mimeType, data, !!srgb, samplerOptions, texture);\r\n if (tex) {\r\n tex.name = this.vfs.basename(url);\r\n }\r\n return tex;\r\n }\r\n throw new Error(`Can not find loader for asset ${url}`);\r\n }\r\n /**\r\n * Internal routine that executes the texture load using a specific loader and applies\r\n * backend-specific compatibility steps (e.g., WebGL NPOT/sRGB rules).\r\n *\r\n * @param loader - Concrete loader to use for decoding/creation.\r\n * @param mimeType - Texture MIME type.\r\n * @param data - Raw binary data.\r\n * @param srgb - If true, treat image as sRGB; otherwise linear.\r\n * @param samplerOptions - Optional sampler options.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns A promise that resolves to the created or populated texture.\r\n * @internal\r\n */\r\n async doLoadTexture(\r\n loader: AbstractTextureLoader,\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: Nullable<BaseTexture>\r\n ) {\r\n const device = getDevice();\r\n if (device.type !== 'webgl') {\r\n return await loader.load(mimeType, data, srgb, samplerOptions, texture);\r\n } else {\r\n let tex = await loader.load(mimeType, data, srgb, samplerOptions);\r\n if (tex) {\r\n if (texture) {\r\n const magFilter =\r\n tex.width !== texture.width || tex.height !== texture.height ? 'linear' : 'nearest';\r\n const minFilter = magFilter;\r\n const mipFilter = 'none';\r\n const sampler = device.createSampler({\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter\r\n });\r\n const blitter = new CopyBlitter();\r\n blitter.blit(tex as any, texture as any, sampler);\r\n tex = texture;\r\n } else {\r\n const po2_w = isPowerOf2(tex.width);\r\n const po2_h = isPowerOf2(tex.height);\r\n const srgb = tex.isSRGBFormat();\r\n if (srgb || !po2_w || !po2_h) {\r\n const newWidth = po2_w ? tex.width : nextPowerOf2(tex.width);\r\n const newHeight = po2_h ? tex.height : nextPowerOf2(tex.height);\r\n const magFilter = newWidth !== tex.width || newHeight !== tex.height ? 'linear' : 'nearest';\r\n const minFilter = magFilter;\r\n const mipFilter = 'none';\r\n const sampler = device.createSampler({\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter\r\n });\r\n const destFormat = srgb ? 'rgba8unorm' : tex.format;\r\n const blitter = new CopyBlitter();\r\n const newTexture = tex.isTexture2D()\r\n ? device.createTexture2D(destFormat, newWidth, newHeight)\r\n : device.createCubeTexture(destFormat, newWidth);\r\n blitter.blit(tex as any, newTexture as any, sampler);\r\n tex.dispose();\r\n tex = newTexture;\r\n }\r\n }\r\n }\r\n return tex;\r\n }\r\n }\r\n /**\r\n * Load a model via registered model loaders.\r\n *\r\n * - Selects loader by MIME type (explicit or inferred).\r\n * - Optionally applies a post-process transform to the SharedModel.\r\n * - Sets the model's name from the source filename for convenience.\r\n *\r\n * @param url - Model URL or VFS path.\r\n * @param options - Model load options (MIME override, Draco module, post-process hook).\r\n * @returns A promise that resolves to the loaded SharedModel.\r\n * @internal\r\n */\r\n async loadModel(url: string, options?: ModelFetchOptions, VFSs?: VFS[]) {\r\n const arrayBuffer = (await this.readFileFromVFSs(url, { encoding: 'binary' }, VFSs)) as ArrayBuffer;\r\n const mimeType = options?.mimeType || this.vfs.guessMIMEType(url);\r\n const data = new Blob([arrayBuffer], { type: mimeType });\r\n const filename = this.vfs.basename(url);\r\n for (const loader of AssetManager._modelLoaders) {\r\n if (!loader.supportMIMEType(mimeType)) {\r\n continue;\r\n }\r\n let model = await loader.load(\r\n this,\r\n url,\r\n options?.mimeType || data.type,\r\n data,\r\n options?.dracoDecoderModule,\r\n VFSs\r\n );\r\n if (!model) {\r\n throw new Error(`Load asset failed: ${url}`);\r\n }\r\n if (options?.postProcess) {\r\n try {\r\n model = options.postProcess(model);\r\n } catch (err) {\r\n throw new Error(`Model loader post process failed: ${err}`);\r\n }\r\n }\r\n model.name = filename;\r\n return model;\r\n }\r\n throw new Error(`Can not find loader for asset ${url}`);\r\n }\r\n /**\r\n * Fetch a built-in texture synchronously by name.\r\n *\r\n * - If this built-in was not created yet, the registered loader is invoked.\r\n * - Registers a device restore handler so the texture can be re-initialized after device loss.\r\n * - If an existing texture is provided, the loader uploads into it.\r\n *\r\n * @typeParam T - Expected concrete texture type.\r\n * @param name - Built-in texture identifier.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns The built-in texture (created or populated).\r\n */\r\n fetchBuiltinTexture<T extends BaseTexture>(name: string, texture?: T): T {\r\n const loader = AssetManager._builtinTextureLoaders[name];\r\n if (!loader) {\r\n throw new Error(`Unknown builtin texture name: ${name}`);\r\n }\r\n if (texture) {\r\n return loader(this, texture) as T;\r\n } else {\r\n texture = AssetManager._builtinTextures[name] as T;\r\n if (!texture) {\r\n texture = loader(this) as T;\r\n AssetManager._builtinTextures[name] = texture;\r\n }\r\n texture.restoreHandler = (tex) => {\r\n loader(this, tex as BaseTexture);\r\n };\r\n return texture;\r\n }\r\n }\r\n /**\r\n * Override or unregister the loader for a named built-in texture.\r\n *\r\n * - Passing a valid loader function sets/overrides the creation path.\r\n * - Passing `undefined` removes the loader mapping for the given name.\r\n *\r\n * @param name - Built-in texture identifier.\r\n * @param loader - Factory that creates the built-in texture using the provided AssetManager.\r\n */\r\n static setBuiltinTextureLoader(name: string, loader: (assetManager: AssetManager) => BaseTexture) {\r\n if (loader) {\r\n this._builtinTextureLoaders[name] = loader;\r\n } else {\r\n delete this._builtinTextureLoaders[name];\r\n }\r\n }\r\n /**\r\n * Compute a cache key for texture requests.\r\n *\r\n * Includes texture type tag, URL, and color space choice to avoid cross-color-space cache collisions.\r\n *\r\n * @typeParam T - Texture type parameter (not used for runtime behavior; helps preserve generic intent).\r\n * @param type - Logical texture type tag (e.g., '2d', 'cube').\r\n * @param url - Resource URL or VFS path.\r\n * @param options - Texture fetch options to incorporate into the key.\r\n * @returns A string cache key combining type, URL, and color space choice.\r\n * @internal\r\n */\r\n private getHash<T extends BaseTexture>(type: string, url: string, options?: TextureFetchOptions<T>) {\r\n return `${type}:${url}:${!options?.linearColorSpace}`;\r\n }\r\n /**\r\n * Try reading from file from a list of VFSs\r\n *\r\n * @param path - File path\r\n * @param options - Read options\r\n * @param vfsList - VFS list\r\n * @returns File content\r\n *\r\n * @internal\r\n */\r\n async readFileFromVFSs(path: string, options: ReadOptions, vfsList?: VFS[]) {\r\n vfsList = vfsList ?? [this.vfs];\r\n for (const vfs of vfsList) {\r\n try {\r\n return await vfs.readFile(path, options);\r\n } catch {}\r\n }\r\n throw new VFSError(`File does not exist: ${path}`, 'ENOENT', path);\r\n }\r\n /**\r\n * Write file to a list of VFSs\r\n *\r\n * @param path - File path\r\n * @param data - Data to write\r\n * @param options - Write options\r\n * @param vfsList - Which VFSs will be written to\r\n */\r\n async writeFileToVFSs(path: string, data: ArrayBuffer | string, options: WriteOptions, vfsList?: VFS[]) {\r\n vfsList = vfsList ?? [this.vfs];\r\n for (const vfs of vfsList) {\r\n await vfs.writeFile(path, data, options);\r\n }\r\n }\r\n}\r\n"],"names":["AssetManager","_builtinTextures","_builtinTextureLoaders","BUILTIN_ASSET_TEXTURE_SHEEN_LUT","getSheenLutLoader","_textureLoaders","WebImageLoader","DDSLoader","HDRLoader","TGALoader","_modelLoaders","GLTFLoader","resourceManager","_resourceManager","getEngine","_textures","_models","_materials","_primitives","_skeletons","_bluePrints","_binaryDatas","_textDatas","_jsonDatas","vfs","VFS","clearCache","k","Object","keys","v","DWeakRef","dispose","addTextureLoader","loader","unshift","addModelLoader","fetchTextData","url","postProcess","httpRequest","VFSs","hash","urlResolver","P","loadTextData","fetchJsonData","loadJsonData","fetchBinaryData","loadBinaryData","fetchBluePrint","loadBluePrint","fetchMaterial","get","disposed","loadMaterial","material","Promise","fetchPrimitive","loadPrimitive","primitive","fetchTexture","options","texture","loadTexture","mimeType","linearColorSpace","samplerOptions","getHash","tex","fetchModelData","loadModel","sharedModel","fetchModel","scene","node","createSceneNode","enableInstancing","group","animationSet","text","readFileFromVFSs","encoding","err","Error","json","JSON","parse","data","console","error","content","ASSERT","type","Primitive","vertices","vertexData","base64ToUint8Array","createAndSetVertexBuffer","format","indices","indexData","indexType","Uint16Array","buffer","Uint32Array","createAndSetIndexBuffer","primitiveType","indexCount","setBoundingVolume","BoundingBox","Vector3","boxMin","boxMax","obj","deserializeObject","reloadBluePrintMaterials","filter","promises","paths","m","push","resolve","materials","all","i","length","PBRBluePrintMaterial","loadBluePrintMaterialData","fragmentIR","irFragment","vertexIR","irVertex","uniformValues","uniformTextures","reload","irData","ir","IR","map","finalValue","value","Float32Array","textures","sRGB","finalTexture","DRef","finalSampler","getDevice","createSampler","addressU","wrapS","addressV","wrapT","minFilter","magFilter","mipFilter","params","Vector4","width","height","depth","mipLevelCount","zero","mat","SpriteBlueprintMaterial","Material","props","deserializeObjectProps","rebuildGraphStructure","nodes","links","gs","outgoing","incoming","nodeId","link","outConnection","targetNodeId","endNodeId","startSlotId","endSlotId","inConnection","startNodeId","collectReachableBackward","roots","reachable","Set","q","r","add","u","shift","ins","conn","has","getReverseTopologicalOrderFromRoots","order","levels","sub","size","outDegree","Map","id","outs","c","set","currentLevel","Array","from","entries","deg","result","nextLevel","warn","createBluePrintDAG","nodeMap","input","inputs","find","inputNode","inputId","graph","reverse","invalidateBluePrint","path","bp","states","state","impl","outputs","dag","MaterialBlueprintIR","msg","loadTextureFromBuffer","arrayBuffer","srgb","supportMIMEType","doLoadTexture","guessMIMEType","name","basename","device","load","sampler","blitter","CopyBlitter","blit","po2_w","isPowerOf2","po2_h","isSRGBFormat","newWidth","nextPowerOf2","newHeight","destFormat","newTexture","isTexture2D","createTexture2D","createCubeTexture","Blob","filename","model","dracoDecoderModule","fetchBuiltinTexture","restoreHandler","setBuiltinTextureLoader","vfsList","readFile","VFSError","writeFileToVFSs","writeFile"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assetmanager.js","sources":["../../src/asset/assetmanager.ts"],"sourcesContent":["import type { DecoderModule } from 'draco3d';\r\nimport type { HttpRequest, Nullable, ReadOptions, TypedArray, VFS, WriteOptions } from '@zephyr3d/base';\r\nimport {\r\n isPowerOf2,\r\n nextPowerOf2,\r\n DWeakRef,\r\n DRef,\r\n base64ToUint8Array,\r\n Vector3,\r\n ASSERT,\r\n VFSError,\r\n Vector4\r\n} from '@zephyr3d/base';\r\nimport type { SharedModel } from './model';\r\nimport { GLTFLoader } from './loaders/gltf/gltf_loader';\r\nimport { WebImageLoader } from './loaders/image/webimage_loader';\r\nimport { DDSLoader } from './loaders/dds/dds_loader';\r\nimport { HDRLoader } from './loaders/hdr/hdr';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport { CopyBlitter } from '../blitter';\r\nimport { getSheenLutLoader } from './builtin';\r\nimport { BUILTIN_ASSET_TEXTURE_SHEEN_LUT } from '../values';\r\nimport type { AnimationSet } from '../animation/animationset';\r\nimport type {\r\n BaseTexture,\r\n PrimitiveType,\r\n SamplerOptions,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n VertexAttribFormat,\r\n VertexSemantic\r\n} from '@zephyr3d/device';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { AbstractTextureLoader, AbstractModelLoader } from './loaders/loader';\r\nimport { TGALoader } from './loaders/image/tga_Loader';\r\nimport { getDevice, getEngine } from '../app/api';\r\nimport { Material, PBRBluePrintMaterial, SpriteBlueprintMaterial } from '../material';\r\nimport type {\r\n BluePrintEditorState,\r\n BluePrintUniformTexture,\r\n BluePrintUniformValue,\r\n GraphStructure,\r\n IGraphNode,\r\n NodeConnection,\r\n ResourceManager\r\n} from '../utility';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { MaterialBlueprintIR } from '../utility/blueprint/material/ir';\r\nimport type { Skeleton } from '../animation';\r\nimport { Primitive } from '../render';\r\n\r\n/**\r\n * Options for texture fetching.\r\n *\r\n * Controls how a texture is loaded, converted, and optionally uploaded into an existing texture object.\r\n *\r\n * @typeParam T - Texture type to be returned, extending BaseTexture.\r\n * @public\r\n */\r\nexport type TextureFetchOptions<T extends BaseTexture> = {\r\n /**\r\n * Explicit MIME type hint. If omitted, the type is inferred from file extension via VFS.\r\n */\r\n mimeType?: string;\r\n /**\r\n * If true, load the image as linear data. If false or omitted, load as sRGB (when supported).\r\n *\r\n * Note: For WebGL targets, non-power-of-two or sRGB textures may be repacked based on constraints.\r\n */\r\n linearColorSpace?: boolean;\r\n /**\r\n * Optional target texture to upload into. If provided, loader data will be copied/blitted\r\n * into this texture instead of creating a new one.\r\n */\r\n texture?: T;\r\n /**\r\n * Optional sampler options for the loaded texture. May be used by loaders for mip generation\r\n * or by blit paths when repacking textures on constrained backends.\r\n */\r\n samplerOptions?: SamplerOptions;\r\n};\r\n\r\n/**\r\n * Options for model fetching.\r\n *\r\n * Provides decoding and instancing hints used by supported model loaders.\r\n * @public\r\n */\r\nexport type ModelFetchOptions = {\r\n /**\r\n * Explicit MIME type hint for the model. If omitted, inferred from file extension via VFS.\r\n */\r\n mimeType?: string;\r\n /**\r\n * Optional Draco decoder module for compressed geometry decoding.\r\n */\r\n dracoDecoderModule?: DecoderModule;\r\n /**\r\n * If true, the created scene node may be prepared for instanced rendering (engine-dependent).\r\n * Default is false.\r\n */\r\n enableInstancing?: boolean;\r\n /**\r\n * Optional post-process callback applied to the loaded SharedModel before creating nodes.\r\n * Use this to remap materials, merge meshes, or apply custom data transforms.\r\n */\r\n postProcess?: (model: SharedModel) => SharedModel;\r\n};\r\n\r\n/**\r\n * Data structure returned by AssetManager.fetchModel().\r\n *\r\n * Bundles the created scene node group and an optional animation set if present in the asset.\r\n * @public\r\n */\r\nexport type ModelInfo = {\r\n /**\r\n * The root scene node of the loaded model (may contain child hierarchy).\r\n */\r\n group: SceneNode;\r\n /**\r\n * The animation set associated with the model or null if none.\r\n */\r\n animationSet: AnimationSet;\r\n};\r\n\r\n/**\r\n * Centralized asset manager for loading and caching resources.\r\n *\r\n * Responsibilities:\r\n * - Abstracts resource loading via VFS (text/json/binary).\r\n * - Dispatches texture/model loading to registered loaders by MIME type.\r\n * - Caches results and uses weak references to allow GPU resources to be GC'd when unused.\r\n * - Harmonizes cross-backend constraints (e.g., WebGL non-power-of-two rules and sRGB handling).\r\n * - Provides access to built-in textures with device-restore handlers.\r\n *\r\n * Threading/async model:\r\n * - All I/O is async; repeated calls are coalesced via internal promise caches keyed by URL or hash.\r\n *\r\n * @public\r\n */\r\nexport class AssetManager {\r\n /** @internal */\r\n private static _builtinTextures: {\r\n [name: string]: BaseTexture;\r\n } = {};\r\n /** @internal */\r\n private static _builtinTextureLoaders: {\r\n [name: string]: (assetManager: AssetManager, texture?: BaseTexture) => BaseTexture;\r\n } = {\r\n [BUILTIN_ASSET_TEXTURE_SHEEN_LUT]: getSheenLutLoader(64)\r\n };\r\n /** @internal */\r\n private static readonly _textureLoaders: AbstractTextureLoader[] = [\r\n new WebImageLoader(),\r\n new DDSLoader(),\r\n new HDRLoader(),\r\n new TGALoader()\r\n ];\r\n /** @internal */\r\n private static readonly _modelLoaders: AbstractModelLoader[] = [new GLTFLoader()];\r\n /** @internal */\r\n private _textures: {\r\n [hash: string]: Promise<BaseTexture> | DWeakRef<BaseTexture>;\r\n };\r\n /** @internal */\r\n private _models: {\r\n [url: string]: Promise<SharedModel> | DWeakRef<SharedModel>;\r\n };\r\n /** @internal */\r\n private _binaryDatas: {\r\n [url: string]: Promise<Nullable<ArrayBuffer>>;\r\n };\r\n /** @internal */\r\n private _textDatas: {\r\n [url: string]: Promise<string>;\r\n };\r\n /** @internal */\r\n private _bluePrints: {\r\n [url: string]: Promise<Nullable<Record<string, MaterialBlueprintIR>>>;\r\n };\r\n /** @internal */\r\n private _materials: {\r\n [url: string]: Promise<Nullable<Material>> | DWeakRef<Material>;\r\n };\r\n /** @internal */\r\n private _primitives: {\r\n [url: string]: Promise<Nullable<Primitive>> | DWeakRef<Primitive>;\r\n };\r\n /** @internal */\r\n private _skeletons: {\r\n [url: string]: Promise<Skeleton> | DWeakRef<Skeleton>;\r\n };\r\n /** @internal */\r\n private _jsonDatas: {\r\n [url: string]: Promise<any>;\r\n };\r\n /** @internal */\r\n private readonly _resourceManager: ResourceManager;\r\n /**\r\n * Creates an instance of AssetManager\r\n */\r\n constructor(resourceManager?: ResourceManager) {\r\n this._resourceManager = resourceManager ?? getEngine().resourceManager;\r\n this._textures = {};\r\n this._models = {};\r\n this._materials = {};\r\n this._primitives = {};\r\n this._skeletons = {};\r\n this._bluePrints = {};\r\n this._binaryDatas = {};\r\n this._textDatas = {};\r\n this._jsonDatas = {};\r\n }\r\n /**\r\n * VFS used to read resources (files, URLs, virtual mounts).\r\n */\r\n get vfs() {\r\n return this._resourceManager.VFS;\r\n }\r\n /**\r\n * Clear cached references and promises.\r\n *\r\n * - Disposes any DWeakRef holders maintained by this manager.\r\n * - Empties internal maps for textures, models, and raw data (text/json/binary).\r\n * - Does not forcibly dispose GPU resources; it only clears references so they can be GC'd\r\n * if no other owners are holding them.\r\n */\r\n clearCache() {\r\n for (const k in Object.keys(this._textures)) {\r\n const v = this._textures[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._textures = {};\r\n for (const k in Object.keys(this._models)) {\r\n const v = this._models[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._models = {};\r\n for (const k in Object.keys(this._materials)) {\r\n const v = this._materials[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._materials = {};\r\n for (const k in Object.keys(this._primitives)) {\r\n const v = this._primitives[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._primitives = {};\r\n for (const k in Object.keys(this._skeletons)) {\r\n const v = this._skeletons[k];\r\n if (v instanceof DWeakRef) {\r\n v.dispose();\r\n }\r\n }\r\n this._skeletons = {};\r\n this._binaryDatas = {};\r\n this._textDatas = {};\r\n this._jsonDatas = {};\r\n }\r\n /**\r\n * Register a texture loader (highest priority first).\r\n *\r\n * Note: This is a static registry shared by all AssetManager instances.\r\n *\r\n * @param loader - A concrete texture loader implementation.\r\n */\r\n static addTextureLoader(loader: AbstractTextureLoader) {\r\n if (loader) {\r\n this._textureLoaders.unshift(loader);\r\n }\r\n }\r\n /**\r\n * Register a model loader (highest priority first).\r\n *\r\n * Note: This is a static registry shared by all AssetManager instances.\r\n *\r\n * @param loader - A concrete model loader implementation.\r\n */\r\n static addModelLoader(loader: AbstractModelLoader) {\r\n if (loader) {\r\n this._modelLoaders.unshift(loader);\r\n }\r\n }\r\n /**\r\n * Fetch a UTF-8 text resource via VFS.\r\n *\r\n * - Results are cached per resolved URL (via HttpRequest.urlResolver if provided; otherwise the raw URL).\r\n * - If cached, any provided postProcess is ignored for subsequent calls; create a separate AssetManager\r\n * if you need different post-processing of the same URL.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the loaded text.\r\n * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.\r\n * @returns A promise that resolves to the loaded (and optionally processed) text.\r\n */\r\n async fetchTextData(\r\n url: string,\r\n postProcess?: (text: string) => string,\r\n httpRequest?: HttpRequest,\r\n VFSs?: VFS[]\r\n ) {\r\n const hash = httpRequest?.urlResolver?.(url) ?? url;\r\n let P = this._textDatas[hash];\r\n if (!P) {\r\n P = this.loadTextData(url, postProcess, VFSs);\r\n this._textDatas[hash] = P;\r\n }\r\n return P;\r\n }\r\n /**\r\n * Fetch a JSON resource via VFS.\r\n *\r\n * - Parses as JSON after text load.\r\n * - Cached per resolved URL. Post-process is applied only on the first load for a given cache key.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the parsed JSON object.\r\n * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.\r\n * @returns A promise that resolves to the loaded (and optionally processed) JSON value.\r\n */\r\n async fetchJsonData<T = any>(\r\n url: string,\r\n postProcess?: (json: T) => T,\r\n httpRequest?: HttpRequest,\r\n VFSs?: VFS[]\r\n ): Promise<T> {\r\n const hash = httpRequest?.urlResolver?.(url) ?? url;\r\n let P = this._jsonDatas[hash] as Promise<T>;\r\n if (!P) {\r\n P = this.loadJsonData<T>(url, postProcess, VFSs);\r\n this._jsonDatas[hash] = P;\r\n }\r\n return P;\r\n }\r\n /**\r\n * Fetch a binary resource via VFS.\r\n *\r\n * - Cached per resolved URL. Post-process is applied only on first load for a given key.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the loaded ArrayBuffer.\r\n * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.\r\n * @returns A promise that resolves to the loaded (and optionally processed) ArrayBuffer.\r\n */\r\n async fetchBinaryData(\r\n url: string,\r\n postProcess?: Nullable<(data: ArrayBuffer) => ArrayBuffer>,\r\n httpRequest?: Nullable<HttpRequest>,\r\n VFSs?: VFS[]\r\n ) {\r\n const hash = httpRequest?.urlResolver?.(url) ?? url;\r\n let P = this._binaryDatas[hash];\r\n if (!P) {\r\n P = this.loadBinaryData(url, postProcess, VFSs);\r\n this._binaryDatas[hash] = P;\r\n }\r\n return P;\r\n }\r\n async fetchBluePrint(url: string, VFSs?: VFS[]) {\r\n const hash = url;\r\n let P = this._bluePrints[hash];\r\n if (!P) {\r\n P = this.loadBluePrint(url, VFSs);\r\n this._bluePrints[hash] = P;\r\n }\r\n return P;\r\n }\r\n /**\r\n * Fetch a material resource.\r\n *\r\n * @typeParam T - Expected concrete material type.\r\n * @param url - Resource URL or VFS path.\r\n * @returns A promise that resolves to the loaded material.\r\n */\r\n async fetchMaterial<T extends Material = Material>(url: string, VFSs?: VFS[]): Promise<Nullable<T>> {\r\n const hash = url;\r\n let P = this._materials[hash] as Promise<Nullable<T>> | DWeakRef<T>;\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadMaterial<T>(url, false, VFSs);\r\n this._materials[hash] = P;\r\n }\r\n const material = await P;\r\n if (this._materials[hash] instanceof Promise) {\r\n this._materials[hash] = new DWeakRef<Material>(material);\r\n }\r\n return material;\r\n }\r\n /**\r\n * Fetch a primitive resource.\r\n *\r\n * @typeParam T - Expected concrete primitive type.\r\n * @param url - Resource URL or VFS path.\r\n * @returns A promise that resolves to the loaded primitive.\r\n */\r\n async fetchPrimitive<T extends Primitive = Primitive>(url: string, VFSs?: VFS[]): Promise<Nullable<T>> {\r\n const hash = url;\r\n let P = this._primitives[hash] as Promise<Nullable<T>> | DWeakRef<T>;\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadPrimitive<T>(url, VFSs);\r\n this._primitives[hash] = P;\r\n }\r\n const primitive = await P;\r\n if (this._primitives[hash] instanceof Promise) {\r\n this._primitives[hash] = new DWeakRef<Primitive>(primitive);\r\n }\r\n return primitive;\r\n }\r\n /**\r\n * Fetch a texture resource via registered loaders.\r\n *\r\n * - Chooses loader by explicit MIME type or by VFS file extension inference.\r\n * - Deduplicates in-flight requests and caches ready textures.\r\n * - If `options.texture` is provided, the asset will be uploaded/blitted into that texture.\r\n * - On WebGL backends, enforces constraints by repacking non-power-of-two or sRGB textures.\r\n *\r\n * @typeParam T - Expected concrete texture type.\r\n * @param url - Resource URL or VFS path.\r\n * @param options - Texture fetching options (color space, sampler, target texture).\r\n * @param httpRequest - Optional HttpRequest (not used for binary read but may supply URL resolver for hashing).\r\n * @returns A promise that resolves to the loaded texture.\r\n */\r\n async fetchTexture<T extends BaseTexture>(\r\n url: string,\r\n options?: TextureFetchOptions<T>,\r\n VFSs?: VFS[]\r\n ): Promise<T> {\r\n if (options?.texture) {\r\n return this.loadTexture(\r\n url,\r\n options.mimeType ?? null,\r\n !options.linearColorSpace,\r\n options.samplerOptions,\r\n options.texture,\r\n VFSs\r\n ) as Promise<T>;\r\n } else {\r\n const hash = this.getHash('2d', url, options);\r\n let P = this._textures[hash] as Promise<T> | DWeakRef<T>;\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadTexture(\r\n url,\r\n options?.mimeType ?? null,\r\n !options?.linearColorSpace,\r\n options?.samplerOptions,\r\n null,\r\n VFSs\r\n ) as Promise<T>;\r\n this._textures[hash] = P;\r\n }\r\n const tex: T = await P;\r\n if (this._textures[hash] instanceof Promise) {\r\n this._textures[hash] = new DWeakRef<T>(tex);\r\n }\r\n return tex;\r\n }\r\n }\r\n /**\r\n * Fetch a model resource via registered model loaders (data only).\r\n *\r\n * - Returns a SharedModel which can create scene nodes in any Scene.\r\n * - Uses DWeakRef to cache and allow model data to be reclaimed if unused.\r\n *\r\n * @param url - Model URL or VFS path.\r\n * @param options - Model loader options (MIME override, Draco, instancing hint, post-process).\r\n * @returns A promise that resolves to the SharedModel.\r\n * @internal\r\n */\r\n async fetchModelData(url: string, options?: ModelFetchOptions, VFSs?: VFS[]) {\r\n const hash = url;\r\n let P = this._models[hash];\r\n if (P instanceof DWeakRef && P.get() && !P.get()!.disposed) {\r\n return P.get()!;\r\n } else if (!P || P instanceof DWeakRef) {\r\n P = this.loadModel(url, options, VFSs);\r\n this._models[hash] = P;\r\n }\r\n const sharedModel = await P;\r\n if (this._models[hash] instanceof Promise) {\r\n this._models[hash] = new DWeakRef<SharedModel>(sharedModel);\r\n }\r\n return sharedModel;\r\n }\r\n /**\r\n * Fetch a model resource and instantiate it under a scene.\r\n *\r\n * - Loads or retrieves a cached SharedModel, then creates a SceneNode hierarchy.\r\n * - Returns both the created group node and any associated AnimationSet.\r\n *\r\n * @param scene - Scene into which the model node will be created.\r\n * @param url - Model URL or VFS path.\r\n * @param options - Model loader options and instancing hint.\r\n * @param httpRequest - Optional HttpRequest (unused for binary read; present for API symmetry).\r\n * @returns A promise with the created node group and animation set info.\r\n */\r\n async fetchModel(scene: Scene, url: string, options?: ModelFetchOptions, VFSs?: VFS[]) {\r\n const sharedModel = await this.fetchModelData(url, options, VFSs);\r\n const node = sharedModel.createSceneNode(scene, !!options?.enableInstancing);\r\n return { group: node, animationSet: node.animationSet };\r\n }\r\n /**\r\n * Load a text resource via VFS and optionally post-process it.\r\n *\r\n * - Does not use or modify the internal cache; use fetchTextData for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the text.\r\n * @returns A promise that resolves to the loaded (and optionally processed) text.\r\n * @internal\r\n */\r\n async loadTextData(url: string, postProcess?: (text: string) => string, VFSs?: VFS[]) {\r\n let text = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n if (postProcess) {\r\n try {\r\n text = postProcess(text);\r\n } catch (err) {\r\n throw new Error(`Load text data post process failed: ${err}`);\r\n }\r\n }\r\n return text;\r\n }\r\n /**\r\n * Load a JSON resource via VFS and optionally post-process it.\r\n *\r\n * - Does not use or modify the internal cache; use fetchJsonData for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the parsed JSON.\r\n * @returns A promise that resolves to the loaded (and optionally processed) JSON.\r\n * @internal\r\n */\r\n async loadJsonData<T = unknown>(url: string, postProcess?: (json: any) => any, VFSs?: VFS[]): Promise<T> {\r\n let json = JSON.parse((await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string) as T;\r\n\r\n if (postProcess) {\r\n try {\r\n json = postProcess(json);\r\n } catch (err) {\r\n throw new Error(`Load json data post process failed: ${err}`);\r\n }\r\n }\r\n return json;\r\n }\r\n /**\r\n * Load a binary resource via VFS and optionally post-process it.\r\n *\r\n * - Does not use or modify the internal cache; use fetchBinaryData for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @param postProcess - Optional transformation applied to the ArrayBuffer.\r\n * @returns A promise that resolves to the loaded (and optionally processed) ArrayBuffer.\r\n * @internal\r\n */\r\n async loadBinaryData(\r\n url: string,\r\n postProcess?: Nullable<(data: ArrayBuffer) => ArrayBuffer>,\r\n VFSs?: VFS[]\r\n ) {\r\n try {\r\n let data = (await this.readFileFromVFSs(url, { encoding: 'binary' }, VFSs)) as ArrayBuffer;\r\n if (postProcess) {\r\n data = postProcess(data);\r\n }\r\n return data;\r\n } catch (err) {\r\n console.error(`Load binary data failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n async loadPrimitive<T extends Primitive = Primitive>(url: string, VFSs?: VFS[]): Promise<Nullable<T>> {\r\n try {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n const content = JSON.parse(data) as { type: string; data: any };\r\n ASSERT(\r\n content.type === 'Primitive' || content.type === 'Default',\r\n `Unsupported primitive type: ${content.type}`\r\n );\r\n if (content.type === 'Primitive') {\r\n const data = content.data as {\r\n vertices: Record<VertexSemantic, { format: VertexAttribFormat; data: string }>;\r\n indices: string;\r\n indexType: 'u16' | 'u32';\r\n indexCount: number;\r\n type: PrimitiveType;\r\n boxMin: number[];\r\n boxMax: number[];\r\n };\r\n const primitive = new Primitive();\r\n for (const k in data.vertices) {\r\n const v = data.vertices[k as VertexSemantic];\r\n const vertexData = base64ToUint8Array(v.data);\r\n primitive.createAndSetVertexBuffer(v.format, vertexData);\r\n }\r\n if (data.indices) {\r\n const indexData = base64ToUint8Array(data.indices);\r\n const indices =\r\n data.indexType === 'u16'\r\n ? new Uint16Array(indexData.buffer)\r\n : data.indexType === 'u32'\r\n ? new Uint32Array(indexData.buffer)\r\n : null;\r\n if (!indices) {\r\n console.error(`Invalid index type in primitive data: ${data.indexType}`);\r\n return null;\r\n }\r\n primitive.createAndSetIndexBuffer(indices);\r\n }\r\n primitive.primitiveType = data.type;\r\n primitive.indexCount = data.indexCount;\r\n primitive.setBoundingVolume(\r\n new BoundingBox(\r\n new Vector3(data.boxMin[0], data.boxMin[1], data.boxMin[2]),\r\n new Vector3(data.boxMax[0], data.boxMax[1], data.boxMax[2])\r\n )\r\n );\r\n return primitive as T;\r\n } else {\r\n const obj = await this._resourceManager.deserializeObject<T>(null, content.data);\r\n if (!(obj instanceof Primitive)) {\r\n if (typeof (obj as any).dispose === 'function') {\r\n (obj as any).dispose();\r\n }\r\n return null;\r\n }\r\n return obj;\r\n }\r\n } catch (err) {\r\n console.error(`Load primitive failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n async reloadBluePrintMaterials(filter?: (m: PBRBluePrintMaterial) => boolean) {\r\n const promises: Promise<Nullable<Material>>[] = [];\r\n const paths: string[] = [];\r\n for (const k of Object.keys(this._materials)) {\r\n const m = this._materials[k];\r\n if (m instanceof Promise) {\r\n promises.push(m);\r\n paths.push(k);\r\n } else if (m instanceof DWeakRef && !!m.get()) {\r\n promises.push(Promise.resolve(m.get()!));\r\n paths.push(k);\r\n }\r\n }\r\n const materials = await Promise.all(promises);\r\n for (let i = 0; i < materials.length; i++) {\r\n const m = materials[i];\r\n if (m instanceof PBRBluePrintMaterial && (!filter || filter(m))) {\r\n const data = await this.loadBluePrintMaterialData(paths[i], true);\r\n if (data) {\r\n m.fragmentIR = data.irFragment!;\r\n m.vertexIR = data.irVertex!;\r\n m.uniformValues = data.uniformValues;\r\n m.uniformTextures = data.uniformTextures;\r\n }\r\n }\r\n }\r\n }\r\n private async loadBluePrintMaterialData(\r\n url:\r\n | string\r\n | { IR: string; uniformValues: BluePrintUniformValue[]; uniformTextures: BluePrintUniformTexture[] },\r\n reload: boolean,\r\n VFSs?: VFS[]\r\n ) {\r\n try {\r\n let irData: {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n };\r\n if (typeof url === 'string') {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n const content = JSON.parse(data) as { type: string; data: any };\r\n ASSERT(\r\n content.type === 'PBRBluePrintMaterial' || content.type === 'SpriteBluePrintMaterial',\r\n `Unsupported material type: ${content.type}`\r\n );\r\n irData = content.data as {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n };\r\n } else {\r\n irData = url;\r\n }\r\n const ir = reload\r\n ? await this.loadBluePrint(irData.IR, VFSs)\r\n : await this.fetchBluePrint(irData.IR, VFSs);\r\n const uniformValues: BluePrintUniformValue[] = irData.uniformValues.map((v) => ({\r\n ...v,\r\n finalValue: v.value.length === 1 ? v.value[0] : new Float32Array(v.value)\r\n }));\r\n const uniformTextures: BluePrintUniformTexture[] = [];\r\n const textures = irData.uniformTextures;\r\n for (const v of textures) {\r\n const tex = await this.fetchTexture(\r\n v.texture,\r\n {\r\n linearColorSpace: !v.sRGB\r\n },\r\n VFSs\r\n );\r\n uniformTextures.push({\r\n ...v,\r\n finalTexture: new DRef(tex),\r\n finalSampler: getDevice().createSampler({\r\n addressU: v.wrapS as TextureAddressMode,\r\n addressV: v.wrapT as TextureAddressMode,\r\n minFilter: v.minFilter as TextureFilterMode,\r\n magFilter: v.magFilter as TextureFilterMode,\r\n mipFilter: v.mipFilter as TextureFilterMode\r\n }),\r\n params: tex ? new Vector4(tex.width, tex.height, tex.depth, tex.mipLevelCount) : Vector4.zero()\r\n });\r\n }\r\n return {\r\n irFragment: ir?.['fragment'] ?? null,\r\n irVertex: ir?.['vertex'] ?? null,\r\n uniformValues,\r\n uniformTextures\r\n };\r\n } catch (err) {\r\n console.error(`Load material failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Load a material.\r\n *\r\n * - Does not use or modify the internal cache; use fetchMaterial for cached loads.\r\n *\r\n * @param url - Resource URL or VFS path.\r\n * @returns A promise that resolves to the loaded material.\r\n * @internal\r\n */\r\n async loadMaterial<T extends Material = Material>(\r\n url: string,\r\n reload: boolean,\r\n VFSs?: VFS[]\r\n ): Promise<Nullable<T>> {\r\n try {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'utf8' }, VFSs)) as string;\r\n const content = JSON.parse(data) as { type: string; props: any; data: any };\r\n ASSERT(\r\n content.type === 'PBRBluePrintMaterial' ||\r\n content.type === 'SpriteBluePrintMaterial' ||\r\n content.type === 'Default',\r\n `Unsupported material type: ${content.type}`\r\n );\r\n let mat: T;\r\n if (content.type === 'PBRBluePrintMaterial') {\r\n const data = (await this.loadBluePrintMaterialData(\r\n content.data as {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n },\r\n reload,\r\n VFSs\r\n ))!;\r\n mat = new PBRBluePrintMaterial(\r\n data.irFragment!,\r\n data.irVertex!,\r\n data.uniformValues,\r\n data.uniformTextures\r\n ) as unknown as T;\r\n } else if (content.type === 'SpriteBluePrintMaterial') {\r\n const data = (await this.loadBluePrintMaterialData(\r\n content.data as {\r\n IR: string;\r\n uniformValues: BluePrintUniformValue[];\r\n uniformTextures: BluePrintUniformTexture[];\r\n },\r\n reload,\r\n VFSs\r\n ))!;\r\n mat = new SpriteBlueprintMaterial(\r\n data.irFragment!,\r\n data.uniformValues,\r\n data.uniformTextures\r\n ) as unknown as T;\r\n } else {\r\n const obj = await this._resourceManager.deserializeObject<T>(null, content.data);\r\n if (!(obj instanceof Material)) {\r\n if (typeof (obj as any).dispose === 'function') {\r\n (obj as any).dispose();\r\n }\r\n return null;\r\n }\r\n return obj;\r\n }\r\n if (mat && content.props) {\r\n await this._resourceManager.deserializeObjectProps(mat, content.props);\r\n }\r\n return mat;\r\n } catch (err) {\r\n console.error(`Load material failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n private rebuildGraphStructure(\r\n nodes: Record<number, IGraphNode>,\r\n links: { startNodeId: number; startSlotId: number; endNodeId: number; endSlotId: number }[]\r\n ) {\r\n const gs: GraphStructure = {\r\n outgoing: {},\r\n incoming: {}\r\n };\r\n // Initialize adjacency lists\r\n for (const nodeId in nodes) {\r\n gs.outgoing[nodeId] = [];\r\n gs.incoming[nodeId] = [];\r\n }\r\n // Fill with links\r\n for (const link of links) {\r\n const outConnection: NodeConnection = {\r\n targetNodeId: link.endNodeId,\r\n startSlotId: link.startSlotId,\r\n endSlotId: link.endSlotId\r\n };\r\n\r\n const inConnection: NodeConnection = {\r\n targetNodeId: link.startNodeId,\r\n startSlotId: link.startSlotId,\r\n endSlotId: link.endSlotId\r\n };\r\n\r\n gs.outgoing[link.startNodeId]?.push(outConnection);\r\n gs.incoming[link.endNodeId]?.push(inConnection);\r\n }\r\n return gs;\r\n }\r\n private collectReachableBackward(gs: GraphStructure, nodes: Record<number, IGraphNode>, roots: number[]) {\r\n const reachable = new Set<number>();\r\n const q: number[] = [];\r\n\r\n for (const r of roots) {\r\n if (nodes[r]) {\r\n reachable.add(r);\r\n q.push(r);\r\n }\r\n }\r\n while (q.length > 0) {\r\n const u = q.shift()!;\r\n const ins = gs.incoming[u] || [];\r\n for (const conn of ins) {\r\n const v = conn.targetNodeId; // predecessor\r\n if (!reachable.has(v)) {\r\n reachable.add(v);\r\n q.push(v);\r\n }\r\n }\r\n }\r\n return reachable;\r\n }\r\n private getReverseTopologicalOrderFromRoots(\r\n gs: GraphStructure,\r\n nodes: Record<number, IGraphNode>,\r\n roots: number[]\r\n ) {\r\n if (!roots || roots.length === 0) {\r\n return { order: [], levels: [] };\r\n }\r\n const sub = this.collectReachableBackward(gs, nodes, roots);\r\n if (sub.size === 0) {\r\n return { order: [], levels: [] };\r\n }\r\n const outDegree = new Map<number, number>();\r\n for (const id of sub) {\r\n const outs = (gs.outgoing[id] || []).filter((c) => sub.has(c.targetNodeId));\r\n outDegree.set(id, outs.length);\r\n }\r\n let currentLevel = Array.from(outDegree.entries())\r\n .filter(([, deg]) => deg === 0)\r\n .map(([id]) => id);\r\n const result: number[] = [];\r\n const levels: number[][] = [];\r\n while (currentLevel.length > 0) {\r\n levels.push([...currentLevel]);\r\n result.push(...currentLevel);\r\n const nextLevel: number[] = [];\r\n for (const u of currentLevel) {\r\n const ins = gs.incoming[u] || [];\r\n for (const conn of ins) {\r\n const v = conn.targetNodeId; // predecessor\r\n if (!sub.has(v)) {\r\n continue;\r\n }\r\n const deg = outDegree.get(v)! - 1;\r\n outDegree.set(v, deg);\r\n if (deg === 0) {\r\n nextLevel.push(v);\r\n }\r\n }\r\n }\r\n currentLevel = nextLevel;\r\n }\r\n if (result.length !== sub.size) {\r\n console.warn('Subgraph contains cycles (from given roots).');\r\n return null;\r\n }\r\n return { order: result, levels };\r\n }\r\n createBluePrintDAG(\r\n nodeMap: Record<number, IGraphNode>,\r\n roots: number[],\r\n links: { startNodeId: number; startSlotId: number; endNodeId: number; endSlotId: number }[]\r\n ) {\r\n const gs = this.rebuildGraphStructure(nodeMap, links);\r\n for (const k in gs.incoming) {\r\n const node = nodeMap[k];\r\n for (const conn of gs.incoming[k]) {\r\n const input = node.inputs.find((input) => input.id === conn.endSlotId)!;\r\n input.inputNode = nodeMap[conn.targetNodeId];\r\n input.inputId = conn.startSlotId;\r\n }\r\n }\r\n return {\r\n graph: gs,\r\n nodeMap,\r\n roots,\r\n order: this.getReverseTopologicalOrderFromRoots(gs, nodeMap, roots)!.order.reverse()\r\n };\r\n }\r\n invalidateBluePrint(path: string) {\r\n delete this._bluePrints[path];\r\n }\r\n async loadBluePrint(path: string, VFSs?: VFS[]) {\r\n try {\r\n const content = (await this.readFileFromVFSs(path, { encoding: 'utf8' }, VFSs)) as string;\r\n const bp = JSON.parse(content) as {\r\n type: string;\r\n state: Record<string, BluePrintEditorState>;\r\n };\r\n ASSERT(\r\n bp.type === 'PBRMaterial' || bp.type === 'SpriteMaterial' || bp.type === 'MaterialFunction',\r\n `Unsupported blueprint type: ${bp.type}`\r\n );\r\n const states = bp.state;\r\n const result: Record<string, MaterialBlueprintIR> = {};\r\n for (const k of Object.keys(states)) {\r\n const roots: number[] = [];\r\n const nodeMap: Record<number, IGraphNode> = {};\r\n const state = states[k];\r\n for (const node of state.nodes) {\r\n const impl = await this._resourceManager.deserializeObject<IGraphNode>(null, node.node);\r\n nodeMap[node.id] = impl!;\r\n if (impl!.outputs.length === 0) {\r\n roots.push(node.id);\r\n }\r\n }\r\n const dag = await this.createBluePrintDAG(nodeMap, roots, state.links);\r\n result[k] = new MaterialBlueprintIR(dag, path, state);\r\n }\r\n return result;\r\n } catch (err) {\r\n const msg = `Load material failed: ${err}`;\r\n console.error(msg);\r\n return null;\r\n }\r\n }\r\n /**\r\n * Load a texture directly from an ArrayBuffer or typed array.\r\n *\r\n * - Chooses an appropriate loader based on the provided MIME type.\r\n * - Can upload into an existing texture if `texture` is specified.\r\n *\r\n * @typeParam T - Expected concrete texture type.\r\n * @param arrayBuffer - Raw texture data buffer.\r\n * @param mimeType - MIME type of the texture (must be supported by a registered loader).\r\n * @param srgb - If true, treat image as sRGB; otherwise linear.\r\n * @param samplerOptions - Optional sampler options passed to the loader path.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns A promise that resolves to the created or populated texture.\r\n */\r\n async loadTextureFromBuffer<T extends BaseTexture>(\r\n arrayBuffer: ArrayBuffer | TypedArray,\r\n mimeType: string,\r\n srgb?: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<T> {\r\n for (const loader of AssetManager._textureLoaders) {\r\n if (!loader.supportMIMEType(mimeType)) {\r\n continue;\r\n }\r\n const tex = await this.doLoadTexture(loader, mimeType, arrayBuffer, !!srgb, samplerOptions, texture);\r\n return tex as T;\r\n }\r\n throw new Error(`Can not find loader for MIME type '${mimeType}'`);\r\n }\r\n /**\r\n * Load a texture via VFS by URL and MIME type.\r\n *\r\n * - Uses the first loader that supports the inferred or provided MIME type.\r\n * - On WebGL, may repack textures (resample to power-of-two, convert formats) to meet backend constraints.\r\n * - If `texture` is provided, the source is blitted into it, possibly resizing or changing sampling accordingly.\r\n *\r\n * @param url - Texture URL or VFS path.\r\n * @param mimeType - Optional explicit MIME type; otherwise inferred by VFS.\r\n * @param srgb - If true, treat image as sRGB; otherwise linear.\r\n * @param samplerOptions - Optional sampler options for loader or blit path.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns A promise that resolves to the created or populated texture.\r\n * @internal\r\n */\r\n async loadTexture(\r\n url: string,\r\n mimeType?: Nullable<string>,\r\n srgb?: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: Nullable<BaseTexture>,\r\n VFSs?: VFS[]\r\n ) {\r\n const data = (await this.readFileFromVFSs(url, { encoding: 'binary' }, VFSs)) as ArrayBuffer;\r\n mimeType = mimeType ?? this.vfs.guessMIMEType(url);\r\n for (const loader of AssetManager._textureLoaders) {\r\n if (!loader.supportMIMEType(mimeType)) {\r\n continue;\r\n }\r\n const tex = await this.doLoadTexture(loader, mimeType, data, !!srgb, samplerOptions, texture);\r\n if (tex) {\r\n tex.name = this.vfs.basename(url);\r\n }\r\n return tex;\r\n }\r\n throw new Error(`Can not find loader for asset ${url}`);\r\n }\r\n /**\r\n * Internal routine that executes the texture load using a specific loader and applies\r\n * backend-specific compatibility steps (e.g., WebGL NPOT/sRGB rules).\r\n *\r\n * @param loader - Concrete loader to use for decoding/creation.\r\n * @param mimeType - Texture MIME type.\r\n * @param data - Raw binary data.\r\n * @param srgb - If true, treat image as sRGB; otherwise linear.\r\n * @param samplerOptions - Optional sampler options.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns A promise that resolves to the created or populated texture.\r\n * @internal\r\n */\r\n async doLoadTexture(\r\n loader: AbstractTextureLoader,\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: Nullable<BaseTexture>\r\n ) {\r\n const device = getDevice();\r\n if (device.type !== 'webgl') {\r\n return await loader.load(mimeType, data, srgb, samplerOptions, texture);\r\n } else {\r\n let tex = await loader.load(mimeType, data, srgb, samplerOptions);\r\n if (tex) {\r\n if (texture) {\r\n const magFilter =\r\n tex.width !== texture.width || tex.height !== texture.height ? 'linear' : 'nearest';\r\n const minFilter = magFilter;\r\n const mipFilter = 'none';\r\n const sampler = device.createSampler({\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter\r\n });\r\n const blitter = new CopyBlitter();\r\n blitter.blit(tex as any, texture as any, sampler);\r\n tex = texture;\r\n } else {\r\n const po2_w = isPowerOf2(tex.width);\r\n const po2_h = isPowerOf2(tex.height);\r\n const srgb = tex.isSRGBFormat();\r\n if (srgb || !po2_w || !po2_h) {\r\n const newWidth = po2_w ? tex.width : nextPowerOf2(tex.width);\r\n const newHeight = po2_h ? tex.height : nextPowerOf2(tex.height);\r\n const magFilter = newWidth !== tex.width || newHeight !== tex.height ? 'linear' : 'nearest';\r\n const minFilter = magFilter;\r\n const mipFilter = 'none';\r\n const sampler = device.createSampler({\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter\r\n });\r\n const destFormat = srgb ? 'rgba8unorm' : tex.format;\r\n const blitter = new CopyBlitter();\r\n const newTexture = tex.isTexture2D()\r\n ? device.createTexture2D(destFormat, newWidth, newHeight)\r\n : device.createCubeTexture(destFormat, newWidth);\r\n blitter.blit(tex as any, newTexture as any, sampler);\r\n tex.dispose();\r\n tex = newTexture;\r\n }\r\n }\r\n }\r\n return tex;\r\n }\r\n }\r\n /**\r\n * Load a model via registered model loaders.\r\n *\r\n * - Selects loader by MIME type (explicit or inferred).\r\n * - Optionally applies a post-process transform to the SharedModel.\r\n * - Sets the model's name from the source filename for convenience.\r\n *\r\n * @param url - Model URL or VFS path.\r\n * @param options - Model load options (MIME override, Draco module, post-process hook).\r\n * @returns A promise that resolves to the loaded SharedModel.\r\n * @internal\r\n */\r\n async loadModel(url: string, options?: ModelFetchOptions, VFSs?: VFS[]) {\r\n const arrayBuffer = (await this.readFileFromVFSs(url, { encoding: 'binary' }, VFSs)) as ArrayBuffer;\r\n const mimeType = options?.mimeType || this.vfs.guessMIMEType(url);\r\n const data = new Blob([arrayBuffer], { type: mimeType });\r\n const filename = this.vfs.basename(url);\r\n for (const loader of AssetManager._modelLoaders) {\r\n if (!loader.supportMIMEType(mimeType)) {\r\n continue;\r\n }\r\n let model = await loader.load(\r\n this,\r\n url,\r\n options?.mimeType || data.type,\r\n data,\r\n options?.dracoDecoderModule,\r\n VFSs\r\n );\r\n if (!model) {\r\n throw new Error(`Load asset failed: ${url}`);\r\n }\r\n if (options?.postProcess) {\r\n try {\r\n model = options.postProcess(model);\r\n } catch (err) {\r\n throw new Error(`Model loader post process failed: ${err}`);\r\n }\r\n }\r\n model.name = filename;\r\n return model;\r\n }\r\n throw new Error(`Can not find loader for asset ${url}`);\r\n }\r\n /**\r\n * Fetch a built-in texture synchronously by name.\r\n *\r\n * - If this built-in was not created yet, the registered loader is invoked.\r\n * - Registers a device restore handler so the texture can be re-initialized after device loss.\r\n * - If an existing texture is provided, the loader uploads into it.\r\n *\r\n * @typeParam T - Expected concrete texture type.\r\n * @param name - Built-in texture identifier.\r\n * @param texture - Optional destination texture to populate.\r\n * @returns The built-in texture (created or populated).\r\n */\r\n fetchBuiltinTexture<T extends BaseTexture>(name: string, texture?: T): T {\r\n const loader = AssetManager._builtinTextureLoaders[name];\r\n if (!loader) {\r\n throw new Error(`Unknown builtin texture name: ${name}`);\r\n }\r\n if (texture) {\r\n return loader(this, texture) as T;\r\n } else {\r\n texture = AssetManager._builtinTextures[name] as T;\r\n if (!texture) {\r\n texture = loader(this) as T;\r\n AssetManager._builtinTextures[name] = texture;\r\n }\r\n texture.restoreHandler = (tex) => {\r\n loader(this, tex as BaseTexture);\r\n };\r\n return texture;\r\n }\r\n }\r\n /**\r\n * Override or unregister the loader for a named built-in texture.\r\n *\r\n * - Passing a valid loader function sets/overrides the creation path.\r\n * - Passing `undefined` removes the loader mapping for the given name.\r\n *\r\n * @param name - Built-in texture identifier.\r\n * @param loader - Factory that creates the built-in texture using the provided AssetManager.\r\n */\r\n static setBuiltinTextureLoader(name: string, loader: (assetManager: AssetManager) => BaseTexture) {\r\n if (loader) {\r\n this._builtinTextureLoaders[name] = loader;\r\n } else {\r\n delete this._builtinTextureLoaders[name];\r\n }\r\n }\r\n /**\r\n * Compute a cache key for texture requests.\r\n *\r\n * Includes texture type tag, URL, and color space choice to avoid cross-color-space cache collisions.\r\n *\r\n * @typeParam T - Texture type parameter (not used for runtime behavior; helps preserve generic intent).\r\n * @param type - Logical texture type tag (e.g., '2d', 'cube').\r\n * @param url - Resource URL or VFS path.\r\n * @param options - Texture fetch options to incorporate into the key.\r\n * @returns A string cache key combining type, URL, and color space choice.\r\n * @internal\r\n */\r\n private getHash<T extends BaseTexture>(type: string, url: string, options?: TextureFetchOptions<T>) {\r\n return `${type}:${url}:${!options?.linearColorSpace}`;\r\n }\r\n /**\r\n * Try reading from file from a list of VFSs\r\n *\r\n * @param path - File path\r\n * @param options - Read options\r\n * @param vfsList - VFS list\r\n * @returns File content\r\n *\r\n * @internal\r\n */\r\n async readFileFromVFSs(path: string, options: ReadOptions, vfsList?: VFS[]) {\r\n vfsList = vfsList ?? [this.vfs];\r\n for (const vfs of vfsList) {\r\n try {\r\n return await vfs.readFile(path, options);\r\n } catch {}\r\n }\r\n throw new VFSError(`File does not exist: ${path}`, 'ENOENT', path);\r\n }\r\n /**\r\n * Write file to a list of VFSs\r\n *\r\n * @param path - File path\r\n * @param data - Data to write\r\n * @param options - Write options\r\n * @param vfsList - Which VFSs will be written to\r\n */\r\n async writeFileToVFSs(path: string, data: ArrayBuffer | string, options: WriteOptions, vfsList?: VFS[]) {\r\n vfsList = vfsList ?? [this.vfs];\r\n for (const vfs of vfsList) {\r\n await vfs.writeFile(path, data, options);\r\n }\r\n }\r\n}\r\n"],"names":["AssetManager","_builtinTextures","_builtinTextureLoaders","BUILTIN_ASSET_TEXTURE_SHEEN_LUT","getSheenLutLoader","_textureLoaders","WebImageLoader","DDSLoader","HDRLoader","TGALoader","_modelLoaders","GLTFLoader","resourceManager","_resourceManager","getEngine","_textures","_models","_materials","_primitives","_skeletons","_bluePrints","_binaryDatas","_textDatas","_jsonDatas","vfs","VFS","clearCache","k","Object","keys","v","DWeakRef","dispose","addTextureLoader","loader","unshift","addModelLoader","fetchTextData","url","postProcess","httpRequest","VFSs","hash","urlResolver","P","loadTextData","fetchJsonData","loadJsonData","fetchBinaryData","loadBinaryData","fetchBluePrint","loadBluePrint","fetchMaterial","get","disposed","loadMaterial","material","Promise","fetchPrimitive","loadPrimitive","primitive","fetchTexture","options","texture","loadTexture","mimeType","linearColorSpace","samplerOptions","getHash","tex","fetchModelData","loadModel","sharedModel","fetchModel","scene","node","createSceneNode","enableInstancing","group","animationSet","text","readFileFromVFSs","encoding","err","Error","json","JSON","parse","data","console","error","content","ASSERT","type","Primitive","vertices","vertexData","base64ToUint8Array","createAndSetVertexBuffer","format","indices","indexData","indexType","Uint16Array","buffer","Uint32Array","createAndSetIndexBuffer","primitiveType","indexCount","setBoundingVolume","BoundingBox","Vector3","boxMin","boxMax","obj","deserializeObject","reloadBluePrintMaterials","filter","promises","paths","m","push","resolve","materials","all","i","length","PBRBluePrintMaterial","loadBluePrintMaterialData","fragmentIR","irFragment","vertexIR","irVertex","uniformValues","uniformTextures","reload","irData","ir","IR","map","finalValue","value","Float32Array","textures","sRGB","finalTexture","DRef","finalSampler","getDevice","createSampler","addressU","wrapS","addressV","wrapT","minFilter","magFilter","mipFilter","params","Vector4","width","height","depth","mipLevelCount","zero","mat","SpriteBlueprintMaterial","Material","props","deserializeObjectProps","rebuildGraphStructure","nodes","links","gs","outgoing","incoming","nodeId","link","outConnection","targetNodeId","endNodeId","startSlotId","endSlotId","inConnection","startNodeId","collectReachableBackward","roots","reachable","Set","q","r","add","u","shift","ins","conn","has","getReverseTopologicalOrderFromRoots","order","levels","sub","size","outDegree","Map","id","outs","c","set","currentLevel","Array","from","entries","deg","result","nextLevel","warn","createBluePrintDAG","nodeMap","input","inputs","find","inputNode","inputId","graph","reverse","invalidateBluePrint","path","bp","states","state","impl","outputs","dag","MaterialBlueprintIR","msg","loadTextureFromBuffer","arrayBuffer","srgb","supportMIMEType","doLoadTexture","guessMIMEType","name","basename","device","load","sampler","blitter","CopyBlitter","blit","po2_w","isPowerOf2","po2_h","isSRGBFormat","newWidth","nextPowerOf2","newHeight","destFormat","newTexture","isTexture2D","createTexture2D","createCubeTexture","Blob","filename","model","dracoDecoderModule","fetchBuiltinTexture","restoreHandler","setBuiltinTextureLoader","vfsList","readFile","VFSError","writeFileToVFSs","writeFile"],"mappings":"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"}
|