@zephyr3d/scene 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animation.js +149 -27
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +173 -73
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +65 -10
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +41 -20
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +14 -38
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +59 -22
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +190 -0
- package/dist/animation/proptrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +29 -11
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +29 -11
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +241 -78
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +30 -11
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +43 -0
- package/dist/app/api.js.map +1 -0
- package/dist/app/app.js +153 -0
- package/dist/app/app.js.map +1 -0
- package/dist/app/engine.js +312 -0
- package/dist/app/engine.js.map +1 -0
- package/dist/app/inputmgr.js +351 -0
- package/dist/app/inputmgr.js.map +1 -0
- package/dist/app/runtimescript.js +62 -0
- package/dist/app/runtimescript.js.map +1 -0
- package/dist/app/scriptingsystem.js +220 -0
- package/dist/app/scriptingsystem.js.map +1 -0
- package/dist/app/scriptregistry.js +432 -0
- package/dist/app/scriptregistry.js.map +1 -0
- package/dist/asset/assetmanager.js +772 -291
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +7 -43
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +17 -93
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +8 -18
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +27 -14
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +17 -12
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +13 -16
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js +51 -50
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +158 -4
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +0 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +22 -23
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js +23 -23
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +141 -34
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +653 -149
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +2 -10
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +132 -59
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +37 -12
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +37 -20
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +18268 -6982
- package/dist/index.js +49 -16
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +5 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js +6 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js +6 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +346 -73
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +498 -156
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +5 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js +3 -3
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +6 -6
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +16 -4
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +134 -0
- package/dist/material/mixins/pbr/brdf.js.map +1 -0
- package/dist/material/mixins/pbr/common.js +68 -85
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +98 -83
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +6 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js +272 -0
- package/dist/material/particle.js.map +1 -0
- package/dist/material/pbrblueprint.js +186 -0
- package/dist/material/pbrblueprint.js.map +1 -0
- package/dist/material/pbrmr.js +10 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +10 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +521 -287
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/terrain-cm.js +607 -0
- package/dist/material/terrain-cm.js.map +1 -0
- package/dist/material/terrainmaterial.js +59 -54
- package/dist/material/terrainmaterial.js.map +1 -1
- package/dist/material/unlit.js +5 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +415 -0
- package/dist/material/water.js.map +1 -0
- 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/node_modules/es-module-lexer/dist/lexer.js +5 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
- package/dist/posteffect/bloom.js +39 -54
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +95 -128
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +10 -18
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +9 -17
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +105 -0
- package/dist/posteffect/motionblur.js.map +1 -0
- package/dist/posteffect/posteffect.js +66 -35
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +13 -21
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +60 -100
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js +175 -0
- package/dist/posteffect/taa.js.map +1 -0
- package/dist/posteffect/tonemap.js +12 -20
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +30 -19
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +429 -101
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +7 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +43 -3
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +14 -5
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +113 -40
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +86 -141
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +234 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -0
- package/dist/render/fft_wavegenerator.js +64 -50
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js +2 -2
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +98 -48
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +4 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +6 -3
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +19 -18
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -4
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +213 -104
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +40 -20
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderbundle_wrapper.js +65 -15
- package/dist/render/renderbundle_wrapper.js.map +1 -1
- package/dist/render/renderer.js +326 -185
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +20 -36
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadowmap_pass.js +3 -3
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +864 -541
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +13 -15
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/batchgroup.js +18 -5
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +78 -48
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +2 -3
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +28 -89
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +218 -87
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js +371 -162
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +684 -0
- package/dist/scene/particlesys.js.map +1 -0
- package/dist/scene/raycast_visitor.js +34 -5
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +309 -85
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +675 -102
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain/grass.js +48 -49
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/heightfield.js +46 -44
- package/dist/scene/terrain/heightfield.js.map +1 -1
- package/dist/scene/terrain/patch.js +20 -29
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +58 -27
- package/dist/scene/terrain/quadtree.js.map +1 -1
- package/dist/scene/terrain/terrain.js +31 -45
- package/dist/scene/terrain/terrain.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +603 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +160 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js +533 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/scene/water.js +378 -0
- package/dist/scene/water.js.map +1 -0
- package/dist/shaders/atmosphere.js +957 -0
- package/dist/shaders/atmosphere.js.map +1 -0
- package/dist/shaders/fog.js +116 -0
- package/dist/shaders/fog.js.map +1 -0
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +217 -8
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js +8 -8
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js +87 -39
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +216 -0
- package/dist/shaders/temporal.js.map +1 -0
- package/dist/shaders/water.js +42 -20
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +31 -13
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -13
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -13
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +38 -0
- package/dist/shadow/shader.js.map +1 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +67 -26
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +15 -16
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +33 -16
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +181 -83
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +101 -43
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +70 -29
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +120 -17
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +78 -44
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +256 -0
- package/dist/shapes/tetrahedron.js.map +1 -0
- package/dist/shapes/torus.js +76 -55
- 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/{app.js → src/app/app.js} +18 -40
- package/dist/src/app/app.js.map +1 -0
- package/dist/{input → src/app}/inputmgr.js +41 -16
- 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/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
- 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/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
- 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/aabbtree.js +15 -5
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +851 -0
- package/dist/utility/blueprint/common/constants.js.map +1 -0
- package/dist/utility/blueprint/common/math.js +2045 -0
- package/dist/utility/blueprint/common/math.js.map +1 -0
- package/dist/utility/blueprint/common.js +7 -0
- package/dist/utility/blueprint/common.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/func.js +521 -0
- package/dist/utility/blueprint/material/func.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1659 -0
- package/dist/utility/blueprint/material/inputs.js.map +1 -0
- package/dist/utility/blueprint/material/ir.js +1311 -0
- package/dist/utility/blueprint/material/ir.js.map +1 -0
- package/dist/utility/blueprint/material/pbr.js +362 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -0
- package/dist/utility/blueprint/material/texture.js +1099 -0
- package/dist/utility/blueprint/material/texture.js.map +1 -0
- package/dist/utility/blueprint/node.js +187 -0
- package/dist/utility/blueprint/node.js.map +1 -0
- package/dist/utility/bounding_volume.js +0 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js +26 -0
- package/dist/utility/debug.js.map +1 -0
- package/dist/utility/draco/decoder.js +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +18 -6
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js +8 -6
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js +30 -18
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js +116 -0
- package/dist/utility/rendermipmap.js.map +1 -0
- 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/json.js +402 -0
- package/dist/utility/serialization/json.js.map +1 -0
- package/dist/utility/serialization/manager.js +1176 -0
- package/dist/utility/serialization/manager.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +699 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -0
- package/dist/utility/serialization/scene/batch.js +53 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -0
- package/dist/utility/serialization/scene/camera.js +808 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +224 -0
- package/dist/utility/serialization/scene/common.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +589 -0
- package/dist/utility/serialization/scene/light.js.map +1 -0
- package/dist/utility/serialization/scene/material.js +942 -0
- package/dist/utility/serialization/scene/material.js.map +1 -0
- package/dist/utility/serialization/scene/mesh.js +374 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/utility/serialization/scene/misc.js +39 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -0
- package/dist/utility/serialization/scene/node.js +391 -0
- package/dist/utility/serialization/scene/node.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +425 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +582 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/utility/serialization/scene/scene.js +763 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +495 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +465 -0
- package/dist/utility/serialization/scene/water.js.map +1 -0
- package/dist/utility/shprojector.js +313 -0
- package/dist/utility/shprojector.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +4 -5
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js +2 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js +1 -0
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +91 -4
- package/dist/values.js.map +1 -1
- package/package.json +29 -15
- package/dist/app.js.map +0 -1
- package/dist/blitter/depthlimitedgaussion.js.map +0 -1
- package/dist/input/inputmgr.js.map +0 -1
- package/dist/material/mixins/ggxlut.js.map +0 -1
- package/dist/posteffect/water.js +0 -508
- package/dist/posteffect/water.js.map +0 -1
- package/dist/render/oit.js +0 -16
- package/dist/render/oit.js.map +0 -1
- package/dist/render/scatteringlut.js +0 -634
- package/dist/render/scatteringlut.js.map +0 -1
- package/dist/render/watermesh.js +0 -193
- package/dist/render/watermesh.js.map +0 -1
- package/dist/render/wavegenerator.js +0 -8
- package/dist/render/wavegenerator.js.map +0 -1
- package/dist/scene/xform.js +0 -247
- package/dist/scene/xform.js.map +0 -1
- package/dist/utility/shprojection.js +0 -442
- package/dist/utility/shprojection.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/asset/loaders/gltf/helpers.ts"],"sourcesContent":["import type { Accessor, AccessorSparse } from './gltf';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { GLTFContent } from './gltf_loader';\r\n\r\n/** @internal */\r\nexport const enum ComponentType {\r\n UNKNOWN = 0,\r\n BYTE = 5120, // GL.BYTE\r\n UBYTE = 5121, // GL.UNSIGNED_BYTE\r\n SHORT = 5122, // GL.SHORT\r\n USHORT = 5123, // GL.UNSIGNED_SHORT\r\n INT = 5124, // GL.INT\r\n UINT = 5125, // GL.UNSIGNED_INT\r\n FLOAT = 5126 // GL.FLOAT\r\n}\r\n\r\n/** @internal */\r\nexport type GLTFComponentType = 'SCALAR' | 'VEC2' | 'VEC3' | 'VEC4' | 'MAT2' | 'MAT3' | 'MAT4';\r\n\r\n/** @internal */\r\nexport class GLTFAccessor {\r\n bufferView: number;\r\n byteOffset: number;\r\n componentType: ComponentType;\r\n normalized: boolean;\r\n count: number;\r\n type: GLTFComponentType;\r\n max: number[];\r\n min: number[];\r\n sparse: AccessorSparse;\r\n name: string;\r\n private _typedView: TypedArray;\r\n private _filteredView: TypedArray;\r\n private _normalizedFilteredView: TypedArray;\r\n private _normalizedTypedView: TypedArray;\r\n constructor(accessorInfo: Accessor) {\r\n this.bufferView = accessorInfo.bufferView;\r\n this.byteOffset = accessorInfo.byteOffset ?? 0;\r\n this.componentType = accessorInfo.componentType;\r\n this.normalized = !!accessorInfo.normalized;\r\n this.count = accessorInfo.count;\r\n this.type = accessorInfo.type;\r\n this.max = accessorInfo.max;\r\n this.min = accessorInfo.min;\r\n this.sparse = accessorInfo.sparse;\r\n this.name = accessorInfo.name;\r\n this._typedView = null;\r\n this._filteredView = null;\r\n this._normalizedFilteredView = null;\r\n this._normalizedTypedView = null;\r\n }\r\n getTypedView(gltf: GLTFContent) {\r\n if (this._typedView) {\r\n return this._typedView;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews[this.bufferView];\r\n const buffer = gltf._loadedBuffers[bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n\r\n let arrayLength = 0;\r\n if (bufferView.byteStride !== undefined && bufferView.byteStride !== 0) {\r\n if (componentSize !== 0) {\r\n arrayLength = (bufferView.byteStride / componentSize) * (this.count - 1) + componentCount;\r\n } else {\r\n console.warn(\"Invalid component type in accessor '\" + (this.name ? this.name : '') + \"'\");\r\n }\r\n } else {\r\n arrayLength = this.count * componentCount;\r\n }\r\n\r\n if (arrayLength * componentSize > buffer.byteLength - byteOffset) {\r\n arrayLength = (buffer.byteLength - byteOffset) / componentSize;\r\n console.warn(\"Count in accessor '\" + (this.name ? this.name : '') + \"' is too large.\");\r\n }\r\n\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._typedView = new Int8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n this._typedView = new Uint8Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n this._typedView = new Int16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n this._typedView = new Uint16Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.INT:\r\n this._typedView = new Int32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n this._typedView = new Uint32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n this._typedView = new Float32Array(buffer, byteOffset, arrayLength);\r\n break;\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._typedView = this.createView();\r\n }\r\n\r\n if (!this._typedView) {\r\n console.warn('Failed to convert buffer view to typed view!: ' + this.bufferView);\r\n } else if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._typedView);\r\n }\r\n\r\n return this._typedView;\r\n }\r\n\r\n // getNormalizedTypedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedTypedView(gltf: GLTFContent) {\r\n if (this._normalizedTypedView) {\r\n return this._normalizedTypedView;\r\n }\r\n\r\n const typedView = this.getTypedView(gltf);\r\n this._normalizedTypedView = this.normalized\r\n ? GLTFAccessor.dequantize(typedView, this.componentType)\r\n : typedView;\r\n return this._normalizedTypedView;\r\n }\r\n\r\n // getDeinterlacedView provides a view to the accessors data in form of\r\n // a TypedArray. In contrast to getTypedView, getDeinterlacedView deinterlaces\r\n // data, i.e. stripping padding and unrelated components from the array. It then\r\n // only contains the data of the accessor\r\n getDeinterlacedView(gltf: GLTFContent) {\r\n if (this._filteredView) {\r\n return this._filteredView;\r\n }\r\n\r\n const componentSize = this.getComponentSize(this.componentType);\r\n const componentCount = this.getComponentCount(this.type);\r\n const arrayLength = this.count * componentCount;\r\n\r\n let func = 'getFloat32';\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n this._filteredView = new Int8Array(arrayLength);\r\n func = 'getInt8';\r\n break;\r\n case ComponentType.UBYTE:\r\n this._filteredView = new Uint8Array(arrayLength);\r\n func = 'getUint8';\r\n break;\r\n case ComponentType.SHORT:\r\n this._filteredView = new Int16Array(arrayLength);\r\n func = 'getInt16';\r\n break;\r\n case ComponentType.USHORT:\r\n this._filteredView = new Uint16Array(arrayLength);\r\n func = 'getUint16';\r\n break;\r\n case ComponentType.INT:\r\n this._filteredView = new Int32Array(arrayLength);\r\n func = 'getInt32';\r\n break;\r\n case ComponentType.UINT:\r\n this._filteredView = new Uint32Array(arrayLength);\r\n func = 'getUint32';\r\n break;\r\n case ComponentType.FLOAT:\r\n this._filteredView = new Float32Array(arrayLength);\r\n func = 'getFloat32';\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (this.bufferView !== undefined) {\r\n const bufferView = gltf.bufferViews[this.bufferView];\r\n const buffer = gltf._loadedBuffers[bufferView.buffer];\r\n const byteOffset = this.byteOffset + (bufferView.byteOffset ?? 0);\r\n const stride =\r\n bufferView.byteStride !== undefined && bufferView.byteStride !== 0\r\n ? bufferView.byteStride\r\n : componentCount * componentSize;\r\n const dataView = new DataView(buffer, byteOffset, this.count * stride);\r\n for (let i = 0; i < arrayLength; ++i) {\r\n const offset = Math.floor(i / componentCount) * stride + (i % componentCount) * componentSize;\r\n this._filteredView[i] = dataView[func](offset, true);\r\n }\r\n } else if (this.sparse !== undefined) {\r\n this._filteredView = this.createView();\r\n }\r\n\r\n if (this.sparse !== undefined) {\r\n this.applySparse(gltf, this._filteredView);\r\n }\r\n\r\n return this._filteredView;\r\n }\r\n\r\n createView() {\r\n const size = this.count * this.getComponentCount(this.type);\r\n if (this.componentType == ComponentType.BYTE) {\r\n return new Int8Array(size);\r\n }\r\n if (this.componentType == ComponentType.UBYTE) {\r\n return new Uint8Array(size);\r\n }\r\n if (this.componentType == ComponentType.SHORT) {\r\n return new Int16Array(size);\r\n }\r\n if (this.componentType == ComponentType.USHORT) {\r\n return new Uint16Array(size);\r\n }\r\n if (this.componentType == ComponentType.INT) {\r\n return new Int32Array(size);\r\n }\r\n if (this.componentType == ComponentType.UINT) {\r\n return new Uint32Array(size);\r\n }\r\n if (this.componentType == ComponentType.FLOAT) {\r\n return new Float32Array(size);\r\n }\r\n return undefined;\r\n }\r\n\r\n // getNormalizedDeinterlacedView provides an alternative view to the accessors data,\r\n // where quantized data is already normalized. This is useful if the data is not passed\r\n // to vertexAttribPointer but used immediately (like e.g. animations)\r\n getNormalizedDeinterlacedView(gltf: GLTFContent) {\r\n if (this._normalizedFilteredView) {\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n const filteredView = this.getDeinterlacedView(gltf);\r\n this._normalizedFilteredView = this.normalized\r\n ? GLTFAccessor.dequantize(filteredView, this.componentType)\r\n : filteredView;\r\n return this._normalizedFilteredView;\r\n }\r\n\r\n applySparse(gltf: GLTFContent, view: TypedArray) {\r\n // Gather indices.\r\n\r\n const indicesBufferView = gltf.bufferViews[this.sparse.indices.bufferView];\r\n const indicesBuffer = gltf._loadedBuffers[indicesBufferView.buffer];\r\n const indicesByteOffset = this.sparse.indices.byteOffset + (indicesBufferView.byteOffset ?? 0);\r\n\r\n const indicesComponentSize = this.getComponentSize(this.sparse.indices.componentType);\r\n let indicesComponentCount = 1;\r\n\r\n if (indicesBufferView.byteStride !== undefined && indicesBufferView.byteStride !== 0) {\r\n indicesComponentCount = indicesBufferView.byteStride / indicesComponentSize;\r\n }\r\n\r\n const indicesArrayLength = this.sparse.count * indicesComponentCount;\r\n\r\n let indicesTypedView;\r\n switch (this.sparse.indices.componentType) {\r\n case ComponentType.UBYTE:\r\n indicesTypedView = new Uint8Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n indicesTypedView = new Uint16Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n indicesTypedView = new Uint32Array(indicesBuffer, indicesByteOffset, indicesArrayLength);\r\n break;\r\n }\r\n\r\n // Gather values.\r\n\r\n const valuesBufferView = gltf.bufferViews[this.sparse.values.bufferView];\r\n const valuesBuffer = gltf._loadedBuffers[valuesBufferView.buffer];\r\n const valuesByteOffset = this.sparse.values.byteOffset + (valuesBufferView.byteOffset ?? 0);\r\n\r\n const valuesComponentSize = this.getComponentSize(this.componentType);\r\n let valuesComponentCount = this.getComponentCount(this.type);\r\n\r\n if (valuesBufferView.byteStride !== undefined && valuesBufferView.byteStride !== 0) {\r\n valuesComponentCount = valuesBufferView.byteStride / valuesComponentSize;\r\n }\r\n\r\n const valuesArrayLength = this.sparse.count * valuesComponentCount;\r\n\r\n let valuesTypedView: TypedArray;\r\n switch (this.componentType) {\r\n case ComponentType.BYTE:\r\n valuesTypedView = new Int8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UBYTE:\r\n valuesTypedView = new Uint8Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.SHORT:\r\n valuesTypedView = new Int16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.USHORT:\r\n valuesTypedView = new Uint16Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.INT:\r\n valuesTypedView = new Int32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.UINT:\r\n valuesTypedView = new Uint32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n case ComponentType.FLOAT:\r\n valuesTypedView = new Float32Array(valuesBuffer, valuesByteOffset, valuesArrayLength);\r\n break;\r\n }\r\n\r\n // Overwrite values.\r\n\r\n for (let i = 0; i < this.sparse.count; ++i) {\r\n for (let k = 0; k < valuesComponentCount; ++k) {\r\n view[indicesTypedView[i] * valuesComponentCount + k] = valuesTypedView[i * valuesComponentCount + k];\r\n }\r\n }\r\n }\r\n\r\n // dequantize can be used to perform the normalization from WebGL2 vertexAttribPointer explicitly\r\n static dequantize(typedArray: TypedArray, componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 127.0, -1.0));\r\n case ComponentType.UBYTE:\r\n return new Float32Array(typedArray).map((c) => c / 255.0);\r\n case ComponentType.SHORT:\r\n return new Float32Array(typedArray).map((c) => Math.max(c / 32767.0, -1.0));\r\n case ComponentType.USHORT:\r\n return new Float32Array(typedArray).map((c) => c / 65535.0);\r\n default:\r\n return typedArray;\r\n }\r\n }\r\n\r\n getComponentCount(type: GLTFComponentType) {\r\n switch (type) {\r\n case 'SCALAR':\r\n return 1;\r\n case 'VEC2':\r\n return 2;\r\n case 'VEC3':\r\n return 3;\r\n case 'VEC4':\r\n return 4;\r\n case 'MAT2':\r\n return 4;\r\n case 'MAT3':\r\n return 9;\r\n case 'MAT4':\r\n return 16;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n getComponentSize(componentType: ComponentType) {\r\n switch (componentType) {\r\n case ComponentType.BYTE:\r\n case ComponentType.UBYTE:\r\n return 1;\r\n case ComponentType.SHORT:\r\n case ComponentType.USHORT:\r\n return 2;\r\n case ComponentType.INT:\r\n case ComponentType.UINT:\r\n case ComponentType.FLOAT:\r\n return 4;\r\n default:\r\n return 0;\r\n }\r\n }\r\n}\r\n"],"names":["ComponentType","GLTFAccessor","bufferView","byteOffset","componentType","normalized","count","type","max","min","sparse","name","_typedView","_filteredView","_normalizedFilteredView","_normalizedTypedView","accessorInfo","getTypedView","gltf","undefined","bufferViews","buffer","_loadedBuffers","componentSize","getComponentSize","componentCount","getComponentCount","arrayLength","byteStride","console","warn","byteLength","Int8Array","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","createView","applySparse","getNormalizedTypedView","typedView","dequantize","getDeinterlacedView","func","stride","dataView","DataView","i","offset","Math","floor","size","getNormalizedDeinterlacedView","filteredView","view","indicesBufferView","indices","indicesBuffer","indicesByteOffset","indicesComponentSize","indicesComponentCount","indicesArrayLength","indicesTypedView","valuesBufferView","values","valuesBuffer","valuesByteOffset","valuesComponentSize","valuesComponentCount","valuesArrayLength","valuesTypedView","k","typedArray","map","c"],"mappings":"AAIA,iBACO,IAAWA,aAAAA,iBAAAA,SAAAA,aAAAA,EAAAA;;;;;;;;;AAAAA,IAAAA,OAAAA,aAAAA;AASjB,CAAA,CAAA,EAAA;AAKD,iBACO,MAAMC,YAAAA,CAAAA;IACXC,UAAmB;IACnBC,UAAmB;IACnBC,aAA6B;IAC7BC,UAAoB;IACpBC,KAAc;IACdC,IAAwB;IACxBC,GAAc;IACdC,GAAc;IACdC,MAAuB;IACvBC,IAAa;IACLC,UAAuB;IACvBC,aAA0B;IAC1BC,uBAAoC;IACpCC,oBAAiC;AACzC,IAAA,WAAA,CAAYC,YAAsB,CAAE;AAClC,QAAA,IAAI,CAACd,UAAU,GAAGc,YAAAA,CAAad,UAAU;AACzC,QAAA,IAAI,CAACC,UAAU,GAAGa,YAAAA,CAAab,UAAU,IAAI,CAAA;AAC7C,QAAA,IAAI,CAACC,aAAa,GAAGY,YAAAA,CAAaZ,aAAa;AAC/C,QAAA,IAAI,CAACC,UAAU,GAAG,CAAC,CAACW,aAAaX,UAAU;AAC3C,QAAA,IAAI,CAACC,KAAK,GAAGU,YAAAA,CAAaV,KAAK;AAC/B,QAAA,IAAI,CAACC,IAAI,GAAGS,YAAAA,CAAaT,IAAI;AAC7B,QAAA,IAAI,CAACC,GAAG,GAAGQ,YAAAA,CAAaR,GAAG;AAC3B,QAAA,IAAI,CAACC,GAAG,GAAGO,YAAAA,CAAaP,GAAG;AAC3B,QAAA,IAAI,CAACC,MAAM,GAAGM,YAAAA,CAAaN,MAAM;AACjC,QAAA,IAAI,CAACC,IAAI,GAAGK,YAAAA,CAAaL,IAAI;QAC7B,IAAI,CAACC,UAAU,GAAG,IAAA;QAClB,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,uBAAuB,GAAG,IAAA;QAC/B,IAAI,CAACC,oBAAoB,GAAG,IAAA;AAC9B;AACAE,IAAAA,YAAAA,CAAaC,IAAiB,EAAE;QAC9B,IAAI,IAAI,CAACN,UAAU,EAAE;YACnB,OAAO,IAAI,CAACA,UAAU;AACxB;AAEA,QAAA,IAAI,IAAI,CAACV,UAAU,KAAKiB,SAAW,EAAA;AACjC,YAAA,MAAMjB,aAAagB,IAAKE,CAAAA,WAAW,CAAC,IAAI,CAAClB,UAAU,CAAC;AACpD,YAAA,MAAMmB,SAASH,IAAKI,CAAAA,cAAc,CAACpB,UAAAA,CAAWmB,MAAM,CAAC;YACrD,MAAMlB,UAAAA,GAAa,IAAI,CAACA,UAAU,IAAID,UAAAA,CAAWC,UAAU,IAAI,CAAA,CAAA;AAE/D,YAAA,MAAMoB,gBAAgB,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAACpB,aAAa,CAAA;AAC9D,YAAA,MAAMqB,iBAAiB,IAAI,CAACC,iBAAiB,CAAC,IAAI,CAACnB,IAAI,CAAA;AAEvD,YAAA,IAAIoB,WAAc,GAAA,CAAA;AAClB,YAAA,IAAIzB,WAAW0B,UAAU,KAAKT,aAAajB,UAAW0B,CAAAA,UAAU,KAAK,CAAG,EAAA;AACtE,gBAAA,IAAIL,kBAAkB,CAAG,EAAA;oBACvBI,WAAc,GAACzB,UAAW0B,CAAAA,UAAU,GAAGL,aAAAA,IAAkB,IAAI,CAACjB,KAAK,GAAG,CAAA,CAAKmB,GAAAA,cAAAA;iBACtE,MAAA;AACLI,oBAAAA,OAAAA,CAAQC,IAAI,CAAC,sCAA0C,IAAA,IAAI,CAACnB,IAAI,GAAG,IAAI,CAACA,IAAI,GAAG,EAAC,CAAK,GAAA,GAAA,CAAA;AACvF;aACK,MAAA;gBACLgB,WAAc,GAAA,IAAI,CAACrB,KAAK,GAAGmB,cAAAA;AAC7B;AAEA,YAAA,IAAIE,WAAcJ,GAAAA,aAAAA,GAAgBF,MAAOU,CAAAA,UAAU,GAAG5B,UAAY,EAAA;AAChEwB,gBAAAA,WAAAA,GAAc,CAACN,MAAAA,CAAOU,UAAU,GAAG5B,UAAS,IAAKoB,aAAAA;AACjDM,gBAAAA,OAAAA,CAAQC,IAAI,CAAC,qBAAyB,IAAA,IAAI,CAACnB,IAAI,GAAG,IAAI,CAACA,IAAI,GAAG,EAAC,CAAK,GAAA,iBAAA,CAAA;AACtE;YAEA,OAAQ,IAAI,CAACP,aAAa;AACxB,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACQ,UAAU,GAAG,IAAIoB,SAAAA,CAAUX,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACpD,oBAAA;AACF,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACf,UAAU,GAAG,IAAIqB,UAAAA,CAAWZ,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACrD,oBAAA;AACF,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACf,UAAU,GAAG,IAAIsB,UAAAA,CAAWb,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACrD,oBAAA;AACF,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACf,UAAU,GAAG,IAAIuB,WAAAA,CAAYd,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACtD,oBAAA;AACF,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACf,UAAU,GAAG,IAAIwB,UAAAA,CAAWf,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACrD,oBAAA;AACF,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACf,UAAU,GAAG,IAAIyB,WAAAA,CAAYhB,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACtD,oBAAA;AACF,gBAAA,KAAA,IAAA;AACE,oBAAA,IAAI,CAACf,UAAU,GAAG,IAAI0B,YAAAA,CAAajB,QAAQlB,UAAYwB,EAAAA,WAAAA,CAAAA;AACvD,oBAAA;AACJ;AACF,SAAA,MAAO,IAAI,IAAI,CAACjB,MAAM,KAAKS,SAAW,EAAA;AACpC,YAAA,IAAI,CAACP,UAAU,GAAG,IAAI,CAAC2B,UAAU,EAAA;AACnC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC3B,UAAU,EAAE;AACpBiB,YAAAA,OAAAA,CAAQC,IAAI,CAAC,gDAAmD,GAAA,IAAI,CAAC5B,UAAU,CAAA;AACjF,SAAA,MAAO,IAAI,IAAI,CAACQ,MAAM,KAAKS,SAAW,EAAA;AACpC,YAAA,IAAI,CAACqB,WAAW,CAACtB,IAAM,EAAA,IAAI,CAACN,UAAU,CAAA;AACxC;QAEA,OAAO,IAAI,CAACA,UAAU;AACxB;;;;AAKA6B,IAAAA,sBAAAA,CAAuBvB,IAAiB,EAAE;QACxC,IAAI,IAAI,CAACH,oBAAoB,EAAE;YAC7B,OAAO,IAAI,CAACA,oBAAoB;AAClC;AAEA,QAAA,MAAM2B,SAAY,GAAA,IAAI,CAACzB,YAAY,CAACC,IAAAA,CAAAA;AACpC,QAAA,IAAI,CAACH,oBAAoB,GAAG,IAAI,CAACV,UAAU,GACvCJ,YAAa0C,CAAAA,UAAU,CAACD,SAAAA,EAAW,IAAI,CAACtC,aAAa,CACrDsC,GAAAA,SAAAA;QACJ,OAAO,IAAI,CAAC3B,oBAAoB;AAClC;;;;;AAMA6B,IAAAA,mBAAAA,CAAoB1B,IAAiB,EAAE;QACrC,IAAI,IAAI,CAACL,aAAa,EAAE;YACtB,OAAO,IAAI,CAACA,aAAa;AAC3B;AAEA,QAAA,MAAMU,gBAAgB,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAACpB,aAAa,CAAA;AAC9D,QAAA,MAAMqB,iBAAiB,IAAI,CAACC,iBAAiB,CAAC,IAAI,CAACnB,IAAI,CAAA;AACvD,QAAA,MAAMoB,WAAc,GAAA,IAAI,CAACrB,KAAK,GAAGmB,cAAAA;AAEjC,QAAA,IAAIoB,IAAO,GAAA,YAAA;QACX,OAAQ,IAAI,CAACzC,aAAa;AACxB,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAACS,aAAa,GAAG,IAAImB,SAAUL,CAAAA,WAAAA,CAAAA;gBACnCkB,IAAO,GAAA,SAAA;AACP,gBAAA;AACF,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAAChC,aAAa,GAAG,IAAIoB,UAAWN,CAAAA,WAAAA,CAAAA;gBACpCkB,IAAO,GAAA,UAAA;AACP,gBAAA;AACF,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAAChC,aAAa,GAAG,IAAIqB,UAAWP,CAAAA,WAAAA,CAAAA;gBACpCkB,IAAO,GAAA,UAAA;AACP,gBAAA;AACF,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAAChC,aAAa,GAAG,IAAIsB,WAAYR,CAAAA,WAAAA,CAAAA;gBACrCkB,IAAO,GAAA,WAAA;AACP,gBAAA;AACF,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAAChC,aAAa,GAAG,IAAIuB,UAAWT,CAAAA,WAAAA,CAAAA;gBACpCkB,IAAO,GAAA,UAAA;AACP,gBAAA;AACF,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAAChC,aAAa,GAAG,IAAIwB,WAAYV,CAAAA,WAAAA,CAAAA;gBACrCkB,IAAO,GAAA,WAAA;AACP,gBAAA;AACF,YAAA,KAAA,IAAA;AACE,gBAAA,IAAI,CAAChC,aAAa,GAAG,IAAIyB,YAAaX,CAAAA,WAAAA,CAAAA;gBACtCkB,IAAO,GAAA,YAAA;AACP,gBAAA;AACF,YAAA;AACE,gBAAA;AACJ;AAEA,QAAA,IAAI,IAAI,CAAC3C,UAAU,KAAKiB,SAAW,EAAA;AACjC,YAAA,MAAMjB,aAAagB,IAAKE,CAAAA,WAAW,CAAC,IAAI,CAAClB,UAAU,CAAC;AACpD,YAAA,MAAMmB,SAASH,IAAKI,CAAAA,cAAc,CAACpB,UAAAA,CAAWmB,MAAM,CAAC;YACrD,MAAMlB,UAAAA,GAAa,IAAI,CAACA,UAAU,IAAID,UAAAA,CAAWC,UAAU,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAM2C,MACJ5C,GAAAA,UAAAA,CAAW0B,UAAU,KAAKT,SAAajB,IAAAA,UAAAA,CAAW0B,UAAU,KAAK,CAC7D1B,GAAAA,UAAAA,CAAW0B,UAAU,GACrBH,cAAiBF,GAAAA,aAAAA;YACvB,MAAMwB,QAAAA,GAAW,IAAIC,QAAS3B,CAAAA,MAAAA,EAAQlB,YAAY,IAAI,CAACG,KAAK,GAAGwC,MAAAA,CAAAA;AAC/D,YAAA,IAAK,IAAIG,CAAI,GAAA,CAAA,EAAGA,CAAItB,GAAAA,WAAAA,EAAa,EAAEsB,CAAG,CAAA;gBACpC,MAAMC,MAAAA,GAASC,KAAKC,KAAK,CAACH,IAAIxB,cAAkBqB,CAAAA,GAAAA,MAAAA,GAAS,CAACG,GAAIxB,cAAkBF,GAAAA,aAAAA;gBAChF,IAAI,CAACV,aAAa,CAACoC,CAAAA,CAAE,GAAGF,QAAQ,CAACF,IAAK,CAAA,CAACK,MAAQ,EAAA,IAAA,CAAA;AACjD;AACF,SAAA,MAAO,IAAI,IAAI,CAACxC,MAAM,KAAKS,SAAW,EAAA;AACpC,YAAA,IAAI,CAACN,aAAa,GAAG,IAAI,CAAC0B,UAAU,EAAA;AACtC;AAEA,QAAA,IAAI,IAAI,CAAC7B,MAAM,KAAKS,SAAW,EAAA;AAC7B,YAAA,IAAI,CAACqB,WAAW,CAACtB,IAAM,EAAA,IAAI,CAACL,aAAa,CAAA;AAC3C;QAEA,OAAO,IAAI,CAACA,aAAa;AAC3B;IAEA0B,UAAa,GAAA;QACX,MAAMc,IAAAA,GAAO,IAAI,CAAC/C,KAAK,GAAG,IAAI,CAACoB,iBAAiB,CAAC,IAAI,CAACnB,IAAI,CAAA;QAC1D,IAAI,IAAI,CAACH,aAAa,IAAwB,IAAA,EAAA;AAC5C,YAAA,OAAO,IAAI4B,SAAUqB,CAAAA,IAAAA,CAAAA;AACvB;QACA,IAAI,IAAI,CAACjD,aAAa,IAAyB,IAAA,EAAA;AAC7C,YAAA,OAAO,IAAI6B,UAAWoB,CAAAA,IAAAA,CAAAA;AACxB;QACA,IAAI,IAAI,CAACjD,aAAa,IAAyB,IAAA,EAAA;AAC7C,YAAA,OAAO,IAAI8B,UAAWmB,CAAAA,IAAAA,CAAAA;AACxB;QACA,IAAI,IAAI,CAACjD,aAAa,IAA0B,IAAA,EAAA;AAC9C,YAAA,OAAO,IAAI+B,WAAYkB,CAAAA,IAAAA,CAAAA;AACzB;QACA,IAAI,IAAI,CAACjD,aAAa,IAAuB,IAAA,EAAA;AAC3C,YAAA,OAAO,IAAIgC,UAAWiB,CAAAA,IAAAA,CAAAA;AACxB;QACA,IAAI,IAAI,CAACjD,aAAa,IAAwB,IAAA,EAAA;AAC5C,YAAA,OAAO,IAAIiC,WAAYgB,CAAAA,IAAAA,CAAAA;AACzB;QACA,IAAI,IAAI,CAACjD,aAAa,IAAyB,IAAA,EAAA;AAC7C,YAAA,OAAO,IAAIkC,YAAae,CAAAA,IAAAA,CAAAA;AAC1B;QACA,OAAOlC,SAAAA;AACT;;;;AAKAmC,IAAAA,6BAAAA,CAA8BpC,IAAiB,EAAE;QAC/C,IAAI,IAAI,CAACJ,uBAAuB,EAAE;YAChC,OAAO,IAAI,CAACA,uBAAuB;AACrC;AAEA,QAAA,MAAMyC,YAAe,GAAA,IAAI,CAACX,mBAAmB,CAAC1B,IAAAA,CAAAA;AAC9C,QAAA,IAAI,CAACJ,uBAAuB,GAAG,IAAI,CAACT,UAAU,GAC1CJ,YAAa0C,CAAAA,UAAU,CAACY,YAAAA,EAAc,IAAI,CAACnD,aAAa,CACxDmD,GAAAA,YAAAA;QACJ,OAAO,IAAI,CAACzC,uBAAuB;AACrC;IAEA0B,WAAYtB,CAAAA,IAAiB,EAAEsC,IAAgB,EAAE;;QAG/C,MAAMC,iBAAAA,GAAoBvC,IAAKE,CAAAA,WAAW,CAAC,IAAI,CAACV,MAAM,CAACgD,OAAO,CAACxD,UAAU,CAAC;AAC1E,QAAA,MAAMyD,gBAAgBzC,IAAKI,CAAAA,cAAc,CAACmC,iBAAAA,CAAkBpC,MAAM,CAAC;AACnE,QAAA,MAAMuC,iBAAoB,GAAA,IAAI,CAAClD,MAAM,CAACgD,OAAO,CAACvD,UAAU,IAAIsD,iBAAkBtD,CAAAA,UAAU,IAAI,CAAA,CAAA;QAE5F,MAAM0D,oBAAAA,GAAuB,IAAI,CAACrC,gBAAgB,CAAC,IAAI,CAACd,MAAM,CAACgD,OAAO,CAACtD,aAAa,CAAA;AACpF,QAAA,IAAI0D,qBAAwB,GAAA,CAAA;AAE5B,QAAA,IAAIL,kBAAkB7B,UAAU,KAAKT,aAAasC,iBAAkB7B,CAAAA,UAAU,KAAK,CAAG,EAAA;YACpFkC,qBAAwBL,GAAAA,iBAAAA,CAAkB7B,UAAU,GAAGiC,oBAAAA;AACzD;AAEA,QAAA,MAAME,qBAAqB,IAAI,CAACrD,MAAM,CAACJ,KAAK,GAAGwD,qBAAAA;QAE/C,IAAIE,gBAAAA;AACJ,QAAA,OAAQ,IAAI,CAACtD,MAAM,CAACgD,OAAO,CAACtD,aAAa;AACvC,YAAA,KAAA,IAAA;gBACE4D,gBAAmB,GAAA,IAAI/B,UAAW0B,CAAAA,aAAAA,EAAeC,iBAAmBG,EAAAA,kBAAAA,CAAAA;AACpE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,gBAAmB,GAAA,IAAI7B,WAAYwB,CAAAA,aAAAA,EAAeC,iBAAmBG,EAAAA,kBAAAA,CAAAA;AACrE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,gBAAmB,GAAA,IAAI3B,WAAYsB,CAAAA,aAAAA,EAAeC,iBAAmBG,EAAAA,kBAAAA,CAAAA;AACrE,gBAAA;AACJ;;QAIA,MAAME,gBAAAA,GAAmB/C,IAAKE,CAAAA,WAAW,CAAC,IAAI,CAACV,MAAM,CAACwD,MAAM,CAAChE,UAAU,CAAC;AACxE,QAAA,MAAMiE,eAAejD,IAAKI,CAAAA,cAAc,CAAC2C,gBAAAA,CAAiB5C,MAAM,CAAC;AACjE,QAAA,MAAM+C,gBAAmB,GAAA,IAAI,CAAC1D,MAAM,CAACwD,MAAM,CAAC/D,UAAU,IAAI8D,gBAAiB9D,CAAAA,UAAU,IAAI,CAAA,CAAA;AAEzF,QAAA,MAAMkE,sBAAsB,IAAI,CAAC7C,gBAAgB,CAAC,IAAI,CAACpB,aAAa,CAAA;AACpE,QAAA,IAAIkE,uBAAuB,IAAI,CAAC5C,iBAAiB,CAAC,IAAI,CAACnB,IAAI,CAAA;AAE3D,QAAA,IAAI0D,iBAAiBrC,UAAU,KAAKT,aAAa8C,gBAAiBrC,CAAAA,UAAU,KAAK,CAAG,EAAA;YAClF0C,oBAAuBL,GAAAA,gBAAAA,CAAiBrC,UAAU,GAAGyC,mBAAAA;AACvD;AAEA,QAAA,MAAME,oBAAoB,IAAI,CAAC7D,MAAM,CAACJ,KAAK,GAAGgE,oBAAAA;QAE9C,IAAIE,eAAAA;QACJ,OAAQ,IAAI,CAACpE,aAAa;AACxB,YAAA,KAAA,IAAA;gBACEoE,eAAkB,GAAA,IAAIxC,SAAUmC,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AAChE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,eAAkB,GAAA,IAAIvC,UAAWkC,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AACjE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,eAAkB,GAAA,IAAItC,UAAWiC,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AACjE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,eAAkB,GAAA,IAAIrC,WAAYgC,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AAClE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,eAAkB,GAAA,IAAIpC,UAAW+B,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AACjE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,eAAkB,GAAA,IAAInC,WAAY8B,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AAClE,gBAAA;AACF,YAAA,KAAA,IAAA;gBACEC,eAAkB,GAAA,IAAIlC,YAAa6B,CAAAA,YAAAA,EAAcC,gBAAkBG,EAAAA,iBAAAA,CAAAA;AACnE,gBAAA;AACJ;;QAIA,IAAK,IAAItB,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAACvC,MAAM,CAACJ,KAAK,EAAE,EAAE2C,CAAG,CAAA;AAC1C,YAAA,IAAK,IAAIwB,CAAI,GAAA,CAAA,EAAGA,CAAIH,GAAAA,oBAAAA,EAAsB,EAAEG,CAAG,CAAA;AAC7CjB,gBAAAA,IAAI,CAACQ,gBAAgB,CAACf,CAAAA,CAAE,GAAGqB,oBAAAA,GAAuBG,CAAE,CAAA,GAAGD,eAAe,CAACvB,CAAIqB,GAAAA,oBAAAA,GAAuBG,CAAE,CAAA;AACtG;AACF;AACF;;AAGA,IAAA,OAAO9B,UAAW+B,CAAAA,UAAsB,EAAEtE,aAA4B,EAAE;QACtE,OAAQA,aAAAA;AACN,YAAA,KAAA,IAAA;AACE,gBAAA,OAAO,IAAIkC,YAAAA,CAAaoC,UAAYC,CAAAA,CAAAA,GAAG,CAAC,CAACC,CAAMzB,GAAAA,IAAAA,CAAK3C,GAAG,CAACoE,CAAI,GAAA,KAAA,EAAO,EAAC,CAAA,CAAA;AACtE,YAAA,KAAA,IAAA;AACE,gBAAA,OAAO,IAAItC,YAAaoC,CAAAA,UAAAA,CAAAA,CAAYC,GAAG,CAAC,CAACC,IAAMA,CAAI,GAAA,KAAA,CAAA;AACrD,YAAA,KAAA,IAAA;AACE,gBAAA,OAAO,IAAItC,YAAAA,CAAaoC,UAAYC,CAAAA,CAAAA,GAAG,CAAC,CAACC,CAAMzB,GAAAA,IAAAA,CAAK3C,GAAG,CAACoE,CAAI,GAAA,OAAA,EAAS,EAAC,CAAA,CAAA;AACxE,YAAA,KAAA,IAAA;AACE,gBAAA,OAAO,IAAItC,YAAaoC,CAAAA,UAAAA,CAAAA,CAAYC,GAAG,CAAC,CAACC,IAAMA,CAAI,GAAA,OAAA,CAAA;AACrD,YAAA;gBACE,OAAOF,UAAAA;AACX;AACF;AAEAhD,IAAAA,iBAAAA,CAAkBnB,IAAuB,EAAE;QACzC,OAAQA,IAAAA;YACN,KAAK,QAAA;gBACH,OAAO,CAAA;YACT,KAAK,MAAA;gBACH,OAAO,CAAA;YACT,KAAK,MAAA;gBACH,OAAO,CAAA;YACT,KAAK,MAAA;gBACH,OAAO,CAAA;YACT,KAAK,MAAA;gBACH,OAAO,CAAA;YACT,KAAK,MAAA;gBACH,OAAO,CAAA;YACT,KAAK,MAAA;gBACH,OAAO,EAAA;AACT,YAAA;gBACE,OAAO,CAAA;AACX;AACF;AAEAiB,IAAAA,gBAAAA,CAAiBpB,aAA4B,EAAE;QAC7C,OAAQA,aAAAA;AACN,YAAA,KAAA,IAAA;AACA,YAAA,KAAA,IAAA;gBACE,OAAO,CAAA;AACT,YAAA,KAAA,IAAA;AACA,YAAA,KAAA,IAAA;gBACE,OAAO,CAAA;AACT,YAAA,KAAA,IAAA;AACA,YAAA,KAAA,IAAA;AACA,YAAA,KAAA,IAAA;gBACE,OAAO,CAAA;AACT,YAAA;gBACE,OAAO,CAAA;AACX;AACF;AACF;;;;"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { AbstractTextureLoader } from '../loader.js';
|
|
2
|
+
import { floatToHalf, packFloat3 } from '@zephyr3d/base';
|
|
3
|
+
import { Application } from '../../../app/app.js';
|
|
4
|
+
|
|
5
|
+
const _f16one = floatToHalf(1);
|
|
6
|
+
/**
|
|
7
|
+
* The HDR texture loader
|
|
8
|
+
* @internal
|
|
9
|
+
*/ class HDRLoader extends AbstractTextureLoader {
|
|
10
|
+
supportMIMEType(mimeType) {
|
|
11
|
+
return mimeType === 'image/hdr' || mimeType === 'image/x-hdr' || mimeType === 'image/vnd.radiance';
|
|
12
|
+
}
|
|
13
|
+
async load(mimeType, data, srgb, samplerOptions, texture) {
|
|
14
|
+
let format;
|
|
15
|
+
for (const fmt of [
|
|
16
|
+
'rg11b10uf',
|
|
17
|
+
'rgba16f',
|
|
18
|
+
'rgba32f',
|
|
19
|
+
'rgba8unorm'
|
|
20
|
+
]){
|
|
21
|
+
const info = Application.instance.device.getDeviceCaps().textureCaps.getTextureFormatInfo(fmt);
|
|
22
|
+
if (info && info.filterable && info.renderable) {
|
|
23
|
+
format = fmt;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const arrayBuffer = data instanceof ArrayBuffer ? data : data.buffer;
|
|
28
|
+
const offset = data instanceof ArrayBuffer ? 0 : data.byteOffset;
|
|
29
|
+
const textureData = await this.loadHDR(new Uint8Array(arrayBuffer, offset), format);
|
|
30
|
+
const options = {
|
|
31
|
+
texture: texture,
|
|
32
|
+
samplerOptions
|
|
33
|
+
};
|
|
34
|
+
const tex = Application.instance.device.createTexture2D(format, textureData.width, textureData.height, options);
|
|
35
|
+
tex.update(textureData.dataFloat, 0, 0, textureData.width, textureData.height);
|
|
36
|
+
return tex;
|
|
37
|
+
}
|
|
38
|
+
_rgbeToFloat32(buffer) {
|
|
39
|
+
const length = buffer.byteLength >> 2;
|
|
40
|
+
const result = new Float32Array(length * 4);
|
|
41
|
+
for(let i = 0; i < length; i++){
|
|
42
|
+
const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
|
|
43
|
+
result[i * 4] = buffer[i * 4] * s;
|
|
44
|
+
result[i * 4 + 1] = buffer[i * 4 + 1] * s;
|
|
45
|
+
result[i * 4 + 2] = buffer[i * 4 + 2] * s;
|
|
46
|
+
result[i * 4 + 3] = 1;
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
_rgbeToFloat16(buffer) {
|
|
51
|
+
const length = buffer.byteLength >> 2;
|
|
52
|
+
const result = new Uint16Array(length * 4);
|
|
53
|
+
for(let i = 0; i < length; i++){
|
|
54
|
+
const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
|
|
55
|
+
result[i * 4 + 0] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4] * s, 65504)));
|
|
56
|
+
result[i * 4 + 1] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 1] * s, 65504)));
|
|
57
|
+
result[i * 4 + 2] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 2] * s, 65504)));
|
|
58
|
+
result[i * 4 + 3] = _f16one;
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
_rgbeToR11G11B10(buffer) {
|
|
63
|
+
const length = buffer.byteLength >> 2;
|
|
64
|
+
const result = new Uint32Array(length);
|
|
65
|
+
for(let i = 0; i < length; i++){
|
|
66
|
+
const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
|
|
67
|
+
const r = buffer[i * 4] * s;
|
|
68
|
+
const g = buffer[i * 4 + 1] * s;
|
|
69
|
+
const b = buffer[i * 4 + 2] * s;
|
|
70
|
+
result[i] = packFloat3(r, g, b);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
/*
|
|
75
|
+
Decode: rgb = pow(6 * rgbm.rgb * rgbm.a, 2.2);
|
|
76
|
+
*/ _rgbeToRGBM(buffer) {
|
|
77
|
+
const length = buffer.byteLength >> 2;
|
|
78
|
+
const result = new Uint8Array(length * 4);
|
|
79
|
+
for(let i = 0; i < length; i++){
|
|
80
|
+
const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));
|
|
81
|
+
const r = Math.pow(buffer[i * 4] * s, 1 / 2.2);
|
|
82
|
+
const g = Math.pow(buffer[i * 4 + 1] * s, 1 / 2.2);
|
|
83
|
+
const b = Math.pow(buffer[i * 4 + 2] * s, 1 / 2.2);
|
|
84
|
+
const rgbMax = Math.max(r, g, b);
|
|
85
|
+
const M = Math.ceil(255 * rgbMax / 6) / 255;
|
|
86
|
+
const t = M * 6;
|
|
87
|
+
result[i * 4] = Math.ceil(255 * r / t);
|
|
88
|
+
result[i * 4 + 1] = Math.ceil(255 * g / t);
|
|
89
|
+
result[i * 4 + 2] = Math.ceil(255 * b / t);
|
|
90
|
+
result[i * 4 + 3] = Math.ceil(255 * Math.min(M, 1));
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
async loadHDR(buffer, dstFormat) {
|
|
95
|
+
let header = '';
|
|
96
|
+
let pos = 0;
|
|
97
|
+
const d8 = buffer;
|
|
98
|
+
let format = undefined;
|
|
99
|
+
// read header.
|
|
100
|
+
while(!header.match(/\n\n[^\n]+\n/g)){
|
|
101
|
+
header += String.fromCodePoint(d8[pos++]);
|
|
102
|
+
}
|
|
103
|
+
// check format.
|
|
104
|
+
format = header.match(/FORMAT=(.*)$/m);
|
|
105
|
+
if (format.length < 2) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
format = format[1];
|
|
109
|
+
if (format != '32-bit_rle_rgbe') {
|
|
110
|
+
console.warn('unknown format : ' + format);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
// parse resolution
|
|
114
|
+
let rez = header.split(/\n/).reverse();
|
|
115
|
+
if (rez.length < 2) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
rez = rez[1].split(' ');
|
|
119
|
+
if (rez.length < 4) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
const width = Number(rez[3]) * 1, height = Number(rez[1]) * 1;
|
|
123
|
+
// Create image.
|
|
124
|
+
const img = new Uint8Array(width * height * 4);
|
|
125
|
+
let ipos = 0;
|
|
126
|
+
// Read all scanlines
|
|
127
|
+
for(let j = 0; j < height; j++){
|
|
128
|
+
const scanline = [];
|
|
129
|
+
let rgbe = d8.slice(pos, pos += 4);
|
|
130
|
+
const isNewRLE = rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == (width >> 8 & 0xff) && rgbe[3] == (width & 0xff);
|
|
131
|
+
if (isNewRLE && width >= 8 && width < 32768) {
|
|
132
|
+
for(let i = 0; i < 4; i++){
|
|
133
|
+
let ptr = i * width;
|
|
134
|
+
const ptr_end = (i + 1) * width;
|
|
135
|
+
let buf = undefined;
|
|
136
|
+
let count = undefined;
|
|
137
|
+
while(ptr < ptr_end){
|
|
138
|
+
buf = d8.slice(pos, pos += 2);
|
|
139
|
+
if (buf[0] > 128) {
|
|
140
|
+
count = buf[0] - 128;
|
|
141
|
+
while(count-- > 0){
|
|
142
|
+
scanline[ptr++] = buf[1];
|
|
143
|
+
}
|
|
144
|
+
} else {
|
|
145
|
+
count = buf[0] - 1;
|
|
146
|
+
scanline[ptr++] = buf[1];
|
|
147
|
+
while(count-- > 0){
|
|
148
|
+
scanline[ptr++] = d8[pos++];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
for(let i = 0; i < width; i++){
|
|
154
|
+
img[ipos++] = scanline[i + 0 * width];
|
|
155
|
+
img[ipos++] = scanline[i + 1 * width];
|
|
156
|
+
img[ipos++] = scanline[i + 2 * width];
|
|
157
|
+
img[ipos++] = scanline[i + 3 * width];
|
|
158
|
+
}
|
|
159
|
+
} else {
|
|
160
|
+
pos -= 4;
|
|
161
|
+
for(let i = 0; i < width; i++){
|
|
162
|
+
rgbe = d8.slice(pos, pos += 4);
|
|
163
|
+
img[ipos++] = rgbe[0];
|
|
164
|
+
img[ipos++] = rgbe[1];
|
|
165
|
+
img[ipos++] = rgbe[2];
|
|
166
|
+
img[ipos++] = rgbe[3];
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const imageFloatBuffer = dstFormat === 'rgba32f' ? this._rgbeToFloat32(img) : dstFormat === 'rgba16f' ? this._rgbeToFloat16(img) : dstFormat === 'rg11b10uf' ? this._rgbeToR11G11B10(img) : this._rgbeToRGBM(img);
|
|
171
|
+
return {
|
|
172
|
+
dataFloat: imageFloatBuffer,
|
|
173
|
+
width: width,
|
|
174
|
+
height: height
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export { HDRLoader };
|
|
180
|
+
//# sourceMappingURL=hdr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdr.js","sources":["../../../../../src/asset/loaders/hdr/hdr.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\nimport type { TypedArray } from '@zephyr3d/base';\nimport { floatToHalf, packFloat3 } from '@zephyr3d/base';\nimport { Application } from '../../../app';\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions, TextureFormat } from '@zephyr3d/device';\n\nconst _f16one = floatToHalf(1);\n/**\n * The HDR texture loader\n * @internal\n */\nexport class HDRLoader extends AbstractTextureLoader {\n supportMIMEType(mimeType: string): boolean {\n return mimeType === 'image/hdr' || mimeType === 'image/x-hdr' || mimeType === 'image/vnd.radiance';\n }\n async load(\n mimeType: string,\n data: ArrayBuffer | TypedArray,\n srgb: boolean,\n samplerOptions?: SamplerOptions,\n texture?: BaseTexture\n ): Promise<BaseTexture> {\n let format: TextureFormat;\n for (const fmt of ['rg11b10uf', 'rgba16f', 'rgba32f', 'rgba8unorm'] as const) {\n const info = Application.instance.device.getDeviceCaps().textureCaps.getTextureFormatInfo(fmt);\n if (info && info.filterable && info.renderable) {\n format = fmt;\n break;\n }\n }\n const arrayBuffer = data instanceof ArrayBuffer ? data : data.buffer;\n const offset = data instanceof ArrayBuffer ? 0 : data.byteOffset;\n const textureData = await this.loadHDR(new Uint8Array(arrayBuffer, offset), format);\n const options: TextureCreationOptions = {\n texture: texture,\n samplerOptions\n };\n const tex = Application.instance.device.createTexture2D(\n format,\n textureData.width,\n textureData.height,\n options\n );\n tex.update(textureData.dataFloat, 0, 0, textureData.width, textureData.height);\n return tex;\n }\n private _rgbeToFloat32(buffer: Uint8Array<ArrayBuffer>): Float32Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Float32Array(length * 4);\n\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n\n result[i * 4] = buffer[i * 4] * s;\n result[i * 4 + 1] = buffer[i * 4 + 1] * s;\n result[i * 4 + 2] = buffer[i * 4 + 2] * s;\n result[i * 4 + 3] = 1;\n }\n return result;\n }\n private _rgbeToFloat16(buffer: Uint8Array<ArrayBuffer>): Uint16Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Uint16Array(length * 4);\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n result[i * 4 + 0] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4] * s, 65504)));\n result[i * 4 + 1] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 1] * s, 65504)));\n result[i * 4 + 2] = floatToHalf(Math.max(-65504, Math.min(buffer[i * 4 + 2] * s, 65504)));\n result[i * 4 + 3] = _f16one;\n }\n return result;\n }\n private _rgbeToR11G11B10(buffer: Uint8Array<ArrayBuffer>): Uint32Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Uint32Array(length);\n\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n const r = buffer[i * 4] * s;\n const g = buffer[i * 4 + 1] * s;\n const b = buffer[i * 4 + 2] * s;\n result[i] = packFloat3(r, g, b);\n }\n return result;\n }\n /*\n Decode: rgb = pow(6 * rgbm.rgb * rgbm.a, 2.2);\n */\n private _rgbeToRGBM(buffer: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer> {\n const length = buffer.byteLength >> 2;\n const result = new Uint8Array(length * 4);\n\n for (let i = 0; i < length; i++) {\n const s = Math.pow(2, buffer[i * 4 + 3] - (128 + 8));\n const r = Math.pow(buffer[i * 4] * s, 1 / 2.2);\n const g = Math.pow(buffer[i * 4 + 1] * s, 1 / 2.2);\n const b = Math.pow(buffer[i * 4 + 2] * s, 1 / 2.2);\n const rgbMax = Math.max(r, g, b);\n const M = Math.ceil((255 * rgbMax) / 6) / 255;\n const t = M * 6;\n result[i * 4] = Math.ceil((255 * r) / t);\n result[i * 4 + 1] = Math.ceil((255 * g) / t);\n result[i * 4 + 2] = Math.ceil((255 * b) / t);\n result[i * 4 + 3] = Math.ceil(255 * Math.min(M, 1));\n }\n return result;\n }\n private async loadHDR(buffer: Uint8Array<ArrayBuffer>, dstFormat: TextureFormat) {\n let header = '';\n let pos = 0;\n const d8 = buffer;\n let format = undefined;\n // read header.\n while (!header.match(/\\n\\n[^\\n]+\\n/g)) {\n header += String.fromCodePoint(d8[pos++]);\n }\n // check format.\n format = header.match(/FORMAT=(.*)$/m);\n if (format.length < 2) {\n return undefined;\n }\n format = format[1];\n if (format != '32-bit_rle_rgbe') {\n console.warn('unknown format : ' + format);\n return null;\n }\n // parse resolution\n let rez = header.split(/\\n/).reverse();\n if (rez.length < 2) {\n return undefined;\n }\n rez = rez[1].split(' ');\n if (rez.length < 4) {\n return undefined;\n }\n const width = Number(rez[3]) * 1,\n height = Number(rez[1]) * 1;\n // Create image.\n const img = new Uint8Array(width * height * 4);\n let ipos = 0;\n // Read all scanlines\n for (let j = 0; j < height; j++) {\n const scanline = [];\n\n let rgbe = d8.slice(pos, (pos += 4));\n const isNewRLE =\n rgbe[0] == 2 && rgbe[1] == 2 && rgbe[2] == ((width >> 8) & 0xff) && rgbe[3] == (width & 0xff);\n\n if (isNewRLE && width >= 8 && width < 32768) {\n for (let i = 0; i < 4; i++) {\n let ptr = i * width;\n const ptr_end = (i + 1) * width;\n let buf = undefined;\n let count = undefined;\n while (ptr < ptr_end) {\n buf = d8.slice(pos, (pos += 2));\n if (buf[0] > 128) {\n count = buf[0] - 128;\n while (count-- > 0) {\n scanline[ptr++] = buf[1];\n }\n } else {\n count = buf[0] - 1;\n scanline[ptr++] = buf[1];\n while (count-- > 0) {\n scanline[ptr++] = d8[pos++];\n }\n }\n }\n }\n\n for (let i = 0; i < width; i++) {\n img[ipos++] = scanline[i + 0 * width];\n img[ipos++] = scanline[i + 1 * width];\n img[ipos++] = scanline[i + 2 * width];\n img[ipos++] = scanline[i + 3 * width];\n }\n } else {\n pos -= 4;\n\n for (let i = 0; i < width; i++) {\n rgbe = d8.slice(pos, (pos += 4));\n\n img[ipos++] = rgbe[0];\n img[ipos++] = rgbe[1];\n img[ipos++] = rgbe[2];\n img[ipos++] = rgbe[3];\n }\n }\n }\n\n const imageFloatBuffer =\n dstFormat === 'rgba32f'\n ? this._rgbeToFloat32(img)\n : dstFormat === 'rgba16f'\n ? this._rgbeToFloat16(img)\n : dstFormat === 'rg11b10uf'\n ? this._rgbeToR11G11B10(img)\n : this._rgbeToRGBM(img);\n\n return {\n dataFloat: imageFloatBuffer,\n width: width,\n height: height\n };\n }\n}\n"],"names":["_f16one","floatToHalf","HDRLoader","AbstractTextureLoader","supportMIMEType","mimeType","load","data","srgb","samplerOptions","texture","format","fmt","info","Application","instance","device","getDeviceCaps","textureCaps","getTextureFormatInfo","filterable","renderable","arrayBuffer","ArrayBuffer","buffer","offset","byteOffset","textureData","loadHDR","Uint8Array","options","tex","createTexture2D","width","height","update","dataFloat","_rgbeToFloat32","length","byteLength","result","Float32Array","i","s","Math","pow","_rgbeToFloat16","Uint16Array","max","min","_rgbeToR11G11B10","Uint32Array","r","g","b","packFloat3","_rgbeToRGBM","rgbMax","M","ceil","t","dstFormat","header","pos","d8","undefined","match","String","fromCodePoint","console","warn","rez","split","reverse","Number","img","ipos","j","scanline","rgbe","slice","isNewRLE","ptr","ptr_end","buf","count","imageFloatBuffer"],"mappings":";;;;AAMA,MAAMA,UAAUC,WAAY,CAAA,CAAA,CAAA;AAC5B;;;IAIO,MAAMC,SAAkBC,SAAAA,qBAAAA,CAAAA;AAC7BC,IAAAA,eAAAA,CAAgBC,QAAgB,EAAW;AACzC,QAAA,OAAOA,QAAa,KAAA,WAAA,IAAeA,QAAa,KAAA,aAAA,IAAiBA,QAAa,KAAA,oBAAA;AAChF;IACA,MAAMC,IAAAA,CACJD,QAAgB,EAChBE,IAA8B,EAC9BC,IAAa,EACbC,cAA+B,EAC/BC,OAAqB,EACC;QACtB,IAAIC,MAAAA;AACJ,QAAA,KAAK,MAAMC,GAAO,IAAA;AAAC,YAAA,WAAA;AAAa,YAAA,SAAA;AAAW,YAAA,SAAA;AAAW,YAAA;SAAa,CAAW;YAC5E,MAAMC,IAAAA,GAAOC,WAAYC,CAAAA,QAAQ,CAACC,MAAM,CAACC,aAAa,EAAGC,CAAAA,WAAW,CAACC,oBAAoB,CAACP,GAAAA,CAAAA;AAC1F,YAAA,IAAIC,QAAQA,IAAKO,CAAAA,UAAU,IAAIP,IAAAA,CAAKQ,UAAU,EAAE;gBAC9CV,MAASC,GAAAA,GAAAA;AACT,gBAAA;AACF;AACF;AACA,QAAA,MAAMU,WAAcf,GAAAA,IAAAA,YAAgBgB,WAAchB,GAAAA,IAAAA,GAAOA,KAAKiB,MAAM;AACpE,QAAA,MAAMC,MAASlB,GAAAA,IAAAA,YAAgBgB,WAAc,GAAA,CAAA,GAAIhB,KAAKmB,UAAU;QAChE,MAAMC,WAAAA,GAAc,MAAM,IAAI,CAACC,OAAO,CAAC,IAAIC,UAAWP,CAAAA,WAAAA,EAAaG,MAASd,CAAAA,EAAAA,MAAAA,CAAAA;AAC5E,QAAA,MAAMmB,OAAkC,GAAA;YACtCpB,OAASA,EAAAA,OAAAA;AACTD,YAAAA;AACF,SAAA;AACA,QAAA,MAAMsB,GAAMjB,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM,CAACgB,eAAe,CACrDrB,MAAAA,EACAgB,WAAYM,CAAAA,KAAK,EACjBN,WAAAA,CAAYO,MAAM,EAClBJ,OAAAA,CAAAA;QAEFC,GAAII,CAAAA,MAAM,CAACR,WAAAA,CAAYS,SAAS,EAAE,CAAG,EAAA,CAAA,EAAGT,WAAYM,CAAAA,KAAK,EAAEN,WAAAA,CAAYO,MAAM,CAAA;QAC7E,OAAOH,GAAAA;AACT;AACQM,IAAAA,cAAAA,CAAeb,MAA+B,EAA6B;QACjF,MAAMc,MAAAA,GAASd,MAAOe,CAAAA,UAAU,IAAI,CAAA;QACpC,MAAMC,MAAAA,GAAS,IAAIC,YAAAA,CAAaH,MAAS,GAAA,CAAA,CAAA;AAEzC,QAAA,IAAK,IAAII,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,QAAQI,CAAK,EAAA,CAAA;AAC/B,YAAA,MAAMC,CAAIC,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGrB,EAAAA,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,IAAI,MAAM,CAAA,CAAA,CAAA;YAEjDF,MAAM,CAACE,IAAI,CAAE,CAAA,GAAGlB,MAAM,CAACkB,CAAAA,GAAI,EAAE,GAAGC,CAAAA;YAChCH,MAAM,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGlB,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAAA;YACxCH,MAAM,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGlB,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAAA;AACxCH,YAAAA,MAAM,CAACE,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAG,CAAA;AACtB;QACA,OAAOF,MAAAA;AACT;AACQM,IAAAA,cAAAA,CAAetB,MAA+B,EAA4B;QAChF,MAAMc,MAAAA,GAASd,MAAOe,CAAAA,UAAU,IAAI,CAAA;QACpC,MAAMC,MAAAA,GAAS,IAAIO,WAAAA,CAAYT,MAAS,GAAA,CAAA,CAAA;AACxC,QAAA,IAAK,IAAII,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,QAAQI,CAAK,EAAA,CAAA;AAC/B,YAAA,MAAMC,CAAIC,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGrB,EAAAA,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,IAAI,MAAM,CAAA,CAAA,CAAA;AACjDF,YAAAA,MAAM,CAACE,CAAI,GAAA,CAAA,GAAI,EAAE,GAAGzC,WAAAA,CAAY2C,KAAKI,GAAG,CAAC,MAAQJ,EAAAA,IAAAA,CAAKK,GAAG,CAACzB,MAAM,CAACkB,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAG,EAAA,KAAA,CAAA,CAAA,CAAA;YAC7EH,MAAM,CAACE,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGzC,WAAY2C,CAAAA,IAAAA,CAAKI,GAAG,CAAC,QAAQJ,IAAKK,CAAAA,GAAG,CAACzB,MAAM,CAACkB,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAG,EAAA,KAAA,CAAA,CAAA,CAAA;YACjFH,MAAM,CAACE,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGzC,WAAY2C,CAAAA,IAAAA,CAAKI,GAAG,CAAC,QAAQJ,IAAKK,CAAAA,GAAG,CAACzB,MAAM,CAACkB,IAAI,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAG,EAAA,KAAA,CAAA,CAAA,CAAA;AACjFH,YAAAA,MAAM,CAACE,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAG1C,OAAAA;AACtB;QACA,OAAOwC,MAAAA;AACT;AACQU,IAAAA,gBAAAA,CAAiB1B,MAA+B,EAA4B;QAClF,MAAMc,MAAAA,GAASd,MAAOe,CAAAA,UAAU,IAAI,CAAA;QACpC,MAAMC,MAAAA,GAAS,IAAIW,WAAYb,CAAAA,MAAAA,CAAAA;AAE/B,QAAA,IAAK,IAAII,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,QAAQI,CAAK,EAAA,CAAA;AAC/B,YAAA,MAAMC,CAAIC,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGrB,EAAAA,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,IAAI,MAAM,CAAA,CAAA,CAAA;AACjD,YAAA,MAAMU,CAAI5B,GAAAA,MAAM,CAACkB,CAAAA,GAAI,EAAE,GAAGC,CAAAA;AAC1B,YAAA,MAAMU,IAAI7B,MAAM,CAACkB,CAAI,GAAA,CAAA,GAAI,EAAE,GAAGC,CAAAA;AAC9B,YAAA,MAAMW,IAAI9B,MAAM,CAACkB,CAAI,GAAA,CAAA,GAAI,EAAE,GAAGC,CAAAA;AAC9BH,YAAAA,MAAM,CAACE,CAAAA,CAAE,GAAGa,UAAAA,CAAWH,GAAGC,CAAGC,EAAAA,CAAAA,CAAAA;AAC/B;QACA,OAAOd,MAAAA;AACT;AACA;;MAGQgB,WAAYhC,CAAAA,MAA+B,EAA2B;QAC5E,MAAMc,MAAAA,GAASd,MAAOe,CAAAA,UAAU,IAAI,CAAA;QACpC,MAAMC,MAAAA,GAAS,IAAIX,UAAAA,CAAWS,MAAS,GAAA,CAAA,CAAA;AAEvC,QAAA,IAAK,IAAII,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,QAAQI,CAAK,EAAA,CAAA;AAC/B,YAAA,MAAMC,CAAIC,GAAAA,IAAAA,CAAKC,GAAG,CAAC,CAAGrB,EAAAA,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,IAAI,MAAM,CAAA,CAAA,CAAA;YACjD,MAAMU,CAAAA,GAAIR,IAAKC,CAAAA,GAAG,CAACrB,MAAM,CAACkB,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAAA,EAAG,CAAI,GAAA,GAAA,CAAA;YAC1C,MAAMU,CAAAA,GAAIT,IAAKC,CAAAA,GAAG,CAACrB,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAAA,EAAG,CAAI,GAAA,GAAA,CAAA;YAC9C,MAAMW,CAAAA,GAAIV,IAAKC,CAAAA,GAAG,CAACrB,MAAM,CAACkB,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGC,CAAAA,EAAG,CAAI,GAAA,GAAA,CAAA;AAC9C,YAAA,MAAMc,MAASb,GAAAA,IAAAA,CAAKI,GAAG,CAACI,GAAGC,CAAGC,EAAAA,CAAAA,CAAAA;AAC9B,YAAA,MAAMI,IAAId,IAAKe,CAAAA,IAAI,CAAC,GAAC,GAAMF,SAAU,CAAK,CAAA,GAAA,GAAA;AAC1C,YAAA,MAAMG,IAAIF,CAAI,GAAA,CAAA;YACdlB,MAAM,CAACE,IAAI,CAAE,CAAA,GAAGE,KAAKe,IAAI,CAAC,GAAC,GAAMP,CAAKQ,GAAAA,CAAAA,CAAAA;YACtCpB,MAAM,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGE,KAAKe,IAAI,CAAC,GAAC,GAAMN,CAAKO,GAAAA,CAAAA,CAAAA;YAC1CpB,MAAM,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGE,KAAKe,IAAI,CAAC,GAAC,GAAML,CAAKM,GAAAA,CAAAA,CAAAA;AAC1CpB,YAAAA,MAAM,CAACE,CAAAA,GAAI,CAAI,GAAA,CAAA,CAAE,GAAGE,IAAAA,CAAKe,IAAI,CAAC,GAAMf,GAAAA,IAAAA,CAAKK,GAAG,CAACS,CAAG,EAAA,CAAA,CAAA,CAAA;AAClD;QACA,OAAOlB,MAAAA;AACT;AACA,IAAA,MAAcZ,OAAQJ,CAAAA,MAA+B,EAAEqC,SAAwB,EAAE;AAC/E,QAAA,IAAIC,MAAS,GAAA,EAAA;AACb,QAAA,IAAIC,GAAM,GAAA,CAAA;AACV,QAAA,MAAMC,EAAKxC,GAAAA,MAAAA;AACX,QAAA,IAAIb,MAASsD,GAAAA,SAAAA;;AAEb,QAAA,MAAO,CAACH,MAAAA,CAAOI,KAAK,CAAC,eAAkB,CAAA,CAAA;AACrCJ,YAAAA,MAAAA,IAAUK,MAAOC,CAAAA,aAAa,CAACJ,EAAE,CAACD,GAAM,EAAA,CAAA,CAAA;AAC1C;;QAEApD,MAASmD,GAAAA,MAAAA,CAAOI,KAAK,CAAC,eAAA,CAAA;QACtB,IAAIvD,MAAAA,CAAO2B,MAAM,GAAG,CAAG,EAAA;YACrB,OAAO2B,SAAAA;AACT;QACAtD,MAASA,GAAAA,MAAM,CAAC,CAAE,CAAA;AAClB,QAAA,IAAIA,UAAU,iBAAmB,EAAA;YAC/B0D,OAAQC,CAAAA,IAAI,CAAC,mBAAsB3D,GAAAA,MAAAA,CAAAA;YACnC,OAAO,IAAA;AACT;;AAEA,QAAA,IAAI4D,GAAMT,GAAAA,MAAAA,CAAOU,KAAK,CAAC,MAAMC,OAAO,EAAA;QACpC,IAAIF,GAAAA,CAAIjC,MAAM,GAAG,CAAG,EAAA;YAClB,OAAO2B,SAAAA;AACT;AACAM,QAAAA,GAAAA,GAAMA,GAAG,CAAC,CAAE,CAAA,CAACC,KAAK,CAAC,GAAA,CAAA;QACnB,IAAID,GAAAA,CAAIjC,MAAM,GAAG,CAAG,EAAA;YAClB,OAAO2B,SAAAA;AACT;AACA,QAAA,MAAMhC,KAAQyC,GAAAA,MAAAA,CAAOH,GAAG,CAAC,CAAE,CAAA,CAAA,GAAI,CAC7BrC,EAAAA,MAAAA,GAASwC,MAAOH,CAAAA,GAAG,CAAC,CAAA,CAAE,CAAI,GAAA,CAAA;;AAE5B,QAAA,MAAMI,GAAM,GAAA,IAAI9C,UAAWI,CAAAA,KAAAA,GAAQC,MAAS,GAAA,CAAA,CAAA;AAC5C,QAAA,IAAI0C,IAAO,GAAA,CAAA;;AAEX,QAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI3C,QAAQ2C,CAAK,EAAA,CAAA;AAC/B,YAAA,MAAMC,WAAW,EAAE;AAEnB,YAAA,IAAIC,IAAOf,GAAAA,EAAAA,CAAGgB,KAAK,CAACjB,KAAMA,GAAO,IAAA,CAAA,CAAA;YACjC,MAAMkB,QAAAA,GACJF,IAAI,CAAC,CAAE,CAAA,IAAI,CAAKA,IAAAA,IAAI,CAAC,CAAA,CAAE,IAAI,CAAA,IAAKA,IAAI,CAAC,CAAE,CAAA,KAAM9C,KAAS,IAAA,CAAA,GAAK,IAAG,CAAA,IAAM8C,IAAI,CAAC,CAAE,CAAA,KAAK9C,KAAAA,GAAQ,IAAG,CAAA;AAE7F,YAAA,IAAIgD,QAAYhD,IAAAA,KAAAA,IAAS,CAAKA,IAAAA,KAAAA,GAAQ,KAAO,EAAA;AAC3C,gBAAA,IAAK,IAAIS,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;AAC1B,oBAAA,IAAIwC,MAAMxC,CAAIT,GAAAA,KAAAA;AACd,oBAAA,MAAMkD,OAAU,GAACzC,CAAAA,CAAAA,GAAI,CAAA,IAAKT,KAAAA;AAC1B,oBAAA,IAAImD,GAAMnB,GAAAA,SAAAA;AACV,oBAAA,IAAIoB,KAAQpB,GAAAA,SAAAA;AACZ,oBAAA,MAAOiB,MAAMC,OAAS,CAAA;AACpBC,wBAAAA,GAAAA,GAAMpB,EAAGgB,CAAAA,KAAK,CAACjB,GAAAA,EAAMA,GAAO,IAAA,CAAA,CAAA;AAC5B,wBAAA,IAAIqB,GAAG,CAAC,CAAE,CAAA,GAAG,GAAK,EAAA;4BAChBC,KAAQD,GAAAA,GAAG,CAAC,CAAA,CAAE,GAAG,GAAA;AACjB,4BAAA,MAAOC,UAAU,CAAG,CAAA;AAClBP,gCAAAA,QAAQ,CAACI,GAAAA,EAAAA,CAAM,GAAGE,GAAG,CAAC,CAAE,CAAA;AAC1B;yBACK,MAAA;4BACLC,KAAQD,GAAAA,GAAG,CAAC,CAAA,CAAE,GAAG,CAAA;AACjBN,4BAAAA,QAAQ,CAACI,GAAAA,EAAAA,CAAM,GAAGE,GAAG,CAAC,CAAE,CAAA;AACxB,4BAAA,MAAOC,UAAU,CAAG,CAAA;AAClBP,gCAAAA,QAAQ,CAACI,GAAAA,EAAAA,CAAM,GAAGlB,EAAE,CAACD,GAAM,EAAA,CAAA;AAC7B;AACF;AACF;AACF;AAEA,gBAAA,IAAK,IAAIrB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIT,OAAOS,CAAK,EAAA,CAAA;AAC9BiC,oBAAAA,GAAG,CAACC,IAAO,EAAA,CAAA,GAAGE,QAAQ,CAACpC,CAAAA,GAAI,IAAIT,KAAM,CAAA;AACrC0C,oBAAAA,GAAG,CAACC,IAAO,EAAA,CAAA,GAAGE,QAAQ,CAACpC,CAAAA,GAAI,IAAIT,KAAM,CAAA;AACrC0C,oBAAAA,GAAG,CAACC,IAAO,EAAA,CAAA,GAAGE,QAAQ,CAACpC,CAAAA,GAAI,IAAIT,KAAM,CAAA;AACrC0C,oBAAAA,GAAG,CAACC,IAAO,EAAA,CAAA,GAAGE,QAAQ,CAACpC,CAAAA,GAAI,IAAIT,KAAM,CAAA;AACvC;aACK,MAAA;gBACL8B,GAAO,IAAA,CAAA;AAEP,gBAAA,IAAK,IAAIrB,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIT,OAAOS,CAAK,EAAA,CAAA;AAC9BqC,oBAAAA,IAAAA,GAAOf,EAAGgB,CAAAA,KAAK,CAACjB,GAAAA,EAAMA,GAAO,IAAA,CAAA,CAAA;AAE7BY,oBAAAA,GAAG,CAACC,IAAAA,EAAAA,CAAO,GAAGG,IAAI,CAAC,CAAE,CAAA;AACrBJ,oBAAAA,GAAG,CAACC,IAAAA,EAAAA,CAAO,GAAGG,IAAI,CAAC,CAAE,CAAA;AACrBJ,oBAAAA,GAAG,CAACC,IAAAA,EAAAA,CAAO,GAAGG,IAAI,CAAC,CAAE,CAAA;AACrBJ,oBAAAA,GAAG,CAACC,IAAAA,EAAAA,CAAO,GAAGG,IAAI,CAAC,CAAE,CAAA;AACvB;AACF;AACF;QAEA,MAAMO,gBAAAA,GACJzB,SAAc,KAAA,SAAA,GACV,IAAI,CAACxB,cAAc,CAACsC,GAAAA,CAAAA,GACpBd,SAAc,KAAA,SAAA,GACd,IAAI,CAACf,cAAc,CAAC6B,GAAAA,CAAAA,GACpBd,SAAc,KAAA,WAAA,GACd,IAAI,CAACX,gBAAgB,CAACyB,GACtB,CAAA,GAAA,IAAI,CAACnB,WAAW,CAACmB,GAAAA,CAAAA;QAEvB,OAAO;YACLvC,SAAWkD,EAAAA,gBAAAA;YACXrD,KAAOA,EAAAA,KAAAA;YACPC,MAAQA,EAAAA;AACV,SAAA;AACF;AACF;;;;"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { AbstractTextureLoader } from '../loader.js';
|
|
2
|
+
import { Application } from '../../../app/app.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* TGA image loader
|
|
6
|
+
* @internal
|
|
7
|
+
*/ class TGALoader extends AbstractTextureLoader {
|
|
8
|
+
supportMIMEType(mimeType) {
|
|
9
|
+
return mimeType === 'image/tga' || mimeType === 'image/x-tga';
|
|
10
|
+
}
|
|
11
|
+
parseTGA(content, sRGB, noMipmap, texture) {
|
|
12
|
+
const arrayBuffer = content instanceof ArrayBuffer ? content : content.buffer;
|
|
13
|
+
const offset = content instanceof ArrayBuffer ? 0 : content.byteOffset;
|
|
14
|
+
const dataView = new DataView(arrayBuffer, offset);
|
|
15
|
+
const p = [
|
|
16
|
+
0,
|
|
17
|
+
0,
|
|
18
|
+
0,
|
|
19
|
+
0
|
|
20
|
+
];
|
|
21
|
+
do {
|
|
22
|
+
let skip = 0;
|
|
23
|
+
const idLength = dataView.getUint8(0);
|
|
24
|
+
skip += idLength;
|
|
25
|
+
const colorMapType = dataView.getUint8(1);
|
|
26
|
+
if (colorMapType !== 0 && colorMapType !== 1) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
const dataTypeCode = dataView.getUint8(2);
|
|
30
|
+
if (dataTypeCode !== 2 && dataTypeCode !== 10) {
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
const colorMapLength = dataView.getUint16(5, true);
|
|
34
|
+
skip += colorMapLength * colorMapType;
|
|
35
|
+
const width = dataView.getUint16(12, true);
|
|
36
|
+
const height = dataView.getUint16(14, true);
|
|
37
|
+
const bpp = dataView.getUint8(16);
|
|
38
|
+
if (bpp !== 16 && bpp !== 24 && bpp !== 32) {
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
let dataOffset = 18 + skip;
|
|
42
|
+
const bytesPerPixel = bpp / 8;
|
|
43
|
+
const pixels = new Uint8Array(width * height * 4);
|
|
44
|
+
let n = 0;
|
|
45
|
+
while(n < width * height){
|
|
46
|
+
if (dataTypeCode === 2) {
|
|
47
|
+
for(let i = 0; i < bytesPerPixel; i++){
|
|
48
|
+
p[i] = dataView.getUint8(dataOffset++);
|
|
49
|
+
}
|
|
50
|
+
this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
|
|
51
|
+
n++;
|
|
52
|
+
} else {
|
|
53
|
+
const t = dataView.getUint8(dataOffset++);
|
|
54
|
+
for(let i = 0; i < bytesPerPixel; i++){
|
|
55
|
+
p[i] = dataView.getUint8(dataOffset++);
|
|
56
|
+
}
|
|
57
|
+
const j = t & 0x7f;
|
|
58
|
+
this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
|
|
59
|
+
n++;
|
|
60
|
+
if (t & 0x80) {
|
|
61
|
+
for(let i = 0; i < j; i++){
|
|
62
|
+
this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
|
|
63
|
+
n++;
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
for(let i = 0; i < j; i++){
|
|
67
|
+
for(let k = 0; k < bytesPerPixel; k++){
|
|
68
|
+
p[i] = dataView.getUint8(dataOffset++);
|
|
69
|
+
}
|
|
70
|
+
this.mergeBytes(pixels, n * 4, p, bytesPerPixel);
|
|
71
|
+
n++;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const opt = {
|
|
77
|
+
texture
|
|
78
|
+
};
|
|
79
|
+
if (noMipmap) {
|
|
80
|
+
opt.samplerOptions = {
|
|
81
|
+
mipFilter: 'none'
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const tex = Application.instance.device.createTexture2D(sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm', width, height, opt);
|
|
85
|
+
tex.update(pixels, 0, 0, width, height);
|
|
86
|
+
return tex;
|
|
87
|
+
}while (false)
|
|
88
|
+
throw new Error(`Unsupported TGA file format`);
|
|
89
|
+
}
|
|
90
|
+
mergeBytes(dest, offset, pixel, numBytes) {
|
|
91
|
+
if (numBytes === 4) {
|
|
92
|
+
dest[offset + 0] = pixel[2];
|
|
93
|
+
dest[offset + 1] = pixel[1];
|
|
94
|
+
dest[offset + 2] = pixel[0];
|
|
95
|
+
dest[offset + 3] = pixel[3];
|
|
96
|
+
} else if (numBytes === 3) {
|
|
97
|
+
dest[offset + 0] = pixel[2];
|
|
98
|
+
dest[offset + 1] = pixel[1];
|
|
99
|
+
dest[offset + 2] = pixel[0];
|
|
100
|
+
dest[offset + 3] = 255;
|
|
101
|
+
} else if (numBytes === 2) {
|
|
102
|
+
dest[offset + 0] = (pixel[1] & 0x7c) << 1;
|
|
103
|
+
dest[offset + 1] = (pixel[1] & 0x03) << 6 | (pixel[0] & 0xe0) >> 2;
|
|
104
|
+
dest[offset + 2] = (pixel[0] & 0x1f) << 3;
|
|
105
|
+
dest[offset + 3] = pixel[1] & 0x80;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async load(mimeType, data, srgb, samplerOptions, texture) {
|
|
109
|
+
return new Promise((resolve)=>{
|
|
110
|
+
resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export { TGALoader };
|
|
116
|
+
//# sourceMappingURL=tga_Loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tga_Loader.js","sources":["../../../../../src/asset/loaders/image/tga_Loader.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\nimport { Application } from '../../../app/app';\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions } from '@zephyr3d/device';\nimport type { TypedArray } from '@zephyr3d/base';\n\n/**\n * TGA image loader\n * @internal\n */\nexport class TGALoader extends AbstractTextureLoader {\n supportMIMEType(mimeType: string): boolean {\n return mimeType === 'image/tga' || mimeType === 'image/x-tga';\n }\n private parseTGA(\n content: ArrayBuffer | TypedArray,\n sRGB: boolean,\n noMipmap: boolean,\n texture: BaseTexture\n ) {\n const arrayBuffer = content instanceof ArrayBuffer ? content : content.buffer;\n const offset = content instanceof ArrayBuffer ? 0 : content.byteOffset;\n const dataView = new DataView(arrayBuffer, offset);\n const p: number[] = [0, 0, 0, 0];\n do {\n let skip = 0;\n const idLength = dataView.getUint8(0);\n skip += idLength;\n const colorMapType = dataView.getUint8(1);\n if (colorMapType !== 0 && colorMapType !== 1) {\n break;\n }\n const dataTypeCode = dataView.getUint8(2);\n if (dataTypeCode !== 2 && dataTypeCode !== 10) {\n break;\n }\n const colorMapLength = dataView.getUint16(5, true);\n skip += colorMapLength * colorMapType;\n const width = dataView.getUint16(12, true);\n const height = dataView.getUint16(14, true);\n const bpp = dataView.getUint8(16);\n if (bpp !== 16 && bpp !== 24 && bpp !== 32) {\n break;\n }\n let dataOffset = 18 + skip;\n const bytesPerPixel = bpp / 8;\n const pixels = new Uint8Array(width * height * 4);\n let n = 0;\n while (n < width * height) {\n if (dataTypeCode === 2) {\n for (let i = 0; i < bytesPerPixel; i++) {\n p[i] = dataView.getUint8(dataOffset++);\n }\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n } else {\n const t = dataView.getUint8(dataOffset++);\n for (let i = 0; i < bytesPerPixel; i++) {\n p[i] = dataView.getUint8(dataOffset++);\n }\n const j = t & 0x7f;\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n if (t & 0x80) {\n for (let i = 0; i < j; i++) {\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n }\n } else {\n for (let i = 0; i < j; i++) {\n for (let k = 0; k < bytesPerPixel; k++) {\n p[i] = dataView.getUint8(dataOffset++);\n }\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\n n++;\n }\n }\n }\n }\n const opt: TextureCreationOptions = { texture };\n if (noMipmap) {\n opt.samplerOptions = { mipFilter: 'none' };\n }\n const tex = Application.instance.device.createTexture2D(\n sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm',\n width,\n height,\n opt\n );\n tex.update(pixels, 0, 0, width, height);\n return tex;\n } while (false);\n throw new Error(`Unsupported TGA file format`);\n }\n private mergeBytes(dest: Uint8Array<ArrayBuffer>, offset: number, pixel: number[], numBytes: number) {\n if (numBytes === 4) {\n dest[offset + 0] = pixel[2];\n dest[offset + 1] = pixel[1];\n dest[offset + 2] = pixel[0];\n dest[offset + 3] = pixel[3];\n } else if (numBytes === 3) {\n dest[offset + 0] = pixel[2];\n dest[offset + 1] = pixel[1];\n dest[offset + 2] = pixel[0];\n dest[offset + 3] = 255;\n } else if (numBytes === 2) {\n dest[offset + 0] = (pixel[1] & 0x7c) << 1;\n dest[offset + 1] = ((pixel[1] & 0x03) << 6) | ((pixel[0] & 0xe0) >> 2);\n dest[offset + 2] = (pixel[0] & 0x1f) << 3;\n dest[offset + 3] = pixel[1] & 0x80;\n }\n }\n async load(\n mimeType: string,\n data: ArrayBuffer | TypedArray,\n srgb: boolean,\n samplerOptions?: SamplerOptions,\n texture?: BaseTexture\n ): Promise<BaseTexture> {\n return new Promise<BaseTexture>((resolve) => {\n resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));\n });\n }\n}\n"],"names":["TGALoader","AbstractTextureLoader","supportMIMEType","mimeType","parseTGA","content","sRGB","noMipmap","texture","arrayBuffer","ArrayBuffer","buffer","offset","byteOffset","dataView","DataView","p","skip","idLength","getUint8","colorMapType","dataTypeCode","colorMapLength","getUint16","width","height","bpp","dataOffset","bytesPerPixel","pixels","Uint8Array","n","i","mergeBytes","t","j","k","opt","samplerOptions","mipFilter","tex","Application","instance","device","createTexture2D","update","Error","dest","pixel","numBytes","load","data","srgb","Promise","resolve"],"mappings":";;;AAKA;;;IAIO,MAAMA,SAAkBC,SAAAA,qBAAAA,CAAAA;AAC7BC,IAAAA,eAAAA,CAAgBC,QAAgB,EAAW;QACzC,OAAOA,QAAAA,KAAa,eAAeA,QAAa,KAAA,aAAA;AAClD;AACQC,IAAAA,QAAAA,CACNC,OAAiC,EACjCC,IAAa,EACbC,QAAiB,EACjBC,OAAoB,EACpB;AACA,QAAA,MAAMC,WAAcJ,GAAAA,OAAAA,YAAmBK,WAAcL,GAAAA,OAAAA,GAAUA,QAAQM,MAAM;AAC7E,QAAA,MAAMC,MAASP,GAAAA,OAAAA,YAAmBK,WAAc,GAAA,CAAA,GAAIL,QAAQQ,UAAU;QACtE,MAAMC,QAAAA,GAAW,IAAIC,QAAAA,CAASN,WAAaG,EAAAA,MAAAA,CAAAA;AAC3C,QAAA,MAAMI,CAAc,GAAA;AAAC,YAAA,CAAA;AAAG,YAAA,CAAA;AAAG,YAAA,CAAA;AAAG,YAAA;AAAE,SAAA;QAChC,GAAG;AACD,YAAA,IAAIC,IAAO,GAAA,CAAA;YACX,MAAMC,QAAAA,GAAWJ,QAASK,CAAAA,QAAQ,CAAC,CAAA,CAAA;YACnCF,IAAQC,IAAAA,QAAAA;YACR,MAAME,YAAAA,GAAeN,QAASK,CAAAA,QAAQ,CAAC,CAAA,CAAA;YACvC,IAAIC,YAAAA,KAAiB,CAAKA,IAAAA,YAAAA,KAAiB,CAAG,EAAA;AAC5C,gBAAA;AACF;YACA,MAAMC,YAAAA,GAAeP,QAASK,CAAAA,QAAQ,CAAC,CAAA,CAAA;YACvC,IAAIE,YAAAA,KAAiB,CAAKA,IAAAA,YAAAA,KAAiB,EAAI,EAAA;AAC7C,gBAAA;AACF;AACA,YAAA,MAAMC,cAAiBR,GAAAA,QAAAA,CAASS,SAAS,CAAC,CAAG,EAAA,IAAA,CAAA;AAC7CN,YAAAA,IAAAA,IAAQK,cAAiBF,GAAAA,YAAAA;AACzB,YAAA,MAAMI,KAAQV,GAAAA,QAAAA,CAASS,SAAS,CAAC,EAAI,EAAA,IAAA,CAAA;AACrC,YAAA,MAAME,MAASX,GAAAA,QAAAA,CAASS,SAAS,CAAC,EAAI,EAAA,IAAA,CAAA;YACtC,MAAMG,GAAAA,GAAMZ,QAASK,CAAAA,QAAQ,CAAC,EAAA,CAAA;AAC9B,YAAA,IAAIO,GAAQ,KAAA,EAAA,IAAMA,GAAQ,KAAA,EAAA,IAAMA,QAAQ,EAAI,EAAA;AAC1C,gBAAA;AACF;AACA,YAAA,IAAIC,aAAa,EAAKV,GAAAA,IAAAA;AACtB,YAAA,MAAMW,gBAAgBF,GAAM,GAAA,CAAA;AAC5B,YAAA,MAAMG,MAAS,GAAA,IAAIC,UAAWN,CAAAA,KAAAA,GAAQC,MAAS,GAAA,CAAA,CAAA;AAC/C,YAAA,IAAIM,CAAI,GAAA,CAAA;YACR,MAAOA,CAAAA,GAAIP,QAAQC,MAAQ,CAAA;AACzB,gBAAA,IAAIJ,iBAAiB,CAAG,EAAA;AACtB,oBAAA,IAAK,IAAIW,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,eAAeI,CAAK,EAAA,CAAA;AACtChB,wBAAAA,CAAC,CAACgB,CAAAA,CAAE,GAAGlB,QAAAA,CAASK,QAAQ,CAACQ,UAAAA,EAAAA,CAAAA;AAC3B;AACA,oBAAA,IAAI,CAACM,UAAU,CAACJ,MAAQE,EAAAA,CAAAA,GAAI,GAAGf,CAAGY,EAAAA,aAAAA,CAAAA;AAClCG,oBAAAA,CAAAA,EAAAA;iBACK,MAAA;oBACL,MAAMG,CAAAA,GAAIpB,QAASK,CAAAA,QAAQ,CAACQ,UAAAA,EAAAA,CAAAA;AAC5B,oBAAA,IAAK,IAAIK,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,eAAeI,CAAK,EAAA,CAAA;AACtChB,wBAAAA,CAAC,CAACgB,CAAAA,CAAE,GAAGlB,QAAAA,CAASK,QAAQ,CAACQ,UAAAA,EAAAA,CAAAA;AAC3B;AACA,oBAAA,MAAMQ,IAAID,CAAI,GAAA,IAAA;AACd,oBAAA,IAAI,CAACD,UAAU,CAACJ,MAAQE,EAAAA,CAAAA,GAAI,GAAGf,CAAGY,EAAAA,aAAAA,CAAAA;AAClCG,oBAAAA,CAAAA,EAAAA;AACA,oBAAA,IAAIG,IAAI,IAAM,EAAA;AACZ,wBAAA,IAAK,IAAIF,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIG,GAAGH,CAAK,EAAA,CAAA;AAC1B,4BAAA,IAAI,CAACC,UAAU,CAACJ,MAAQE,EAAAA,CAAAA,GAAI,GAAGf,CAAGY,EAAAA,aAAAA,CAAAA;AAClCG,4BAAAA,CAAAA,EAAAA;AACF;qBACK,MAAA;AACL,wBAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIG,GAAGH,CAAK,EAAA,CAAA;AAC1B,4BAAA,IAAK,IAAII,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIR,eAAeQ,CAAK,EAAA,CAAA;AACtCpB,gCAAAA,CAAC,CAACgB,CAAAA,CAAE,GAAGlB,QAAAA,CAASK,QAAQ,CAACQ,UAAAA,EAAAA,CAAAA;AAC3B;AACA,4BAAA,IAAI,CAACM,UAAU,CAACJ,MAAQE,EAAAA,CAAAA,GAAI,GAAGf,CAAGY,EAAAA,aAAAA,CAAAA;AAClCG,4BAAAA,CAAAA,EAAAA;AACF;AACF;AACF;AACF;AACA,YAAA,MAAMM,GAA8B,GAAA;AAAE7B,gBAAAA;AAAQ,aAAA;AAC9C,YAAA,IAAID,QAAU,EAAA;AACZ8B,gBAAAA,GAAAA,CAAIC,cAAc,GAAG;oBAAEC,SAAW,EAAA;AAAO,iBAAA;AAC3C;AACA,YAAA,MAAMC,GAAMC,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM,CAACC,eAAe,CACrDtC,IAAO,GAAA,iBAAA,GAAoB,YAC3BkB,EAAAA,KAAAA,EACAC,MACAY,EAAAA,GAAAA,CAAAA;AAEFG,YAAAA,GAAAA,CAAIK,MAAM,CAAChB,MAAQ,EAAA,CAAA,EAAG,GAAGL,KAAOC,EAAAA,MAAAA,CAAAA;YAChC,OAAOe,GAAAA;AACT,SAAA,OAAS,KAAO;AAChB,QAAA,MAAM,IAAIM,KAAAA,CAAM,CAAC,2BAA2B,CAAC,CAAA;AAC/C;AACQb,IAAAA,UAAAA,CAAWc,IAA6B,EAAEnC,MAAc,EAAEoC,KAAe,EAAEC,QAAgB,EAAE;AACnG,QAAA,IAAIA,aAAa,CAAG,EAAA;AAClBF,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;AAC3BD,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;AAC3BD,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;AAC3BD,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;SACtB,MAAA,IAAIC,aAAa,CAAG,EAAA;AACzBF,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;AAC3BD,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;AAC3BD,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,CAAE,CAAA;YAC3BD,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAG,GAAA;SACd,MAAA,IAAIqC,aAAa,CAAG,EAAA;YACzBF,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAIoC,CAAAA,KAAK,CAAC,CAAA,CAAE,GAAG,IAAG,KAAM,CAAA;YACxCD,IAAI,CAACnC,SAAS,CAAE,CAAA,GAAG,CAAEoC,KAAK,CAAC,CAAE,CAAA,GAAG,IAAG,KAAM,CAAA,GAAM,CAACA,KAAK,CAAC,CAAE,CAAA,GAAG,IAAG,KAAM,CAAA;YACpED,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAIoC,CAAAA,KAAK,CAAC,CAAA,CAAE,GAAG,IAAG,KAAM,CAAA;AACxCD,YAAAA,IAAI,CAACnC,MAAS,GAAA,CAAA,CAAE,GAAGoC,KAAK,CAAC,EAAE,GAAG,IAAA;AAChC;AACF;IACA,MAAME,IAAAA,CACJ/C,QAAgB,EAChBgD,IAA8B,EAC9BC,IAAa,EACbd,cAA+B,EAC/B9B,OAAqB,EACC;QACtB,OAAO,IAAI6C,QAAqB,CAACC,OAAAA,GAAAA;YAC/BA,OAAQ,CAAA,IAAI,CAAClD,QAAQ,CAAC+C,MAAMC,IAAMd,EAAAA,cAAAA,EAAgBC,cAAc,MAAQ/B,EAAAA,OAAAA,CAAAA,CAAAA;AAC1E,SAAA,CAAA;AACF;AACF;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { AbstractTextureLoader } from '../loader.js';
|
|
2
|
+
import { Application } from '../../../app/app.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Web image loader
|
|
6
|
+
* @internal
|
|
7
|
+
*/ class WebImageLoader extends AbstractTextureLoader {
|
|
8
|
+
supportMIMEType(mimeType) {
|
|
9
|
+
return mimeType === 'image/jpg' || mimeType === 'image/jpeg' || mimeType === 'image/png';
|
|
10
|
+
}
|
|
11
|
+
async load(mimeType, data, srgb, samplerOptions, texture) {
|
|
12
|
+
return new Promise((resolve, reject)=>{
|
|
13
|
+
if (!mimeType) {
|
|
14
|
+
reject('unknown image file type');
|
|
15
|
+
}
|
|
16
|
+
const src = URL.createObjectURL(new Blob([
|
|
17
|
+
data
|
|
18
|
+
], {
|
|
19
|
+
type: mimeType
|
|
20
|
+
}));
|
|
21
|
+
const img = document.createElement('img');
|
|
22
|
+
img.src = src;
|
|
23
|
+
img.onload = function() {
|
|
24
|
+
createImageBitmap(img, {
|
|
25
|
+
premultiplyAlpha: 'none'
|
|
26
|
+
}).then((bm)=>{
|
|
27
|
+
const options = {
|
|
28
|
+
texture: texture,
|
|
29
|
+
samplerOptions
|
|
30
|
+
};
|
|
31
|
+
const tex = Application.instance.device.createTexture2DFromImage(bm, srgb, options);
|
|
32
|
+
if (tex) {
|
|
33
|
+
resolve(tex);
|
|
34
|
+
} else {
|
|
35
|
+
reject('create texture from image element failed');
|
|
36
|
+
}
|
|
37
|
+
}).catch(()=>{
|
|
38
|
+
const cvs = document.createElement('canvas');
|
|
39
|
+
cvs.width = img.width;
|
|
40
|
+
cvs.height = img.height;
|
|
41
|
+
const ctx = cvs.getContext('2d');
|
|
42
|
+
ctx.drawImage(img, 0, 0);
|
|
43
|
+
const options = {
|
|
44
|
+
texture: texture,
|
|
45
|
+
samplerOptions
|
|
46
|
+
};
|
|
47
|
+
const tex = Application.instance.device.createTexture2DFromImage(cvs, srgb, options);
|
|
48
|
+
if (tex) {
|
|
49
|
+
resolve(tex);
|
|
50
|
+
} else {
|
|
51
|
+
reject('create texture from image element failed');
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
img.onerror = (err)=>{
|
|
56
|
+
reject(err);
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { WebImageLoader };
|
|
63
|
+
//# sourceMappingURL=webimage_loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webimage_loader.js","sources":["../../../../../src/asset/loaders/image/webimage_loader.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\r\nimport { Application } from '../../../app';\r\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions } from '@zephyr3d/device';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\n\r\n/**\r\n * Web image loader\r\n * @internal\r\n */\r\nexport class WebImageLoader extends AbstractTextureLoader {\r\n supportMIMEType(mimeType: string): boolean {\r\n return mimeType === 'image/jpg' || mimeType === 'image/jpeg' || mimeType === 'image/png';\r\n }\r\n async load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture> {\r\n return new Promise<BaseTexture>((resolve, reject) => {\r\n if (!mimeType) {\r\n reject('unknown image file type');\r\n }\r\n const src = URL.createObjectURL(new Blob([data], { type: mimeType }));\r\n const img = document.createElement('img');\r\n img.src = src;\r\n img.onload = function () {\r\n createImageBitmap(img, {\r\n premultiplyAlpha: 'none'\r\n })\r\n .then((bm) => {\r\n const options: TextureCreationOptions = {\r\n texture: texture,\r\n samplerOptions\r\n };\r\n const tex = Application.instance.device.createTexture2DFromImage(bm, srgb, options);\r\n if (tex) {\r\n resolve(tex);\r\n } else {\r\n reject('create texture from image element failed');\r\n }\r\n })\r\n .catch(() => {\r\n const cvs = document.createElement('canvas');\r\n cvs.width = img.width;\r\n cvs.height = img.height;\r\n const ctx = cvs.getContext('2d');\r\n ctx.drawImage(img, 0, 0);\r\n const options: TextureCreationOptions = {\r\n texture: texture,\r\n samplerOptions\r\n };\r\n const tex = Application.instance.device.createTexture2DFromImage(cvs, srgb, options);\r\n if (tex) {\r\n resolve(tex);\r\n } else {\r\n reject('create texture from image element failed');\r\n }\r\n });\r\n };\r\n img.onerror = (err) => {\r\n reject(err);\r\n };\r\n });\r\n }\r\n}\r\n"],"names":["WebImageLoader","AbstractTextureLoader","supportMIMEType","mimeType","load","data","srgb","samplerOptions","texture","Promise","resolve","reject","src","URL","createObjectURL","Blob","type","img","document","createElement","onload","createImageBitmap","premultiplyAlpha","then","bm","options","tex","Application","instance","device","createTexture2DFromImage","catch","cvs","width","height","ctx","getContext","drawImage","onerror","err"],"mappings":";;;AAKA;;;IAIO,MAAMA,cAAuBC,SAAAA,qBAAAA,CAAAA;AAClCC,IAAAA,eAAAA,CAAgBC,QAAgB,EAAW;AACzC,QAAA,OAAOA,QAAa,KAAA,WAAA,IAAeA,QAAa,KAAA,YAAA,IAAgBA,QAAa,KAAA,WAAA;AAC/E;IACA,MAAMC,IAAAA,CACJD,QAAgB,EAChBE,IAA8B,EAC9BC,IAAa,EACbC,cAA+B,EAC/BC,OAAqB,EACC;QACtB,OAAO,IAAIC,OAAqB,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACxC,YAAA,IAAI,CAACR,QAAU,EAAA;gBACbQ,MAAO,CAAA,yBAAA,CAAA;AACT;AACA,YAAA,MAAMC,GAAMC,GAAAA,GAAAA,CAAIC,eAAe,CAAC,IAAIC,IAAK,CAAA;AAACV,gBAAAA;aAAK,EAAE;gBAAEW,IAAMb,EAAAA;AAAS,aAAA,CAAA,CAAA;YAClE,MAAMc,GAAAA,GAAMC,QAASC,CAAAA,aAAa,CAAC,KAAA,CAAA;AACnCF,YAAAA,GAAAA,CAAIL,GAAG,GAAGA,GAAAA;AACVK,YAAAA,GAAAA,CAAIG,MAAM,GAAG,WAAA;AACXC,gBAAAA,iBAAAA,CAAkBJ,GAAK,EAAA;oBACrBK,gBAAkB,EAAA;iBAEjBC,CAAAA,CAAAA,IAAI,CAAC,CAACC,EAAAA,GAAAA;AACL,oBAAA,MAAMC,OAAkC,GAAA;wBACtCjB,OAASA,EAAAA,OAAAA;AACTD,wBAAAA;AACF,qBAAA;oBACA,MAAMmB,GAAAA,GAAMC,YAAYC,QAAQ,CAACC,MAAM,CAACC,wBAAwB,CAACN,EAAAA,EAAIlB,IAAMmB,EAAAA,OAAAA,CAAAA;AAC3E,oBAAA,IAAIC,GAAK,EAAA;wBACPhB,OAAQgB,CAAAA,GAAAA,CAAAA;qBACH,MAAA;wBACLf,MAAO,CAAA,0CAAA,CAAA;AACT;AACF,iBAAA,CAAA,CACCoB,KAAK,CAAC,IAAA;oBACL,MAAMC,GAAAA,GAAMd,QAASC,CAAAA,aAAa,CAAC,QAAA,CAAA;oBACnCa,GAAIC,CAAAA,KAAK,GAAGhB,GAAAA,CAAIgB,KAAK;oBACrBD,GAAIE,CAAAA,MAAM,GAAGjB,GAAAA,CAAIiB,MAAM;oBACvB,MAAMC,GAAAA,GAAMH,GAAII,CAAAA,UAAU,CAAC,IAAA,CAAA;oBAC3BD,GAAIE,CAAAA,SAAS,CAACpB,GAAAA,EAAK,CAAG,EAAA,CAAA,CAAA;AACtB,oBAAA,MAAMQ,OAAkC,GAAA;wBACtCjB,OAASA,EAAAA,OAAAA;AACTD,wBAAAA;AACF,qBAAA;oBACA,MAAMmB,GAAAA,GAAMC,YAAYC,QAAQ,CAACC,MAAM,CAACC,wBAAwB,CAACE,GAAAA,EAAK1B,IAAMmB,EAAAA,OAAAA,CAAAA;AAC5E,oBAAA,IAAIC,GAAK,EAAA;wBACPhB,OAAQgB,CAAAA,GAAAA,CAAAA;qBACH,MAAA;wBACLf,MAAO,CAAA,0CAAA,CAAA;AACT;AACF,iBAAA,CAAA;AACJ,aAAA;YACAM,GAAIqB,CAAAA,OAAO,GAAG,CAACC,GAAAA,GAAAA;gBACb5B,MAAO4B,CAAAA,GAAAA,CAAAA;AACT,aAAA;AACF,SAAA,CAAA;AACF;AACF;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for any kind loaders
|
|
3
|
+
* @public
|
|
4
|
+
*/ class LoaderBase {
|
|
5
|
+
/** @internal */ _urlResolver;
|
|
6
|
+
/**
|
|
7
|
+
* Creates an instance of LoaderBase
|
|
8
|
+
*/ constructor(){
|
|
9
|
+
this._urlResolver = null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* URL resolver for the loader
|
|
13
|
+
*/ get urlResolver() {
|
|
14
|
+
return this._urlResolver;
|
|
15
|
+
}
|
|
16
|
+
set urlResolver(resolver) {
|
|
17
|
+
this._urlResolver = resolver;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Sends a GET request
|
|
21
|
+
* @param url - The URL to get
|
|
22
|
+
* @param headers - The headers for the request
|
|
23
|
+
* @param crossOrigin - crossOrigin property for the request
|
|
24
|
+
* @returns Response of the request
|
|
25
|
+
*/ async request(url, headers = {}, crossOrigin = 'anonymous') {
|
|
26
|
+
url = this._urlResolver ? this._urlResolver(url) : null;
|
|
27
|
+
return url ? fetch(url, {
|
|
28
|
+
credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',
|
|
29
|
+
headers: headers
|
|
30
|
+
}) : null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Base class for any kind of texture loaders
|
|
35
|
+
* @public
|
|
36
|
+
*/ class AbstractTextureLoader extends LoaderBase {
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Base class for any kind of model loaders
|
|
40
|
+
* @public
|
|
41
|
+
*/ class AbstractModelLoader extends LoaderBase {
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { AbstractModelLoader, AbstractTextureLoader, LoaderBase };
|
|
45
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sources":["../../../../src/asset/loaders/loader.ts"],"sourcesContent":["import type { BaseTexture, SamplerOptions } from '@zephyr3d/device';\r\nimport type { AssetManager } from '../assetmanager';\r\nimport type { SharedModel } from '../model';\r\nimport type { DecoderModule } from 'draco3d';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\n\r\n/**\r\n * Base interface for any kind loaders\r\n * @public\r\n */\r\nexport class LoaderBase {\r\n /** @internal */\r\n protected _urlResolver: (url: string) => string;\r\n /**\r\n * Creates an instance of LoaderBase\r\n */\r\n constructor() {\r\n this._urlResolver = null;\r\n }\r\n /**\r\n * URL resolver for the loader\r\n */\r\n get urlResolver(): (url: string) => string {\r\n return this._urlResolver;\r\n }\r\n set urlResolver(resolver: (url: string) => string) {\r\n this._urlResolver = resolver;\r\n }\r\n /**\r\n * Sends a GET request\r\n * @param url - The URL to get\r\n * @param headers - The headers for the request\r\n * @param crossOrigin - crossOrigin property for the request\r\n * @returns Response of the request\r\n */\r\n async request(\r\n url: string,\r\n headers: Record<string, string> = {},\r\n crossOrigin = 'anonymous'\r\n ): Promise<Response> {\r\n url = this._urlResolver ? this._urlResolver(url) : null;\r\n return url\r\n ? fetch(url, {\r\n credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',\r\n headers: headers\r\n })\r\n : null;\r\n }\r\n}\r\n/**\r\n * Base class for any kind of texture loaders\r\n * @public\r\n */\r\nexport abstract class AbstractTextureLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a texture with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a texture\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the texture image data\r\n * @param data - The texture image data\r\n * @param srgb - true if the texture is of sRGB format\r\n * @param samplerOptions - Sampler options of the texture\r\n * @param texture - if not null, this is a texture restore operation\r\n * @returns The loaded texture\r\n */\r\n abstract load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture>;\r\n}\r\n\r\n/**\r\n * Base class for any kind of model loaders\r\n * @public\r\n */\r\nexport abstract class AbstractModelLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a model with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a model\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the model data\r\n * @param data - The model data\r\n * @returns The loaded model\r\n */\r\n abstract load(\r\n assetManager: AssetManager,\r\n url: string,\r\n mimeType: string,\r\n data: Blob,\r\n dracoDecoderModule?: DecoderModule\r\n ): Promise<SharedModel>;\r\n}\r\n"],"names":["LoaderBase","_urlResolver","urlResolver","resolver","request","url","headers","crossOrigin","fetch","credentials","AbstractTextureLoader","AbstractModelLoader"],"mappings":"AAMA;;;AAGC,IACM,MAAMA,UAAAA,CAAAA;qBAEX,YAAgD;AAChD;;AAEC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,YAAY,GAAG,IAAA;AACtB;AACA;;AAEC,MACD,IAAIC,WAAuC,GAAA;QACzC,OAAO,IAAI,CAACD,YAAY;AAC1B;IACA,IAAIC,WAAAA,CAAYC,QAAiC,EAAE;QACjD,IAAI,CAACF,YAAY,GAAGE,QAAAA;AACtB;AACA;;;;;;MAOA,MAAMC,OACJC,CAAAA,GAAW,EACXC,OAAAA,GAAkC,EAAE,EACpCC,WAAc,GAAA,WAAW,EACN;QACnBF,GAAM,GAAA,IAAI,CAACJ,YAAY,GAAG,IAAI,CAACA,YAAY,CAACI,GAAO,CAAA,GAAA,IAAA;QACnD,OAAOA,GAAAA,GACHG,MAAMH,GAAK,EAAA;YACTI,WAAaF,EAAAA,WAAAA,KAAgB,cAAc,aAAgB,GAAA,SAAA;YAC3DD,OAASA,EAAAA;SAEX,CAAA,GAAA,IAAA;AACN;AACF;AACA;;;IAIO,MAAeI,qBAA8BV,SAAAA,UAAAA,CAAAA;AAyBpD;AAEA;;;IAIO,MAAeW,mBAA4BX,SAAAA,UAAAA,CAAAA;AAsBlD;;;;"}
|