@zephyr3d/scene 0.7.0 → 0.8.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 +4 -33
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +24 -11
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +1 -0
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +0 -1
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/ik/ccd_solver.js +372 -0
- package/dist/animation/ik/ccd_solver.js.map +1 -0
- package/dist/animation/ik/fabrik_solver.js +399 -0
- package/dist/animation/ik/fabrik_solver.js.map +1 -0
- package/dist/animation/ik/ik_angle_constraint.js +181 -0
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
- package/dist/animation/ik/ik_chain.js +163 -0
- package/dist/animation/ik/ik_chain.js.map +1 -0
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_constraint.js +25 -0
- package/dist/animation/ik/ik_constraint.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +123 -0
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
- package/dist/animation/ik/ik_solver.js +48 -0
- package/dist/animation/ik/ik_solver.js.map +1 -0
- package/dist/animation/ik/ik_track.js +96 -0
- package/dist/animation/ik/ik_track.js.map +1 -0
- package/dist/animation/ik/ik_utils.js +270 -0
- package/dist/animation/ik/ik_utils.js.map +1 -0
- package/dist/animation/ik/two_bone_ik_solver.js +332 -0
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
- package/dist/animation/ik_modifier.js +61 -0
- package/dist/animation/ik_modifier.js.map +1 -0
- package/dist/animation/ik_postprocessor.js +71 -0
- package/dist/animation/ik_postprocessor.js.map +1 -0
- package/dist/animation/manual_transform_processor.js +156 -0
- package/dist/animation/manual_transform_processor.js.map +1 -0
- package/dist/animation/morphtarget.js +7 -1
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -3
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +37 -41
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +0 -1
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +0 -1
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +57 -60
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +38 -0
- package/dist/animation/skeleton_modifier.js.map +1 -0
- package/dist/animation/skeleton_postprocessor.js +50 -0
- package/dist/animation/skeleton_postprocessor.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +503 -0
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
- package/dist/animation/spring/spring_chain.js +103 -0
- package/dist/animation/spring/spring_chain.js.map +1 -0
- package/dist/animation/spring/spring_collider.js +247 -0
- package/dist/animation/spring/spring_collider.js.map +1 -0
- package/dist/animation/spring/spring_constraint.js +21 -0
- package/dist/animation/spring/spring_constraint.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +20 -0
- package/dist/animation/spring/spring_particle.js.map +1 -0
- package/dist/animation/spring/spring_system.js +526 -0
- package/dist/animation/spring/spring_system.js.map +1 -0
- package/dist/animation/spring_modifier.js +45 -0
- package/dist/animation/spring_modifier.js.map +1 -0
- package/dist/animation/spring_postprocessor.js +54 -0
- package/dist/animation/spring_postprocessor.js.map +1 -0
- package/dist/animation/translationtrack.js +0 -1
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +13 -4
- package/dist/app/api.js.map +1 -1
- package/dist/app/app.js +13 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +33 -45
- package/dist/app/engine.js.map +1 -1
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +318 -0
- package/dist/app/screen.js.map +1 -0
- package/dist/app/scriptingsystem.js +10 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +11 -22
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +79 -58
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +5 -5
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +6 -2
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +1 -1
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +6 -2
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +22 -15
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +2 -1
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +2 -2
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +9 -5
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +9 -11
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js +0 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +1 -3
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +121 -37
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +19 -17
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +45 -43
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +27 -21
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +28 -19
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +15802 -15577
- package/dist/index.js +33 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +11 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +10 -9
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +3 -3
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -0
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js.map +1 -1
- package/dist/material/pbrblueprint.js +180 -22
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +41 -56
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +301 -0
- package/dist/material/sprite.js.map +1 -0
- package/dist/material/sprite3d.js +301 -0
- package/dist/material/sprite3d.js.map +1 -0
- package/dist/material/sprite3d_std.js +116 -0
- package/dist/material/sprite3d_std.js.map +1 -0
- package/dist/material/sprite3dblueprint.js +235 -0
- package/dist/material/sprite3dblueprint.js.map +1 -0
- package/dist/material/sprite_std.js +116 -0
- package/dist/material/sprite_std.js.map +1 -0
- package/dist/material/spriteblueprint.js +235 -0
- package/dist/material/spriteblueprint.js.map +1 -0
- package/dist/material/terrain-cm.js +0 -1
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +7 -5
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -6
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +0 -10
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +4 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +15 -17
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +3 -4
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable.js +15 -0
- package/dist/render/drawable.js.map +1 -0
- package/dist/render/drawable_mixin.js +8 -4
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +3 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +67 -64
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +1 -2
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +13 -13
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -7
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +4 -5
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +10 -5
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +16 -22
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +27 -52
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/rendertarget.js +5 -0
- package/dist/render/rendertarget.js.map +1 -0
- package/dist/render/screenrendertarget.js +56 -0
- package/dist/render/screenrendertarget.js.map +1 -0
- package/dist/render/shadowmap_pass.js +4 -5
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +16 -14
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +296 -0
- package/dist/scene/basesprite.js.map +1 -0
- package/dist/scene/batchgroup.js +4 -2
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +9 -10
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +22 -4
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +96 -26
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +25 -22
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +0 -16
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +7 -4
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +20 -35
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sprite.js +18 -0
- package/dist/scene/sprite.js.map +1 -0
- package/dist/scene/sprite3d.js +18 -0
- package/dist/scene/sprite3d.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +5 -4
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +65 -48
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +35 -30
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +17 -29
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +1 -1
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +3 -1
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +6 -18
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +9 -3
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +2 -2
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +2 -2
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +2 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +2 -2
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +5 -6
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +2 -2
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/aabbtree.js +1 -1
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +578 -104
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +471 -9
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/common.js +1 -1
- package/dist/utility/blueprint/common.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +9 -5
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +288 -80
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +92 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +62 -45
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/blueprint/node.js +28 -1
- package/dist/utility/blueprint/node.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js.map +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +1 -1
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/json.js +19 -15
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +89 -22
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +44 -41
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -3
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +97 -9
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +102 -28
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +14 -12
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +216 -26
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +71 -100
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +3 -2
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +42 -9
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +7 -5
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -15
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +3 -2
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +164 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +8 -6
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +11 -9
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +6 -0
- package/dist/utility/serialization/types.js.map +1 -0
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +14 -14
- package/dist/values.js.map +1 -1
- package/package.json +80 -80
package/dist/asset/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { Mesh } from '../scene/mesh';\r\nimport type { BoundingBox } from '../utility';\r\nimport type { Scene } from '../scene';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\r\nimport { processMorphData } from '../animation/morphtarget';\r\nimport { MAX_MORPH_TARGETS } from '../values';\r\nimport { MorphTargetTrack } from '../animation/morphtrack';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Texture2D;\r\n sampler: TextureSampler;\r\n texCoord: number;\r\n transform: Matrix4x4;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: MaterialTextureInfo;\r\n bumpScale?: number;\r\n emissiveMap?: MaterialTextureInfo;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: MaterialTextureInfo;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: MaterialTextureInfo;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: MaterialTextureInfo;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: MaterialTextureInfo;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: MaterialTextureInfo;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: MaterialTextureInfo;\r\n clearCoatNormalMap?: MaterialTextureInfo;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: MaterialTextureInfo;\r\n thicknessFactor?: number;\r\n thicknessMap?: MaterialTextureInfo;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: MaterialTextureInfo;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: MaterialTextureInfo;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: MaterialTextureInfo;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: MaterialTextureInfo;\r\n specularColorMap?: MaterialTextureInfo;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: MaterialTextureInfo;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: DRef<Primitive>;\r\n material: DRef<MeshMaterial>;\r\n mesh?: Mesh;\r\n rawPositions: Float32Array;\r\n rawBlendIndices: TypedArray;\r\n rawJointWeights: TypedArray;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: number[];\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: AssetAnimationTrack[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: AssetHierarchyNode;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: AssetMeshData;\r\n private _skeleton: AssetSkeleton;\r\n private _attachToSkeleton: Set<AssetSkeleton>;\r\n private _meshAttached: boolean;\r\n private _matrix: Matrix4x4;\r\n private _worldMatrix: Matrix4x4;\r\n private _weights: number[];\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, parent?: AssetHierarchyNode) {\r\n super(name);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._meshAttached = false;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent(): AssetHierarchyNode {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix(): Matrix4x4 {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix(): Matrix4x4 {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh(): AssetMeshData {\r\n return this._mesh;\r\n }\r\n set mesh(data: AssetMeshData) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances(): { t: Vector3; s: Vector3; r: Quaternion }[] {\r\n return this._instances;\r\n }\r\n /** Default morph target weights */\r\n get weights(): number[] {\r\n return this._weights;\r\n }\r\n set weights(val: number[]) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton(): AssetSkeleton {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton: AssetSkeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position(): Vector3 {\r\n return this._position;\r\n }\r\n set position(val: Vector3) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation(): Quaternion {\r\n return this._rotation;\r\n }\r\n set rotation(val: Quaternion) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling(): Vector3 {\r\n return this._scaling;\r\n }\r\n set scaling(val: Vector3) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached(): boolean {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children(): AssetHierarchyNode[] {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached(): Set<AssetSkeleton> {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: Matrix4x4) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n if (child.meshAttached) {\r\n this.setMeshAttached();\r\n }\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n /** @internal */\r\n private setMeshAttached() {\r\n this._meshAttached = true;\r\n this._parent?.setMeshAttached();\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: AssetHierarchyNode;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPoseMatrices: Matrix4x4[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPoseMatrices = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPoseMatrices.push(joint.worldMatrix);\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /**\r\n * Creates an instance of SharedModel\r\n * @param name - Name of the model\r\n */\r\n constructor(name?: string) {\r\n super();\r\n this._name = name || '';\r\n this._skeletons = [];\r\n this._nodes = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._activeScene = -1;\r\n }\r\n /** Name of the model */\r\n get name(): string {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes(): AssetScene[] {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations(): AssetAnimationData[] {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons(): AssetSkeleton[] {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes(): AssetHierarchyNode[] {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene(): number {\r\n return this._activeScene;\r\n }\r\n set activeScene(val: number) {\r\n this._activeScene = val;\r\n }\r\n /**\r\n * Adds a node to the scene\r\n * @param parent - Under which node the node should be added\r\n * @param index - Index of the node\r\n * @param name - Name of the node\r\n * @returns The added node\r\n */\r\n addNode(parent: AssetHierarchyNode, index: number, name: string): AssetHierarchyNode {\r\n const childNode = new AssetHierarchyNode(name, parent);\r\n this._nodes[index] = childNode;\r\n return childNode;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n createSceneNode(scene: Scene, instancing: boolean): SceneNode {\r\n const group = new SceneNode(scene);\r\n group.name = this.name;\r\n const animationSet = group.animationSet;\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\r\n > = new Map();\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n this.setAssetNodeToSceneNode(\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n instancing\r\n );\r\n }\r\n for (const animationData of this.animations) {\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = animationSet.createAnimation(name, true);\r\n for (const track of animationData.tracks) {\r\n if (track.type === 'translation') {\r\n animation.addTrack(nodeMap.get(track.node), new NodeTranslationTrack(track.interpolator, true));\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(nodeMap.get(track.node), new NodeScaleTrack(track.interpolator, true));\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(nodeMap.get(track.node), new NodeRotationTrack(track.interpolator, true));\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh.subMeshes) {\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n m.mesh.getBoundingVolume().toAABB(),\r\n true\r\n );\r\n animation.addTrack(m.mesh, morphTrack);\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.skeleton) {\r\n nodes.skeleton = new Skeleton(\r\n sk.joints.map((val) => nodeMap.get(val)),\r\n sk.inverseBindMatrices,\r\n sk.bindPoseMatrices\r\n );\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions,\r\n blendIndices: nodes.bounding[i].rawBlendIndices,\r\n weights: nodes.bounding[i].rawJointWeights\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.skeleton.persistentId;\r\n }\r\n animationSet.skeletons.push(new DRef(nodes.skeleton));\r\n }\r\n animation.addSkeleton(nodes.skeleton.persistentId);\r\n }\r\n }\r\n }\r\n }\r\n group.iterate((child) => {\r\n if (child !== group) {\r\n child.sealed = true;\r\n }\r\n });\r\n group.sharedModel = this;\r\n return group;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n const nodes = [...this._nodes];\r\n while (nodes.length > 0) {\r\n const node = nodes.shift();\r\n nodes.push(...node.children);\r\n const mesh = node.mesh;\r\n if (mesh) {\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh.primitive?.dispose();\r\n subMesh.material?.dispose();\r\n }\r\n }\r\n }\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private setAssetNodeToSceneNode(\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n instancing: boolean\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = assetNode.skeleton;\r\n for (const subMesh of meshData.subMeshes) {\r\n for (const instance of assetNode.instances) {\r\n const meshNode = new Mesh(scene);\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n meshNode.skinAnimation = !!skeleton;\r\n meshNode.morphAnimation = subMesh.numTargets > 0;\r\n meshNode.primitive = subMesh.primitive.get();\r\n meshNode.material =\r\n instancing && !meshNode.skinAnimation && !meshNode.morphAnimation\r\n ? subMesh.material.get().createInstance()\r\n : subMesh.material.get().clone();\r\n meshNode.parent = node;\r\n subMesh.mesh = meshNode;\r\n processMorphData(subMesh, meshData.morphWeights);\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton).mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton).bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\r\n }\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPoseMatrices","addJoint","joint","inverseBindMatrix","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","onDispose","shift","subMesh","primitive","dispose","material","assetNode","set","scale","meshData","instance","meshNode","Mesh","s","r","clipTestEnabled","showState","skinAnimation","morphAnimation","numTargets","createInstance","clone","processMorphData","morphWeights","has"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator, Nullable } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { Mesh } from '../scene/mesh';\r\nimport type { BoundingBox } from '../utility';\r\nimport type { Scene } from '../scene';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\r\nimport { processMorphData } from '../animation/morphtarget';\r\nimport { MAX_MORPH_TARGETS } from '../values';\r\nimport { MorphTargetTrack } from '../animation/morphtrack';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Nullable<Texture2D>;\r\n sampler: Nullable<TextureSampler>;\r\n texCoord: number;\r\n transform: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: Nullable<MaterialTextureInfo>;\r\n bumpScale?: number;\r\n emissiveMap?: Nullable<MaterialTextureInfo>;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: Nullable<MaterialTextureInfo>;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: Nullable<MaterialTextureInfo>;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: Nullable<MaterialTextureInfo>;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatNormalMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: Nullable<MaterialTextureInfo>;\r\n thicknessFactor?: number;\r\n thicknessMap?: Nullable<MaterialTextureInfo>;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: Nullable<MaterialTextureInfo>;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: Nullable<MaterialTextureInfo>;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: Nullable<MaterialTextureInfo>;\r\n specularColorMap?: Nullable<MaterialTextureInfo>;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: DRef<Primitive>;\r\n material: DRef<MeshMaterial>;\r\n mesh?: Mesh;\r\n rawPositions: Nullable<Float32Array>;\r\n rawBlendIndices: Nullable<TypedArray>;\r\n rawJointWeights: Nullable<TypedArray>;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: Nullable<number[]>;\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: AssetAnimationTrack[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: Nullable<AssetHierarchyNode>;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: Nullable<AssetMeshData>;\r\n private _skeleton: Nullable<AssetSkeleton>;\r\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\r\n private _meshAttached: boolean;\r\n private _matrix: Nullable<Matrix4x4>;\r\n private _worldMatrix: Nullable<Matrix4x4>;\r\n private _weights: Nullable<number[]>;\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, parent?: Nullable<AssetHierarchyNode>) {\r\n super(name);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._meshAttached = false;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent() {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix() {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix() {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n set mesh(data) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances() {\r\n return this._instances ?? null;\r\n }\r\n /** Default morph target weights */\r\n get weights() {\r\n return this._weights;\r\n }\r\n set weights(val) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton() {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position() {\r\n return this._position;\r\n }\r\n set position(val) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(val) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n set scaling(val) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached() {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children() {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached() {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n if (child.meshAttached) {\r\n this.setMeshAttached();\r\n }\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n /** @internal */\r\n private setMeshAttached() {\r\n this._meshAttached = true;\r\n this._parent?.setMeshAttached();\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: Nullable<AssetHierarchyNode>;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPose = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPose.push({\r\n position: joint.position.clone(),\r\n rotation: joint.rotation.clone(),\r\n scale: joint.scaling.clone()\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /**\r\n * Creates an instance of SharedModel\r\n * @param name - Name of the model\r\n */\r\n constructor(name?: string) {\r\n super();\r\n this._name = name || '';\r\n this._skeletons = [];\r\n this._nodes = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._activeScene = -1;\r\n }\r\n /** Name of the model */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes() {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations() {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene() {\r\n return this._activeScene;\r\n }\r\n set activeScene(val) {\r\n this._activeScene = val;\r\n }\r\n /**\r\n * Adds a node to the scene\r\n * @param parent - Under which node the node should be added\r\n * @param index - Index of the node\r\n * @param name - Name of the node\r\n * @returns The added node\r\n */\r\n addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string) {\r\n const childNode = new AssetHierarchyNode(name, parent);\r\n this._nodes[index] = childNode;\r\n return childNode;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n createSceneNode(scene: Scene, instancing: boolean) {\r\n const group = new SceneNode(scene);\r\n group.name = this.name;\r\n const animationSet = group.animationSet;\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\r\n > = new Map();\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n this.setAssetNodeToSceneNode(\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n instancing\r\n );\r\n }\r\n for (const animationData of this.animations) {\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = animationSet.createAnimation(name, true)!;\r\n for (const track of animationData.tracks) {\r\n if (track.type === 'translation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeTranslationTrack(track.interpolator, true));\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeScaleTrack(track.interpolator, true));\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeRotationTrack(track.interpolator, true));\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh!.subMeshes) {\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n m.mesh!.getBoundingVolume()!.toAABB(),\r\n true\r\n );\r\n animation.addTrack(m.mesh!, morphTrack);\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.skeleton) {\r\n nodes.skeleton = new Skeleton(\r\n sk.joints.map((val) => nodeMap.get(val)!),\r\n sk.inverseBindMatrices,\r\n sk.bindPose\r\n );\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions!,\r\n blendIndices: nodes.bounding[i].rawBlendIndices!,\r\n weights: nodes.bounding[i].rawJointWeights!\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.skeleton.persistentId;\r\n }\r\n animationSet.skeletons.push(new DRef(nodes.skeleton));\r\n }\r\n animation.addSkeleton(nodes.skeleton.persistentId);\r\n }\r\n }\r\n }\r\n }\r\n group.iterate((child) => {\r\n if (child !== group) {\r\n child.sealed = true;\r\n }\r\n });\r\n group.sharedModel = this;\r\n return group;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n const nodes = [...this._nodes];\r\n while (nodes.length > 0) {\r\n const node = nodes.shift();\r\n nodes.push(...node!.children);\r\n const mesh = node!.mesh;\r\n if (mesh) {\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh.primitive?.dispose();\r\n subMesh.material?.dispose();\r\n }\r\n }\r\n }\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private setAssetNodeToSceneNode(\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n instancing: boolean\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = assetNode.skeleton;\r\n for (const subMesh of meshData.subMeshes) {\r\n for (const instance of assetNode.instances!) {\r\n const meshNode = new Mesh(scene);\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n meshNode.skinAnimation = !!skeleton;\r\n meshNode.morphAnimation = subMesh.numTargets > 0;\r\n meshNode.primitive = subMesh.primitive.get()!;\r\n meshNode.material =\r\n instancing && !meshNode.skinAnimation && !meshNode.morphAnimation\r\n ? subMesh.material.get()!.createInstance()\r\n : subMesh.material.get()!.clone();\r\n meshNode.parent = node;\r\n subMesh.mesh = meshNode;\r\n processMorphData(subMesh, meshData.morphWeights!);\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\r\n }\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","onDispose","shift","subMesh","primitive","dispose","material","assetNode","set","meshData","instance","meshNode","Mesh","s","r","clipTestEnabled","showState","skinAnimation","morphAnimation","numTargets","createInstance","processMorphData","morphWeights","has"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Texture2D;\r\n protected _sampler: TextureSampler;\r\n protected _blurSizeTex: Texture2D;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex(): Texture2D {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex: Texture2D) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex(): Texture2D {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex: Texture2D) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex(): number {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val: number) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale(): number {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val: number) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler(): TextureSampler {\r\n return this._sampler;\r\n }\r\n set sampler(sampler: TextureSampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar(): Vector2 {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v: Vector2) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff(): number {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val: number) {\r\n this._depthCutoff = val;\r\n }\r\n get size(): Vector2 {\r\n return this._size;\r\n }\r\n set size(val: Vector2) {\r\n this._size.set(val);\r\n }\r\n get stepSize(): number {\r\n return this._stepSize;\r\n }\r\n set stepSize(val: number) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev(): number {\r\n return this._stdDev;\r\n }\r\n set stdDev(val: number) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius(): number {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val: number) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash(): string {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.depthTex = pb.tex2D().uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 =\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.depthValue)\r\n : this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","func","$l","depthValue","textureSample","uv","depth01","getDevice","decodeNormalizedFloatFromRGBA","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Nullable<Texture2D>;\r\n protected _sampler: Nullable<TextureSampler>;\r\n protected _blurSizeTex: Nullable<Texture2D>;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex() {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex() {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex() {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale() {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler() {\r\n return this._sampler;\r\n }\r\n set sampler(sampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar() {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n get size() {\r\n return this._size;\r\n }\r\n set size(val) {\r\n this._size.set(val);\r\n }\r\n get stepSize() {\r\n return this._stepSize;\r\n }\r\n set stepSize(val) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev() {\r\n return this._stdDev;\r\n }\r\n set stdDev(val) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius() {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash() {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.depthTex = pb.tex2D().uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex!, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 =\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.depthValue)\r\n : this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum as PBShaderExp;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","func","$l","depthValue","textureSample","uv","depth01","getDevice","decodeNormalizedFloatFromRGBA","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}
|
package/dist/blitter/blitter.js
CHANGED
|
@@ -31,13 +31,13 @@ import { getDevice } from '../app/api.js';
|
|
|
31
31
|
return this._viewport;
|
|
32
32
|
}
|
|
33
33
|
set viewport(val) {
|
|
34
|
-
this._viewport = val
|
|
34
|
+
this._viewport = val;
|
|
35
35
|
}
|
|
36
36
|
/** Scissor rect */ get scissor() {
|
|
37
37
|
return this._scissor;
|
|
38
38
|
}
|
|
39
39
|
set scissor(val) {
|
|
40
|
-
this._scissor = val
|
|
40
|
+
this._scissor = val;
|
|
41
41
|
}
|
|
42
42
|
/** Destination rectangle */ get destRect() {
|
|
43
43
|
return this._destRect;
|
|
@@ -46,7 +46,7 @@ import { getDevice } from '../app/api.js';
|
|
|
46
46
|
if (!!this._destRect !== !!val) {
|
|
47
47
|
this.invalidateHash();
|
|
48
48
|
}
|
|
49
|
-
this._destRect = val
|
|
49
|
+
this._destRect = val;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* Whether output color value in gamma color space
|
|
@@ -98,7 +98,7 @@ import { getDevice } from '../app/api.js';
|
|
|
98
98
|
case '2d-array':
|
|
99
99
|
return pb.textureArraySampleLevel(srcTex, uv, srcLayer, 0);
|
|
100
100
|
default:
|
|
101
|
-
|
|
101
|
+
throw new Error(`Invalid blit type: ${type}`);
|
|
102
102
|
}
|
|
103
103
|
} else {
|
|
104
104
|
switch(type){
|
|
@@ -109,7 +109,7 @@ import { getDevice } from '../app/api.js';
|
|
|
109
109
|
case '2d-array':
|
|
110
110
|
return pb.textureArrayLoad(srcTex, pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)), srcLayer, 0);
|
|
111
111
|
default:
|
|
112
|
-
|
|
112
|
+
throw new Error(`Invalid blit type: ${type}`);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -281,7 +281,7 @@ function getBlitProgram(type, filter, bilinearFiltering, sampleType, flip) {
|
|
|
281
281
|
const hash = `${type}:${filter.hash}:${bilinearFiltering}:${sampleType}:${flip ? 1 : 0}`;
|
|
282
282
|
let programInfo = blitProgramCache[hash];
|
|
283
283
|
if (programInfo === undefined) {
|
|
284
|
-
programInfo = createBlitProgram(type, filter, bilinearFiltering, sampleType, flip, !!filter.destRect)
|
|
284
|
+
programInfo = createBlitProgram(type, filter, bilinearFiltering, sampleType, flip, !!filter.destRect);
|
|
285
285
|
blitProgramCache[hash] = programInfo;
|
|
286
286
|
}
|
|
287
287
|
return programInfo;
|
|
@@ -380,13 +380,11 @@ function createBlitProgram(type, filter, bilinearFiltering, st, flip, scaleBias)
|
|
|
380
380
|
});
|
|
381
381
|
}
|
|
382
382
|
});
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
}
|
|
386
|
-
return program ? {
|
|
383
|
+
program.name = `@Blit_${type}_${st}_${bilinearFiltering ? 'bilinear' : 'point'}_${flip ? 'flip' : 'noflip'}`;
|
|
384
|
+
return {
|
|
387
385
|
program,
|
|
388
386
|
bindGroup: getDevice().createBindGroup(program.bindGroupLayouts[0])
|
|
389
|
-
}
|
|
387
|
+
};
|
|
390
388
|
}
|
|
391
389
|
|
|
392
390
|
export { Blitter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blitter.js","sources":["../../src/blitter/blitter.ts"],"sourcesContent":["import type { CubeFace } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n RenderStateSet,\r\n BaseTexture,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureSampler,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from '../render/primitive';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n// TODO: multi-pass support for filter\r\n\r\n/**\r\n * Blit type\r\n * @public\r\n */\r\nexport type BlitType = '2d' | '2d-array' | 'cube';\r\n\r\ntype BlitProgramInfo = { program: GPUProgram; bindGroup: BindGroup };\r\n\r\n/**\r\n * Base class for any kind of blitters\r\n * @public\r\n */\r\nexport abstract class Blitter {\r\n /** @internal */\r\n protected _hash: string;\r\n /** @internal */\r\n protected _renderStates: RenderStateSet;\r\n /** @internal */\r\n protected _srgbOut: boolean;\r\n /** @internal */\r\n protected _flip: boolean;\r\n /** @internal */\r\n protected _viewport: number[];\r\n /** @internal */\r\n protected _scissor: number[];\r\n /** @internal */\r\n protected _destRect: number[];\r\n /** @internal */\r\n protected _offsetParams: Vector4;\r\n /**\r\n * Creates an instance of Blitter\r\n */\r\n constructor() {\r\n this._hash = null;\r\n this._renderStates = null;\r\n this._srgbOut = false;\r\n this._flip = false;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._destRect = null;\r\n this._offsetParams = new Vector4();\r\n }\r\n /** Viewport */\r\n get viewport(): number[] {\r\n return this._viewport;\r\n }\r\n set viewport(val: number[]) {\r\n this._viewport = val ?? null;\r\n }\r\n /** Scissor rect */\r\n get scissor(): number[] {\r\n return this._scissor;\r\n }\r\n set scissor(val: number[]) {\r\n this._scissor = val ?? null;\r\n }\r\n /** Destination rectangle */\r\n get destRect(): number[] {\r\n return this._destRect;\r\n }\r\n set destRect(val: number[]) {\r\n if (!!this._destRect !== !!val) {\r\n this.invalidateHash();\r\n }\r\n this._destRect = val ?? null;\r\n }\r\n /**\r\n * Whether output color value in gamma color space\r\n */\r\n get srgbOut(): boolean {\r\n return this._srgbOut;\r\n }\r\n set srgbOut(val: boolean) {\r\n if (this._srgbOut !== !!val) {\r\n this._srgbOut = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /**\r\n * Render states used to do the blitting\r\n */\r\n get renderStates(): RenderStateSet {\r\n return this._renderStates;\r\n }\r\n set renderStates(rs: RenderStateSet) {\r\n this._renderStates = rs;\r\n }\r\n /**\r\n * Program hash code\r\n */\r\n get hash(): string {\r\n if (!this._hash) {\r\n this._hash = `${this.constructor.name}:${this._srgbOut ? 1 : 0}:${this._flip ? 1 : 0}:${\r\n this._destRect ? 1 : 0\r\n }:${this.calcHash()}`;\r\n }\r\n return this._hash;\r\n }\r\n /**\r\n * Force the hash code to be regenerated\r\n */\r\n invalidateHash(): void {\r\n this._hash = null;\r\n }\r\n /**\r\n * Reads a texel from the source texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texture\r\n * @param uv - The texture coordinate from where the texel will be read\r\n * @param srcLayer - The layer of the source texture\r\n * @returns The read texel\r\n */\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint' | 'depth'\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n if (sampleType === 'float' || sampleType === 'depth') {\r\n switch (type) {\r\n case '2d':\r\n case 'cube':\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? pb.textureSampleLevel(srcTex, uv, 0)\r\n : pb.textureSample(srcTex, uv);\r\n case '2d-array':\r\n return pb.textureArraySampleLevel(srcTex, uv, srcLayer, 0);\r\n default:\r\n return null;\r\n }\r\n } else {\r\n switch (type) {\r\n case '2d':\r\n return pb.textureLoad(srcTex, pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)), 0);\r\n case 'cube':\r\n throw new Error('Integer format cube texture not supported');\r\n case '2d-array':\r\n return pb.textureArrayLoad(\r\n srcTex,\r\n pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)),\r\n srcLayer,\r\n 0\r\n );\r\n default:\r\n return null;\r\n }\r\n }\r\n }\r\n /**\r\n * Writes a texel to destination texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param uv - The texture coordinate to where the texel will be written\r\n * @param texel - The texel to be written\r\n * @returns The written texel\r\n */\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, uv: PBShaderExp, texel: PBShaderExp): PBShaderExp {\r\n return texel;\r\n }\r\n /**\r\n * Initialize uniforms of the blit program\r\n * @param _scope - The shader scope\r\n * @param _type - The blit type\r\n */\r\n setup(_scope: PBGlobalScope, _type: BlitType) {}\r\n /**\r\n * Update uniforms of the bind group\r\n * @param bindGroup - The bind group to be updated\r\n */\r\n setUniforms(_bindGroup: BindGroup, _sourceTex: BaseTexture) {}\r\n /**\r\n * Calculates the destination texel by the source texel\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texel\r\n * @param srcUV - The texture coordinate of the source texel\r\n * @param srcLayer - The layer of the source texture\r\n * @returns the destination texel\r\n */\r\n abstract filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampeType: 'float' | 'int' | 'uint' | 'depth'\r\n ): PBShaderExp;\r\n /**\r\n * Calculates the hash code\r\n * @returns the calculated hash code\r\n */\r\n protected abstract calcHash(): string;\r\n /** @internal */\r\n protected blit2D(source: Texture2D, dest: FrameBuffer, sampler?: TextureSampler): void {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n if (this._destRect) {\r\n const destWidth = this._viewport?.[2] ?? dest?.getWidth() ?? device.getBackBufferWidth();\r\n const destHeight = this._viewport?.[3] ?? dest?.getHeight() ?? device.getBackBufferHeight();\r\n this._offsetParams.setXYZW(\r\n this._destRect[2] / destWidth,\r\n this._destRect[3] / destHeight,\r\n (this._destRect[2] + 2 * this._destRect[0]) / destWidth - 1,\r\n (this._destRect[3] + 2 * this._destRect[1]) / destHeight - 1\r\n );\r\n programInfo.bindGroup.setValue('scaleBias', this._offsetParams);\r\n }\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blit2DArray(\r\n source: Texture2DArray,\r\n dest: FrameBuffer,\r\n layer: number,\r\n sampler?: TextureSampler\r\n ): void {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d-array',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('srcLayer', layer);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blitCubeMap(\r\n source: TextureCube,\r\n dest: FrameBuffer,\r\n face: CubeFace,\r\n sampler?: TextureSampler\r\n ): void {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n 'cube',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('texelSize', 1 / source.width);\r\n programInfo.bindGroup.setValue('cubeFace', face);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /**\r\n * Blits a 2D texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: FrameBuffer, sampler?: TextureSampler): void;\r\n /**\r\n * Blits a 2D texture to 2D texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2D, sampler?: TextureSampler): void;\r\n /**\r\n * Blits a 2D texture to given layer of a 2D array texture\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param layer - The layer of the destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2DArray, layer: number, sampler?: TextureSampler): void;\r\n /**\r\n * Blits a 2d array texture to another 2d array texture\r\n *\r\n * @remarks\r\n * All layers of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2DArray, sampler?: TextureSampler): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: FrameBuffer, layer: number, sampler?: TextureSampler): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2D, layer: number, sampler?: TextureSampler): void;\r\n /**\r\n * Blits a cube texture to another cube texture\r\n *\r\n * @remarks\r\n * All faces of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: TextureCube, sampler?: TextureSampler): void;\r\n /**\r\n * Blits given face of a cube texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: FrameBuffer, face: number, sampler?: TextureSampler): void;\r\n /**\r\n * Blits given face of a cube texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: Texture2D, face: number, sampler?: TextureSampler): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | FrameBuffer,\r\n layer?: number | TextureSampler,\r\n sampler?: TextureSampler\r\n ): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | FrameBuffer,\r\n layer?: number | TextureSampler,\r\n sampler?: TextureSampler\r\n ): void {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n if (!dest) {\r\n if (source.isTexture2D()) {\r\n this.blit2D(source, null, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n this.blit2DArray(source, null, (layer as number) || 0, sampler);\r\n } else if (source.isTextureCube()) {\r\n this.blitCubeMap(source, null, (layer as number) || 0, sampler);\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n } else {\r\n const framebuffer = dest.isFramebuffer()\r\n ? dest\r\n : device.pool.createTemporalFramebuffer(false, [dest], null);\r\n const destTexture = dest.isFramebuffer() ? dest.getColorAttachments()?.[0] : dest;\r\n if (source.isTexture2D()) {\r\n if (!destTexture?.isTexture2D() && !destTexture?.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2DArray()) {\r\n framebuffer.setColorAttachmentLayer(0, (layer as number) || 0);\r\n }\r\n this.blit2D(source, framebuffer, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n if (!destTexture?.isTexture2D() && !destTexture.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2D()) {\r\n this.blit2DArray(source, framebuffer, (layer as number) || 0, sampler);\r\n } else {\r\n const n = Math.min(source.depth, destTexture.depth);\r\n for (let i = 0; i < n; i++) {\r\n framebuffer.setColorAttachmentLayer(0, i);\r\n this.blit2DArray(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n }\r\n } else if (source.isTextureCube()) {\r\n if (!destTexture.isTextureCube() && !destTexture.isTexture2D()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTextureCube()) {\r\n for (let i = 0; i < 6; i++) {\r\n framebuffer.setColorAttachmentCubeFace(0, i);\r\n this.blitCubeMap(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n } else {\r\n this.blitCubeMap(source, framebuffer, (layer as number) || 0, sampler);\r\n }\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n if (framebuffer && framebuffer !== dest) {\r\n device.pool.releaseFrameBuffer(framebuffer);\r\n }\r\n }\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\nconst blitProgramCache: {\r\n [hash: string]: BlitProgramInfo;\r\n} = {};\r\n\r\nlet blitPrimitive2D: Primitive = null;\r\nlet blitRenderStates: RenderStateSet = null;\r\n\r\nfunction getBlitPrimitive2D(): Primitive {\r\n if (!blitPrimitive2D) {\r\n blitPrimitive2D = new Primitive();\r\n blitPrimitive2D.createAndSetVertexBuffer(\r\n 'position_f32x2',\r\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])\r\n );\r\n blitPrimitive2D.indexCount = 4;\r\n blitPrimitive2D.indexStart = 0;\r\n blitPrimitive2D.primitiveType = 'triangle-strip';\r\n }\r\n return blitPrimitive2D;\r\n}\r\n\r\nfunction getBlitRenderStateSet(): RenderStateSet {\r\n if (!blitRenderStates) {\r\n blitRenderStates = getDevice().createRenderStateSet();\r\n blitRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n blitRenderStates.useRasterizerState().setCullMode('none');\r\n }\r\n return blitRenderStates;\r\n}\r\n\r\nfunction getBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n sampleType: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean\r\n): BlitProgramInfo {\r\n const hash = `${type}:${filter.hash}:${bilinearFiltering}:${sampleType}:${flip ? 1 : 0}`;\r\n let programInfo = blitProgramCache[hash];\r\n if (programInfo === undefined) {\r\n programInfo =\r\n createBlitProgram(type, filter, bilinearFiltering, sampleType, flip, !!filter.destRect) || null;\r\n blitProgramCache[hash] = programInfo;\r\n }\r\n return programInfo;\r\n}\r\n\r\nfunction createBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n st: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean,\r\n scaleBias: boolean\r\n): BlitProgramInfo {\r\n const program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (scaleBias) {\r\n this.scaleBias = pb.vec4().uniform(0);\r\n }\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv =\r\n type === 'cube'\r\n ? pb.mul(pb.vec2(1, -1), this.$inputs.pos.xy)\r\n : pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (getDevice().type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n if (scaleBias) {\r\n this.$l.xy = pb.add(pb.mul(this.$builtins.position.xy, this.scaleBias.xy), this.scaleBias.zw);\r\n this.$builtins.position = pb.vec4(this.xy, 1, 1);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n switch (type) {\r\n case '2d':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2D().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2D().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2D()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n break;\r\n case '2d-array':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2DArray().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2DArray().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DArrayShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2DArray()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.srcLayer = pb.int().uniform(0);\r\n break;\r\n case 'cube':\r\n if (st === 'int') {\r\n this.srcTex = pb.itexCube().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utexCube().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.texCubeShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .texCube()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.texelSize = pb.float().uniform(0);\r\n this.cubeFace = pb.int().uniform(0);\r\n break;\r\n default:\r\n throw new Error(`invalid blit type: ${type}`);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n if (type === 'cube') {\r\n this.uv = pb.vec3();\r\n this.$if(pb.equal(this.cubeFace, 0), function () {\r\n this.uv = pb.vec3(1, this.$inputs.uv.y, pb.neg(this.$inputs.uv.x));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 1), function () {\r\n this.uv = pb.vec3(-1, this.$inputs.uv.y, this.$inputs.uv.x);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 2), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, 1, pb.neg(this.$inputs.uv.y));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 3), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, -1, this.$inputs.uv.y);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 4), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, this.$inputs.uv.y, 1);\r\n })\r\n .$else(function () {\r\n this.uv = pb.vec3(pb.neg(this.$inputs.uv.x), this.$inputs.uv.y, -1);\r\n });\r\n } else {\r\n this.uv = this.$inputs.uv;\r\n }\r\n if (flip) {\r\n this.uv.y = pb.sub(1, this.uv.y);\r\n }\r\n this.$l.outTexel = filter.filter(\r\n this,\r\n type,\r\n this.srcTex,\r\n this.uv,\r\n type === '2d' ? null : this.srcLayer,\r\n st\r\n );\r\n this.$outputs.outColor = filter.writeTexel(this, type, this.$inputs.uv, this.outTexel);\r\n if (filter.srgbOut) {\r\n this.$outputs.outColor = pb.vec4(\r\n linearToGamma(this, this.$outputs.outColor.rgb),\r\n this.$outputs.outColor.a\r\n );\r\n }\r\n });\r\n }\r\n });\r\n if (program) {\r\n program.name = `@Blit_${type}_${st}_${bilinearFiltering ? 'bilinear' : 'point'}_${flip ? 'flip' : 'noflip'}`;\r\n }\r\n return program\r\n ? {\r\n program,\r\n bindGroup: getDevice().createBindGroup(program.bindGroupLayouts[0])\r\n }\r\n : null;\r\n}\r\n"],"names":["Blitter","_hash","_renderStates","_srgbOut","_flip","_viewport","_scissor","_destRect","_offsetParams","Vector4","viewport","val","scissor","destRect","invalidateHash","srgbOut","renderStates","rs","hash","name","calcHash","readTexel","scope","type","srcTex","uv","srcLayer","sampleType","pb","$builder","getDevice","getDeviceCaps","shaderCaps","supportShaderTextureLod","textureSampleLevel","textureSample","textureArraySampleLevel","textureLoad","ivec2","mul","vec2","textureDimensions","Error","textureArrayLoad","writeTexel","texel","setup","_scope","_type","setUniforms","_bindGroup","_sourceTex","source","dest","sampler","device","flip","bilinearFiltering","magFilter","minFilter","mipFilter","isFilterable","programInfo","getBlitProgram","isIntegerFormat","isSignedFormat","bindGroup","setTexture","destWidth","getWidth","getBackBufferWidth","destHeight","getHeight","getBackBufferHeight","setXYZW","setValue","setFramebuffer","setViewport","setScissor","setProgram","program","setBindGroup","setRenderStates","getBlitRenderStateSet","getBlitPrimitive2D","draw","blit2DArray","layer","blitCubeMap","face","width","blit","pushDeviceStates","isTexture2D","blit2D","isTexture2DArray","isTextureCube","framebuffer","isFramebuffer","pool","createTemporalFramebuffer","destTexture","getColorAttachments","setColorAttachmentLayer","n","Math","min","depth","i","setColorAttachmentCubeFace","releaseFrameBuffer","popDeviceStates","blitProgramCache","blitPrimitive2D","blitRenderStates","Primitive","createAndSetVertexBuffer","Float32Array","indexCount","indexStart","primitiveType","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","filter","undefined","createBlitProgram","st","scaleBias","buildRenderProgram","vertex","$inputs","pos","attrib","$outputs","vec4","uniform","main","$builtins","position","xy","add","y","neg","$l","zw","fragment","itex2D","utex2D","tex2DShadow","tex2D","itex2DArray","utex2DArray","tex2DArrayShadow","tex2DArray","int","itexCube","utexCube","texCubeShadow","texCube","texelSize","float","cubeFace","outColor","vec3","$if","equal","x","$elseif","$else","sub","outTexel","linearToGamma","rgb","a","createBindGroup","bindGroupLayouts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blitter.js","sources":["../../src/blitter/blitter.ts"],"sourcesContent":["import type { CubeFace, Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n RenderStateSet,\r\n BaseTexture,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureSampler,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from '../render/primitive';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n// TODO: multi-pass support for filter\r\n\r\n/**\r\n * Blit type\r\n * @public\r\n */\r\nexport type BlitType = '2d' | '2d-array' | 'cube';\r\n\r\ntype BlitProgramInfo = { program: GPUProgram; bindGroup: BindGroup };\r\n\r\n/**\r\n * Base class for any kind of blitters\r\n * @public\r\n */\r\nexport abstract class Blitter {\r\n /** @internal */\r\n protected _hash: Nullable<string>;\r\n /** @internal */\r\n protected _renderStates: Nullable<RenderStateSet>;\r\n /** @internal */\r\n protected _srgbOut: boolean;\r\n /** @internal */\r\n protected _flip: boolean;\r\n /** @internal */\r\n protected _viewport: Nullable<number[]>;\r\n /** @internal */\r\n protected _scissor: Nullable<number[]>;\r\n /** @internal */\r\n protected _destRect: Nullable<number[]>;\r\n /** @internal */\r\n protected _offsetParams: Vector4;\r\n /**\r\n * Creates an instance of Blitter\r\n */\r\n constructor() {\r\n this._hash = null;\r\n this._renderStates = null;\r\n this._srgbOut = false;\r\n this._flip = false;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._destRect = null;\r\n this._offsetParams = new Vector4();\r\n }\r\n /** Viewport */\r\n get viewport() {\r\n return this._viewport;\r\n }\r\n set viewport(val) {\r\n this._viewport = val;\r\n }\r\n /** Scissor rect */\r\n get scissor() {\r\n return this._scissor;\r\n }\r\n set scissor(val) {\r\n this._scissor = val;\r\n }\r\n /** Destination rectangle */\r\n get destRect() {\r\n return this._destRect;\r\n }\r\n set destRect(val) {\r\n if (!!this._destRect !== !!val) {\r\n this.invalidateHash();\r\n }\r\n this._destRect = val;\r\n }\r\n /**\r\n * Whether output color value in gamma color space\r\n */\r\n get srgbOut() {\r\n return this._srgbOut;\r\n }\r\n set srgbOut(val) {\r\n if (this._srgbOut !== !!val) {\r\n this._srgbOut = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /**\r\n * Render states used to do the blitting\r\n */\r\n get renderStates() {\r\n return this._renderStates;\r\n }\r\n set renderStates(rs) {\r\n this._renderStates = rs;\r\n }\r\n /**\r\n * Program hash code\r\n */\r\n get hash() {\r\n if (!this._hash) {\r\n this._hash = `${this.constructor.name}:${this._srgbOut ? 1 : 0}:${this._flip ? 1 : 0}:${\r\n this._destRect ? 1 : 0\r\n }:${this.calcHash()}`;\r\n }\r\n return this._hash;\r\n }\r\n /**\r\n * Force the hash code to be regenerated\r\n */\r\n invalidateHash() {\r\n this._hash = null;\r\n }\r\n /**\r\n * Reads a texel from the source texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texture\r\n * @param uv - The texture coordinate from where the texel will be read\r\n * @param srcLayer - The layer of the source texture\r\n * @returns The read texel\r\n */\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint' | 'depth'\r\n ) {\r\n const pb = scope.$builder;\r\n if (sampleType === 'float' || sampleType === 'depth') {\r\n switch (type) {\r\n case '2d':\r\n case 'cube':\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? pb.textureSampleLevel(srcTex, uv, 0)\r\n : pb.textureSample(srcTex, uv);\r\n case '2d-array':\r\n return pb.textureArraySampleLevel(srcTex, uv, srcLayer, 0);\r\n default:\r\n throw new Error(`Invalid blit type: ${type}`);\r\n }\r\n } else {\r\n switch (type) {\r\n case '2d':\r\n return pb.textureLoad(srcTex, pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)), 0);\r\n case 'cube':\r\n throw new Error('Integer format cube texture not supported');\r\n case '2d-array':\r\n return pb.textureArrayLoad(\r\n srcTex,\r\n pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)),\r\n srcLayer,\r\n 0\r\n );\r\n default:\r\n throw new Error(`Invalid blit type: ${type}`);\r\n }\r\n }\r\n }\r\n /**\r\n * Writes a texel to destination texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param uv - The texture coordinate to where the texel will be written\r\n * @param texel - The texel to be written\r\n * @returns The written texel\r\n */\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, uv: PBShaderExp, texel: PBShaderExp) {\r\n return texel;\r\n }\r\n /**\r\n * Initialize uniforms of the blit program\r\n * @param _scope - The shader scope\r\n * @param _type - The blit type\r\n */\r\n setup(_scope: PBGlobalScope, _type: BlitType) {}\r\n /**\r\n * Update uniforms of the bind group\r\n * @param bindGroup - The bind group to be updated\r\n */\r\n setUniforms(_bindGroup: BindGroup, _sourceTex: BaseTexture) {}\r\n /**\r\n * Calculates the destination texel by the source texel\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texel\r\n * @param srcUV - The texture coordinate of the source texel\r\n * @param srcLayer - The layer of the source texture\r\n * @returns the destination texel\r\n */\r\n abstract filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampeType: 'float' | 'int' | 'uint' | 'depth'\r\n ): PBShaderExp;\r\n /**\r\n * Calculates the hash code\r\n * @returns the calculated hash code\r\n */\r\n protected abstract calcHash(): string;\r\n /** @internal */\r\n protected blit2D(source: Texture2D, dest: Nullable<FrameBuffer>, sampler?: Nullable<TextureSampler>): void {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n if (this._destRect) {\r\n const destWidth = this._viewport?.[2] ?? dest?.getWidth() ?? device.getBackBufferWidth();\r\n const destHeight = this._viewport?.[3] ?? dest?.getHeight() ?? device.getBackBufferHeight();\r\n this._offsetParams.setXYZW(\r\n this._destRect[2] / destWidth,\r\n this._destRect[3] / destHeight,\r\n (this._destRect[2] + 2 * this._destRect[0]) / destWidth - 1,\r\n (this._destRect[3] + 2 * this._destRect[1]) / destHeight - 1\r\n );\r\n programInfo.bindGroup.setValue('scaleBias', this._offsetParams);\r\n }\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blit2DArray(\r\n source: Texture2DArray,\r\n dest: Nullable<FrameBuffer>,\r\n layer: number,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d-array',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('srcLayer', layer);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blitCubeMap(\r\n source: TextureCube,\r\n dest: Nullable<FrameBuffer>,\r\n face: CubeFace,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n 'cube',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('texelSize', 1 / source.width);\r\n programInfo.bindGroup.setValue('cubeFace', face);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /**\r\n * Blits a 2D texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Nullable<FrameBuffer>, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2D texture to 2D texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2D, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2D texture to given layer of a 2D array texture\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param layer - The layer of the destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2DArray, layer: number, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2d array texture to another 2d array texture\r\n *\r\n * @remarks\r\n * All layers of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2DArray, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(\r\n source: Texture2DArray,\r\n dest: Nullable<FrameBuffer>,\r\n layer: number,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2D, layer: number, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a cube texture to another cube texture\r\n *\r\n * @remarks\r\n * All faces of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: TextureCube, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits given face of a cube texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(\r\n source: TextureCube,\r\n dest: Nullable<FrameBuffer>,\r\n face: number,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n /**\r\n * Blits given face of a cube texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: Texture2D, face: number, sampler?: Nullable<TextureSampler>): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | Nullable<FrameBuffer>,\r\n layer?: number | Nullable<TextureSampler>,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | Nullable<FrameBuffer>,\r\n layer?: number | Nullable<TextureSampler>,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n if (!dest) {\r\n if (source.isTexture2D()) {\r\n this.blit2D(source, null, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n this.blit2DArray(source, null, (layer as number) || 0, sampler);\r\n } else if (source.isTextureCube()) {\r\n this.blitCubeMap(source, null, (layer as number) || 0, sampler);\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n } else {\r\n const framebuffer = dest.isFramebuffer()\r\n ? dest\r\n : device.pool.createTemporalFramebuffer(false, [dest], null);\r\n const destTexture = dest.isFramebuffer() ? dest.getColorAttachments()?.[0] : dest;\r\n if (source.isTexture2D()) {\r\n if (!destTexture?.isTexture2D() && !destTexture?.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2DArray()) {\r\n framebuffer.setColorAttachmentLayer(0, (layer as number) || 0);\r\n }\r\n this.blit2D(source, framebuffer, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n if (!destTexture?.isTexture2D() && !destTexture.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2D()) {\r\n this.blit2DArray(source, framebuffer, (layer as number) || 0, sampler);\r\n } else {\r\n const n = Math.min(source.depth, destTexture.depth);\r\n for (let i = 0; i < n; i++) {\r\n framebuffer.setColorAttachmentLayer(0, i);\r\n this.blit2DArray(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n }\r\n } else if (source.isTextureCube()) {\r\n if (!destTexture.isTextureCube() && !destTexture.isTexture2D()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTextureCube()) {\r\n for (let i = 0; i < 6; i++) {\r\n framebuffer.setColorAttachmentCubeFace(0, i);\r\n this.blitCubeMap(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n } else {\r\n this.blitCubeMap(source, framebuffer, (layer as number) || 0, sampler);\r\n }\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n if (framebuffer && framebuffer !== dest) {\r\n device.pool.releaseFrameBuffer(framebuffer);\r\n }\r\n }\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\nconst blitProgramCache: {\r\n [hash: string]: BlitProgramInfo;\r\n} = {};\r\n\r\nlet blitPrimitive2D: Nullable<Primitive> = null;\r\nlet blitRenderStates: Nullable<RenderStateSet> = null;\r\n\r\nfunction getBlitPrimitive2D() {\r\n if (!blitPrimitive2D) {\r\n blitPrimitive2D = new Primitive();\r\n blitPrimitive2D.createAndSetVertexBuffer(\r\n 'position_f32x2',\r\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])\r\n );\r\n blitPrimitive2D.indexCount = 4;\r\n blitPrimitive2D.indexStart = 0;\r\n blitPrimitive2D.primitiveType = 'triangle-strip';\r\n }\r\n return blitPrimitive2D;\r\n}\r\n\r\nfunction getBlitRenderStateSet() {\r\n if (!blitRenderStates) {\r\n blitRenderStates = getDevice().createRenderStateSet();\r\n blitRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n blitRenderStates.useRasterizerState().setCullMode('none');\r\n }\r\n return blitRenderStates;\r\n}\r\n\r\nfunction getBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n sampleType: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean\r\n) {\r\n const hash = `${type}:${filter.hash}:${bilinearFiltering}:${sampleType}:${flip ? 1 : 0}`;\r\n let programInfo = blitProgramCache[hash];\r\n if (programInfo === undefined) {\r\n programInfo =\r\n createBlitProgram(type, filter, bilinearFiltering, sampleType, flip, !!filter.destRect) || null;\r\n blitProgramCache[hash] = programInfo;\r\n }\r\n return programInfo;\r\n}\r\n\r\nfunction createBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n st: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean,\r\n scaleBias: boolean\r\n) {\r\n const program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (scaleBias) {\r\n this.scaleBias = pb.vec4().uniform(0);\r\n }\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv =\r\n type === 'cube'\r\n ? pb.mul(pb.vec2(1, -1), this.$inputs.pos.xy)\r\n : pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (getDevice().type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n if (scaleBias) {\r\n this.$l.xy = pb.add(pb.mul(this.$builtins.position.xy, this.scaleBias.xy), this.scaleBias.zw);\r\n this.$builtins.position = pb.vec4(this.xy, 1, 1);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n switch (type) {\r\n case '2d':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2D().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2D().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2D()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n break;\r\n case '2d-array':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2DArray().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2DArray().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DArrayShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2DArray()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.srcLayer = pb.int().uniform(0);\r\n break;\r\n case 'cube':\r\n if (st === 'int') {\r\n this.srcTex = pb.itexCube().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utexCube().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.texCubeShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .texCube()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.texelSize = pb.float().uniform(0);\r\n this.cubeFace = pb.int().uniform(0);\r\n break;\r\n default:\r\n throw new Error(`invalid blit type: ${type}`);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n if (type === 'cube') {\r\n this.uv = pb.vec3();\r\n this.$if(pb.equal(this.cubeFace, 0), function () {\r\n this.uv = pb.vec3(1, this.$inputs.uv.y, pb.neg(this.$inputs.uv.x));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 1), function () {\r\n this.uv = pb.vec3(-1, this.$inputs.uv.y, this.$inputs.uv.x);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 2), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, 1, pb.neg(this.$inputs.uv.y));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 3), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, -1, this.$inputs.uv.y);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 4), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, this.$inputs.uv.y, 1);\r\n })\r\n .$else(function () {\r\n this.uv = pb.vec3(pb.neg(this.$inputs.uv.x), this.$inputs.uv.y, -1);\r\n });\r\n } else {\r\n this.uv = this.$inputs.uv;\r\n }\r\n if (flip) {\r\n this.uv.y = pb.sub(1, this.uv.y);\r\n }\r\n this.$l.outTexel = filter.filter(\r\n this,\r\n type,\r\n this.srcTex,\r\n this.uv,\r\n type === '2d' ? null : this.srcLayer,\r\n st\r\n );\r\n this.$outputs.outColor = filter.writeTexel(this, type, this.$inputs.uv, this.outTexel);\r\n if (filter.srgbOut) {\r\n this.$outputs.outColor = pb.vec4(\r\n linearToGamma(this, this.$outputs.outColor.rgb),\r\n this.$outputs.outColor.a\r\n );\r\n }\r\n });\r\n }\r\n })!;\r\n program.name = `@Blit_${type}_${st}_${bilinearFiltering ? 'bilinear' : 'point'}_${flip ? 'flip' : 'noflip'}`;\r\n return {\r\n program,\r\n bindGroup: getDevice().createBindGroup(program.bindGroupLayouts[0])\r\n };\r\n}\r\n"],"names":["Blitter","_hash","_renderStates","_srgbOut","_flip","_viewport","_scissor","_destRect","_offsetParams","Vector4","viewport","val","scissor","destRect","invalidateHash","srgbOut","renderStates","rs","hash","name","calcHash","readTexel","scope","type","srcTex","uv","srcLayer","sampleType","pb","$builder","getDevice","getDeviceCaps","shaderCaps","supportShaderTextureLod","textureSampleLevel","textureSample","textureArraySampleLevel","Error","textureLoad","ivec2","mul","vec2","textureDimensions","textureArrayLoad","writeTexel","texel","setup","_scope","_type","setUniforms","_bindGroup","_sourceTex","source","dest","sampler","device","flip","bilinearFiltering","magFilter","minFilter","mipFilter","isFilterable","programInfo","getBlitProgram","isIntegerFormat","isSignedFormat","bindGroup","setTexture","destWidth","getWidth","getBackBufferWidth","destHeight","getHeight","getBackBufferHeight","setXYZW","setValue","setFramebuffer","setViewport","setScissor","setProgram","program","setBindGroup","setRenderStates","getBlitRenderStateSet","getBlitPrimitive2D","draw","blit2DArray","layer","blitCubeMap","face","width","blit","pushDeviceStates","isTexture2D","blit2D","isTexture2DArray","isTextureCube","framebuffer","isFramebuffer","pool","createTemporalFramebuffer","destTexture","getColorAttachments","setColorAttachmentLayer","n","Math","min","depth","i","setColorAttachmentCubeFace","releaseFrameBuffer","popDeviceStates","blitProgramCache","blitPrimitive2D","blitRenderStates","Primitive","createAndSetVertexBuffer","Float32Array","indexCount","indexStart","primitiveType","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","filter","undefined","createBlitProgram","st","scaleBias","buildRenderProgram","vertex","$inputs","pos","attrib","$outputs","vec4","uniform","main","$builtins","position","xy","add","y","neg","$l","zw","fragment","itex2D","utex2D","tex2DShadow","tex2D","itex2DArray","utex2DArray","tex2DArrayShadow","tex2DArray","int","itexCube","utexCube","texCubeShadow","texCube","texelSize","float","cubeFace","outColor","vec3","$if","equal","x","$elseif","$else","sub","outTexel","linearToGamma","rgb","a","createBindGroup","bindGroupLayouts"],"mappings":";;;;;AA8BA;;;AAGC,IACM,MAAeA,OAAAA,CAAAA;qBAEpB,KAAkC;qBAElC,aAAkD;qBAElD,QAA4B;qBAE5B,KAAyB;qBAEzB,SAAwC;qBAExC,QAAuC;qBAEvC,SAAwC;qBAExC,aAAiC;AACjC;;AAEC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,KAAK,GAAG,IAAA;QACb,IAAI,CAACC,aAAa,GAAG,IAAA;QACrB,IAAI,CAACC,QAAQ,GAAG,KAAA;QAChB,IAAI,CAACC,KAAK,GAAG,KAAA;QACb,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,aAAa,GAAG,IAAIC,OAAAA,EAAAA;AAC3B;oBAEA,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAACL,SAAS;AACvB;IACA,IAAIK,QAAAA,CAASC,GAAG,EAAE;QAChB,IAAI,CAACN,SAAS,GAAGM,GAAAA;AACnB;wBAEA,IAAIC,OAAU,GAAA;QACZ,OAAO,IAAI,CAACN,QAAQ;AACtB;IACA,IAAIM,OAAAA,CAAQD,GAAG,EAAE;QACf,IAAI,CAACL,QAAQ,GAAGK,GAAAA;AAClB;iCAEA,IAAIE,QAAW,GAAA;QACb,OAAO,IAAI,CAACN,SAAS;AACvB;IACA,IAAIM,QAAAA,CAASF,GAAG,EAAE;QAChB,IAAI,CAAC,CAAC,IAAI,CAACJ,SAAS,KAAK,CAAC,CAACI,GAAK,EAAA;AAC9B,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;QACA,IAAI,CAACP,SAAS,GAAGI,GAAAA;AACnB;AACA;;AAEC,MACD,IAAII,OAAU,GAAA;QACZ,OAAO,IAAI,CAACZ,QAAQ;AACtB;IACA,IAAIY,OAAAA,CAAQJ,GAAG,EAAE;AACf,QAAA,IAAI,IAAI,CAACR,QAAQ,KAAK,CAAC,CAACQ,GAAK,EAAA;AAC3B,YAAA,IAAI,CAACR,QAAQ,GAAG,CAAC,CAACQ,GAAAA;AAClB,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;AACF;AACA;;AAEC,MACD,IAAIE,YAAe,GAAA;QACjB,OAAO,IAAI,CAACd,aAAa;AAC3B;IACA,IAAIc,YAAAA,CAAaC,EAAE,EAAE;QACnB,IAAI,CAACf,aAAa,GAAGe,EAAAA;AACvB;AACA;;AAEC,MACD,IAAIC,IAAO,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAACjB,KAAK,EAAE;AACf,YAAA,IAAI,CAACA,KAAK,GAAG,CAAG,EAAA,IAAI,CAAC,WAAW,CAACkB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAChB,QAAQ,GAAG,IAAI,CAAE,CAAA,CAAC,EAAE,IAAI,CAACC,KAAK,GAAG,IAAI,CAAE,CAAA,CAAC,EACpF,IAAI,CAACG,SAAS,GAAG,IAAI,CACtB,CAAA,CAAC,EAAE,IAAI,CAACa,QAAQ,EAAI,CAAA,CAAA;AACvB;QACA,OAAO,IAAI,CAACnB,KAAK;AACnB;AACA;;AAEC,MACDa,cAAiB,GAAA;QACf,IAAI,CAACb,KAAK,GAAG,IAAA;AACf;AACA;;;;;;;;AAQC,MACDoB,SACEC,CAAAA,KAA4B,EAC5BC,IAAc,EACdC,MAAmB,EACnBC,EAAe,EACfC,QAAqB,EACrBC,UAA8C,EAC9C;QACA,MAAMC,EAAAA,GAAKN,MAAMO,QAAQ;QACzB,IAAIF,UAAAA,KAAe,OAAWA,IAAAA,UAAAA,KAAe,OAAS,EAAA;YACpD,OAAQJ,IAAAA;gBACN,KAAK,IAAA;gBACL,KAAK,MAAA;AACH,oBAAA,OAAOO,YAAYC,aAAa,EAAA,CAAGC,UAAU,CAACC,uBAAuB,GACjEL,EAAAA,CAAGM,kBAAkB,CAACV,QAAQC,EAAI,EAAA,CAAA,CAAA,GAClCG,EAAGO,CAAAA,aAAa,CAACX,MAAQC,EAAAA,EAAAA,CAAAA;gBAC/B,KAAK,UAAA;AACH,oBAAA,OAAOG,EAAGQ,CAAAA,uBAAuB,CAACZ,MAAAA,EAAQC,IAAIC,QAAU,EAAA,CAAA,CAAA;AAC1D,gBAAA;AACE,oBAAA,MAAM,IAAIW,KAAAA,CAAM,CAAC,mBAAmB,EAAEd,IAAM,CAAA,CAAA,CAAA;AAChD;SACK,MAAA;YACL,OAAQA,IAAAA;gBACN,KAAK,IAAA;AACH,oBAAA,OAAOK,GAAGU,WAAW,CAACd,QAAQI,EAAGW,CAAAA,KAAK,CAACX,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGa,IAAI,CAACb,EAAAA,CAAGc,iBAAiB,CAAClB,MAAAA,EAAQ,KAAKC,EAAM,CAAA,CAAA,EAAA,CAAA,CAAA;gBAChG,KAAK,MAAA;AACH,oBAAA,MAAM,IAAIY,KAAM,CAAA,2CAAA,CAAA;gBAClB,KAAK,UAAA;AACH,oBAAA,OAAOT,GAAGe,gBAAgB,CACxBnB,QACAI,EAAGW,CAAAA,KAAK,CAACX,EAAGY,CAAAA,GAAG,CAACZ,EAAGa,CAAAA,IAAI,CAACb,EAAGc,CAAAA,iBAAiB,CAAClB,MAAQ,EAAA,CAAA,CAAA,CAAA,EAAKC,MAC1DC,QACA,EAAA,CAAA,CAAA;AAEJ,gBAAA;AACE,oBAAA,MAAM,IAAIW,KAAAA,CAAM,CAAC,mBAAmB,EAAEd,IAAM,CAAA,CAAA,CAAA;AAChD;AACF;AACF;AACA;;;;;;;MAQAqB,UAAAA,CAAWtB,KAA4B,EAAEC,IAAc,EAAEE,EAAe,EAAEoB,KAAkB,EAAE;QAC5F,OAAOA,KAAAA;AACT;AACA;;;;AAIC,MACDC,KAAMC,CAAAA,MAAqB,EAAEC,KAAe,EAAE;AAC9C;;;AAGC,MACDC,WAAYC,CAAAA,UAAqB,EAAEC,UAAuB,EAAE;qBAwB5D,MAAiBC,CAAAA,MAAiB,EAAEC,IAA2B,EAAEC,OAAkC,EAAQ;AACzG,QAAA,MAAMC,MAASzB,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAM0B,IAAO,GAAA,CAACH,IAAQE,IAAAA,MAAAA,CAAOhC,IAAI,KAAK,QAAA;AACtC,QAAA,MAAMkC,iBAAoBH,GAAAA,OAAAA,GACtBA,OAAQI,CAAAA,SAAS,KAAK,QAAYJ,IAAAA,OAAAA,CAAQK,SAAS,KAAK,YAAYL,OAAQM,CAAAA,SAAS,KAAK,QAAA,GAC1FR,OAAOS,YAAY,EAAA;AACvB,QAAA,MAAMC,WAAcC,GAAAA,cAAAA,CAClB,IACA,EAAA,IAAI,EACJN,iBACAL,EAAAA,MAAAA,CAAOY,eAAe,EAAA,GAAMZ,MAAOa,CAAAA,cAAc,EAAK,GAAA,KAAA,GAAQ,SAAU,OACxET,EAAAA,IAAAA,CAAAA;AAEFM,QAAAA,WAAAA,CAAYI,SAAS,CAACC,UAAU,CAAC,UAAUf,MAAQE,EAAAA,OAAAA,CAAAA;QACnD,IAAI,IAAI,CAAC/C,SAAS,EAAE;YAClB,MAAM6D,SAAAA,GAAY,IAAI,CAAC/D,SAAS,GAAG,CAAA,CAAE,IAAIgD,IAAAA,EAAMgB,QAAcd,EAAAA,IAAAA,MAAAA,CAAOe,kBAAkB,EAAA;YACtF,MAAMC,UAAAA,GAAa,IAAI,CAAClE,SAAS,GAAG,CAAA,CAAE,IAAIgD,IAAAA,EAAMmB,SAAejB,EAAAA,IAAAA,MAAAA,CAAOkB,mBAAmB,EAAA;YACzF,IAAI,CAACjE,aAAa,CAACkE,OAAO,CACxB,IAAI,CAACnE,SAAS,CAAC,CAAA,CAAE,GAAG6D,SAAAA,EACpB,IAAI,CAAC7D,SAAS,CAAC,CAAA,CAAE,GAAGgE,UAAAA,EACpB,CAAC,IAAI,CAAChE,SAAS,CAAC,CAAA,CAAE,GAAG,CAAI,GAAA,IAAI,CAACA,SAAS,CAAC,CAAA,CAAE,IAAI6D,SAAAA,GAAY,CAC1D,EAAC,CAAA,IAAI,CAAC7D,SAAS,CAAC,CAAE,CAAA,GAAG,CAAI,GAAA,IAAI,CAACA,SAAS,CAAC,CAAA,CAAE,IAAIgE,UAAa,GAAA,CAAA,CAAA;AAE7DT,YAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,WAAa,EAAA,IAAI,CAACnE,aAAa,CAAA;AAChE;AACA,QAAA,IAAI,CAACyC,WAAW,CAACa,WAAAA,CAAYI,SAAS,EAAEd,MAAAA,CAAAA;QACxCG,MAAOqB,CAAAA,cAAc,CAACvB,IAAQ,IAAA,IAAA,CAAA;AAC9BE,QAAAA,MAAAA,CAAOsB,WAAW,CAAC,IAAI,CAACxE,SAAS,CAAA;AACjCkD,QAAAA,MAAAA,CAAOuB,UAAU,CAAC,IAAI,CAACxE,QAAQ,CAAA;QAC/BiD,MAAOwB,CAAAA,UAAU,CAACjB,WAAAA,CAAYkB,OAAO,CAAA;AACrCzB,QAAAA,MAAAA,CAAO0B,YAAY,CAAC,CAAGnB,EAAAA,WAAAA,CAAYI,SAAS,CAAA;AAC5CX,QAAAA,MAAAA,CAAO2B,eAAe,CAAC,IAAI,CAAChF,aAAa,IAAIiF,qBAAAA,EAAAA,CAAAA;AAC7CC,QAAAA,kBAAAA,EAAAA,CAAqBC,IAAI,EAAA;AAC3B;qBAEA,WAAUC,CACRlC,MAAsB,EACtBC,IAA2B,EAC3BkC,KAAa,EACbjC,OAAkC,EAClC;AACA,QAAA,MAAMC,MAASzB,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAM0B,IAAO,GAAA,CAACH,IAAQE,IAAAA,MAAAA,CAAOhC,IAAI,KAAK,QAAA;AACtC,QAAA,MAAMkC,iBAAoBH,GAAAA,OAAAA,GACtBA,OAAQI,CAAAA,SAAS,KAAK,QAAYJ,IAAAA,OAAAA,CAAQK,SAAS,KAAK,YAAYL,OAAQM,CAAAA,SAAS,KAAK,QAAA,GAC1FR,OAAOS,YAAY,EAAA;AACvB,QAAA,MAAMC,WAAcC,GAAAA,cAAAA,CAClB,UACA,EAAA,IAAI,EACJN,iBACAL,EAAAA,MAAAA,CAAOY,eAAe,EAAA,GAAMZ,MAAOa,CAAAA,cAAc,EAAK,GAAA,KAAA,GAAQ,SAAU,OACxET,EAAAA,IAAAA,CAAAA;AAEFM,QAAAA,WAAAA,CAAYI,SAAS,CAACC,UAAU,CAAC,UAAUf,MAAQE,EAAAA,OAAAA,CAAAA;AACnDQ,QAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,UAAYY,EAAAA,KAAAA,CAAAA;AAC3C,QAAA,IAAI,CAACtC,WAAW,CAACa,WAAAA,CAAYI,SAAS,EAAEd,MAAAA,CAAAA;QACxCG,MAAOqB,CAAAA,cAAc,CAACvB,IAAQ,IAAA,IAAA,CAAA;AAC9BE,QAAAA,MAAAA,CAAOsB,WAAW,CAAC,IAAI,CAACxE,SAAS,CAAA;AACjCkD,QAAAA,MAAAA,CAAOuB,UAAU,CAAC,IAAI,CAACxE,QAAQ,CAAA;QAC/BiD,MAAOwB,CAAAA,UAAU,CAACjB,WAAAA,CAAYkB,OAAO,CAAA;AACrCzB,QAAAA,MAAAA,CAAO0B,YAAY,CAAC,CAAGnB,EAAAA,WAAAA,CAAYI,SAAS,CAAA;AAC5CX,QAAAA,MAAAA,CAAO2B,eAAe,CAAC,IAAI,CAAChF,aAAa,IAAIiF,qBAAAA,EAAAA,CAAAA;AAC7CC,QAAAA,kBAAAA,EAAAA,CAAqBC,IAAI,EAAA;AAC3B;qBAEA,WAAUG,CACRpC,MAAmB,EACnBC,IAA2B,EAC3BoC,IAAc,EACdnC,OAAkC,EAClC;AACA,QAAA,MAAMC,MAASzB,GAAAA,SAAAA,EAAAA;AACf,QAAA,MAAM0B,IAAO,GAAA,CAACH,IAAQE,IAAAA,MAAAA,CAAOhC,IAAI,KAAK,QAAA;AACtC,QAAA,MAAMkC,iBAAoBH,GAAAA,OAAAA,GACtBA,OAAQI,CAAAA,SAAS,KAAK,QAAYJ,IAAAA,OAAAA,CAAQK,SAAS,KAAK,YAAYL,OAAQM,CAAAA,SAAS,KAAK,QAAA,GAC1FR,OAAOS,YAAY,EAAA;AACvB,QAAA,MAAMC,WAAcC,GAAAA,cAAAA,CAClB,MACA,EAAA,IAAI,EACJN,iBACAL,EAAAA,MAAAA,CAAOY,eAAe,EAAA,GAAMZ,MAAOa,CAAAA,cAAc,EAAK,GAAA,KAAA,GAAQ,SAAU,OACxET,EAAAA,IAAAA,CAAAA;AAEFM,QAAAA,WAAAA,CAAYI,SAAS,CAACC,UAAU,CAAC,UAAUf,MAAQE,EAAAA,OAAAA,CAAAA;AACnDQ,QAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,WAAa,EAAA,CAAA,GAAIvB,OAAOsC,KAAK,CAAA;AAC5D5B,QAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,UAAYc,EAAAA,IAAAA,CAAAA;AAC3C,QAAA,IAAI,CAACxC,WAAW,CAACa,WAAAA,CAAYI,SAAS,EAAEd,MAAAA,CAAAA;QACxCG,MAAOqB,CAAAA,cAAc,CAACvB,IAAQ,IAAA,IAAA,CAAA;AAC9BE,QAAAA,MAAAA,CAAOsB,WAAW,CAAC,IAAI,CAACxE,SAAS,CAAA;AACjCkD,QAAAA,MAAAA,CAAOuB,UAAU,CAAC,IAAI,CAACxE,QAAQ,CAAA;QAC/BiD,MAAOwB,CAAAA,UAAU,CAACjB,WAAAA,CAAYkB,OAAO,CAAA;AACrCzB,QAAAA,MAAAA,CAAO0B,YAAY,CAAC,CAAGnB,EAAAA,WAAAA,CAAYI,SAAS,CAAA;AAC5CX,QAAAA,MAAAA,CAAO2B,eAAe,CAAC,IAAI,CAAChF,aAAa,IAAIiF,qBAAAA,EAAAA,CAAAA;AAC7CC,QAAAA,kBAAAA,EAAAA,CAAqBC,IAAI,EAAA;AAC3B;AA6FAM,IAAAA,IAAAA,CACEvC,MAAmB,EACnBC,IAAyC,EACzCkC,KAAyC,EACzCjC,OAAkC,EAClC;AACA,QAAA,MAAMC,MAASzB,GAAAA,SAAAA,EAAAA;AACfyB,QAAAA,MAAAA,CAAOqC,gBAAgB,EAAA;AACvB,QAAA,IAAI,CAACvC,IAAM,EAAA;YACT,IAAID,MAAAA,CAAOyC,WAAW,EAAI,EAAA;AACxB,gBAAA,IAAI,CAACC,MAAM,CAAC1C,MAAAA,EAAQ,IAAME,EAAAA,OAAAA,CAAAA;aACrB,MAAA,IAAIF,MAAO2C,CAAAA,gBAAgB,EAAI,EAAA;AACpC,gBAAA,IAAI,CAACT,WAAW,CAAClC,QAAQ,IAAM,EAACmC,SAAoB,CAAGjC,EAAAA,OAAAA,CAAAA;aAClD,MAAA,IAAIF,MAAO4C,CAAAA,aAAa,EAAI,EAAA;AACjC,gBAAA,IAAI,CAACR,WAAW,CAACpC,QAAQ,IAAM,EAACmC,SAAoB,CAAGjC,EAAAA,OAAAA,CAAAA;aAClD,MAAA;AACL,gBAAA,MAAM,IAAIjB,KAAM,CAAA,6CAAA,CAAA;AAClB;SACK,MAAA;YACL,MAAM4D,WAAAA,GAAc5C,IAAK6C,CAAAA,aAAa,EAClC7C,GAAAA,IAAAA,GACAE,OAAO4C,IAAI,CAACC,yBAAyB,CAAC,KAAO,EAAA;AAAC/C,gBAAAA;aAAK,EAAE,IAAA,CAAA;YACzD,MAAMgD,WAAAA,GAAchD,KAAK6C,aAAa,EAAA,GAAK7C,KAAKiD,mBAAmB,EAAA,GAAK,CAAA,CAAE,GAAGjD,IAAAA;YAC7E,IAAID,MAAAA,CAAOyC,WAAW,EAAI,EAAA;AACxB,gBAAA,IAAI,CAACQ,WAAAA,EAAaR,WAAiB,EAAA,IAAA,CAACQ,aAAaN,gBAAoB,EAAA,EAAA;AACnE,oBAAA,MAAM,IAAI1D,KAAM,CAAA,yDAAA,CAAA;AAClB;gBACA,IAAIgE,WAAAA,CAAYN,gBAAgB,EAAI,EAAA;AAClCE,oBAAAA,WAAAA,CAAYM,uBAAuB,CAAC,CAAG,EAAChB,KAAoB,IAAA,CAAA,CAAA;AAC9D;AACA,gBAAA,IAAI,CAACO,MAAM,CAAC1C,MAAAA,EAAQ6C,WAAa3C,EAAAA,OAAAA,CAAAA;aAC5B,MAAA,IAAIF,MAAO2C,CAAAA,gBAAgB,EAAI,EAAA;AACpC,gBAAA,IAAI,CAACM,WAAaR,EAAAA,WAAAA,EAAAA,IAAiB,CAACQ,WAAAA,CAAYN,gBAAgB,EAAI,EAAA;AAClE,oBAAA,MAAM,IAAI1D,KAAM,CAAA,yDAAA,CAAA;AAClB;gBACA,IAAIgE,WAAAA,CAAYR,WAAW,EAAI,EAAA;AAC7B,oBAAA,IAAI,CAACP,WAAW,CAAClC,QAAQ6C,WAAa,EAACV,SAAoB,CAAGjC,EAAAA,OAAAA,CAAAA;iBACzD,MAAA;oBACL,MAAMkD,CAAAA,GAAIC,KAAKC,GAAG,CAACtD,OAAOuD,KAAK,EAAEN,YAAYM,KAAK,CAAA;AAClD,oBAAA,IAAK,IAAIC,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAIJ,GAAGI,CAAK,EAAA,CAAA;wBAC1BX,WAAYM,CAAAA,uBAAuB,CAAC,CAAGK,EAAAA,CAAAA,CAAAA;AACvC,wBAAA,IAAI,CAACtB,WAAW,CAAClC,MAAAA,EAAQ6C,aAAaW,CAAGrB,EAAAA,KAAAA,CAAAA;AAC3C;AACF;aACK,MAAA,IAAInC,MAAO4C,CAAAA,aAAa,EAAI,EAAA;AACjC,gBAAA,IAAI,CAACK,WAAYL,CAAAA,aAAa,MAAM,CAACK,WAAAA,CAAYR,WAAW,EAAI,EAAA;AAC9D,oBAAA,MAAM,IAAIxD,KAAM,CAAA,yDAAA,CAAA;AAClB;gBACA,IAAIgE,WAAAA,CAAYL,aAAa,EAAI,EAAA;AAC/B,oBAAA,IAAK,IAAIY,CAAAA,GAAI,CAAGA,EAAAA,CAAAA,GAAI,GAAGA,CAAK,EAAA,CAAA;wBAC1BX,WAAYY,CAAAA,0BAA0B,CAAC,CAAGD,EAAAA,CAAAA,CAAAA;AAC1C,wBAAA,IAAI,CAACpB,WAAW,CAACpC,MAAAA,EAAQ6C,aAAaW,CAAGrB,EAAAA,KAAAA,CAAAA;AAC3C;iBACK,MAAA;AACL,oBAAA,IAAI,CAACC,WAAW,CAACpC,QAAQ6C,WAAa,EAACV,SAAoB,CAAGjC,EAAAA,OAAAA,CAAAA;AAChE;aACK,MAAA;AACL,gBAAA,MAAM,IAAIjB,KAAM,CAAA,6CAAA,CAAA;AAClB;YACA,IAAI4D,WAAAA,IAAeA,gBAAgB5C,IAAM,EAAA;gBACvCE,MAAO4C,CAAAA,IAAI,CAACW,kBAAkB,CAACb,WAAAA,CAAAA;AACjC;AACF;AACA1C,QAAAA,MAAAA,CAAOwD,eAAe,EAAA;AACxB;AACF;AAEA,MAAMC,mBAEF,EAAC;AAEL,IAAIC,eAAuC,GAAA,IAAA;AAC3C,IAAIC,gBAA6C,GAAA,IAAA;AAEjD,SAAS9B,kBAAAA,GAAAA;AACP,IAAA,IAAI,CAAC6B,eAAiB,EAAA;AACpBA,QAAAA,eAAAA,GAAkB,IAAIE,SAAAA,EAAAA;AACtBF,QAAAA,eAAAA,CAAgBG,wBAAwB,CACtC,gBACA,EAAA,IAAIC,YAAa,CAAA;YAAC,EAAC;YAAG,EAAC;AAAG,YAAA,CAAA;YAAG,EAAC;YAAG,EAAC;AAAG,YAAA,CAAA;AAAG,YAAA,CAAA;AAAG,YAAA;AAAE,SAAA,CAAA,CAAA;AAE/CJ,QAAAA,eAAAA,CAAgBK,UAAU,GAAG,CAAA;AAC7BL,QAAAA,eAAAA,CAAgBM,UAAU,GAAG,CAAA;AAC7BN,QAAAA,eAAAA,CAAgBO,aAAa,GAAG,gBAAA;AAClC;IACA,OAAOP,eAAAA;AACT;AAEA,SAAS9B,qBAAAA,GAAAA;AACP,IAAA,IAAI,CAAC+B,gBAAkB,EAAA;AACrBA,QAAAA,gBAAAA,GAAmBpF,YAAY2F,oBAAoB,EAAA;AACnDP,QAAAA,gBAAAA,CAAiBQ,aAAa,EAAGC,CAAAA,UAAU,CAAC,KAAA,CAAA,CAAOC,WAAW,CAAC,KAAA,CAAA;QAC/DV,gBAAiBW,CAAAA,kBAAkB,EAAGC,CAAAA,WAAW,CAAC,MAAA,CAAA;AACpD;IACA,OAAOZ,gBAAAA;AACT;AAEA,SAASnD,cAAAA,CACPxC,IAAc,EACdwG,MAAe,EACftE,iBAA0B,EAC1B9B,UAA8C,EAC9C6B,IAAa,EAAA;AAEb,IAAA,MAAMtC,OAAO,CAAGK,EAAAA,IAAAA,CAAK,CAAC,EAAEwG,MAAAA,CAAO7G,IAAI,CAAC,CAAC,EAAEuC,iBAAAA,CAAkB,CAAC,EAAE9B,UAAAA,CAAW,CAAC,EAAE6B,IAAAA,GAAO,IAAI,CAAG,CAAA,CAAA;IACxF,IAAIM,WAAAA,GAAckD,gBAAgB,CAAC9F,IAAK,CAAA;AACxC,IAAA,IAAI4C,gBAAgBkE,SAAW,EAAA;QAC7BlE,WACEmE,GAAAA,iBAAAA,CAAkB1G,IAAMwG,EAAAA,MAAAA,EAAQtE,iBAAmB9B,EAAAA,UAAAA,EAAY6B,MAAM,CAAC,CAACuE,MAAOlH,CAAAA,QAAQ,CAAK;QAC7FmG,gBAAgB,CAAC9F,KAAK,GAAG4C,WAAAA;AAC3B;IACA,OAAOA,WAAAA;AACT;AAEA,SAASmE,iBAAAA,CACP1G,IAAc,EACdwG,MAAe,EACftE,iBAA0B,EAC1ByE,EAAsC,EACtC1E,IAAa,EACb2E,SAAkB,EAAA;IAElB,MAAMnD,OAAAA,GAAUlD,SAAYsG,EAAAA,CAAAA,kBAAkB,CAAC;AAC7CC,QAAAA,MAAAA,CAAAA,CAAOzG,EAAE,EAAA;YACP,IAAI,CAAC0G,OAAO,CAACC,GAAG,GAAG3G,EAAGa,CAAAA,IAAI,EAAG+F,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAAChH,EAAE,GAAGG,GAAGa,IAAI,EAAA;AAC1B,YAAA,IAAI0F,SAAW,EAAA;AACb,gBAAA,IAAI,CAACA,SAAS,GAAGvG,GAAG8G,IAAI,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACrC;YACAZ,MAAOjF,CAAAA,KAAK,CAAC,IAAI,EAAEvB,IAAAA,CAAAA;AACnBK,YAAAA,EAAAA,CAAGgH,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGlH,EAAG8G,CAAAA,IAAI,CAAC,IAAI,CAACJ,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;AACvD,gBAAA,IAAI,CAACE,QAAQ,CAAChH,EAAE,GACdF,IAAAA,KAAS,SACLK,EAAGY,CAAAA,GAAG,CAACZ,EAAAA,CAAGa,IAAI,CAAC,CAAA,EAAG,EAAK,CAAA,EAAA,IAAI,CAAC6F,OAAO,CAACC,GAAG,CAACQ,EAAE,CAC1CnH,GAAAA,EAAAA,CAAGoH,GAAG,CAACpH,EAAAA,CAAGY,GAAG,CAAC,IAAI,CAAC8F,OAAO,CAACC,GAAG,CAACQ,EAAE,EAAE,GAAMnH,CAAAA,EAAAA,EAAAA,CAAGa,IAAI,CAAC,GAAA,CAAA,CAAA;gBACvD,IAAIX,SAAAA,EAAAA,CAAYP,IAAI,KAAK,QAAU,EAAA;AACjC,oBAAA,IAAI,CAACsH,SAAS,CAACC,QAAQ,CAACG,CAAC,GAAGrH,EAAAA,CAAGsH,GAAG,CAAC,IAAI,CAACL,SAAS,CAACC,QAAQ,CAACG,CAAC,CAAA;AAC9D;AACA,gBAAA,IAAId,SAAW,EAAA;AACb,oBAAA,IAAI,CAACgB,EAAE,CAACJ,EAAE,GAAGnH,EAAAA,CAAGoH,GAAG,CAACpH,EAAGY,CAAAA,GAAG,CAAC,IAAI,CAACqG,SAAS,CAACC,QAAQ,CAACC,EAAE,EAAE,IAAI,CAACZ,SAAS,CAACY,EAAE,CAAG,EAAA,IAAI,CAACZ,SAAS,CAACiB,EAAE,CAAA;AAC5F,oBAAA,IAAI,CAACP,SAAS,CAACC,QAAQ,GAAGlH,EAAAA,CAAG8G,IAAI,CAAC,IAAI,CAACK,EAAE,EAAE,CAAG,EAAA,CAAA,CAAA;AAChD;AACF,aAAA,CAAA;AACF,SAAA;AACAM,QAAAA,QAAAA,CAAAA,CAASzH,EAAE,EAAA;YACT,OAAQL,IAAAA;gBACN,KAAK,IAAA;AACH,oBAAA,IAAI2G,OAAO,KAAO,EAAA;wBAChB,IAAI,CAAC1G,MAAM,GAAGI,EAAG0H,CAAAA,MAAM,GAAG3H,UAAU,CAAC,MAAQgH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAChD,MAAA,IAAIT,OAAO,MAAQ,EAAA;wBACxB,IAAI,CAAC1G,MAAM,GAAGI,EAAG2H,CAAAA,MAAM,GAAG5H,UAAU,CAAC,MAAQgH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAChD,MAAA,IAAIT,OAAO,OAAS,EAAA;AACzB,wBAAA,IAAI,CAAC1G,MAAM,GAAGI,GAAG4H,WAAW,EAAA,CAAGb,OAAO,CAAC,CAAA,CAAA;qBAClC,MAAA;AACL,wBAAA,IAAI,CAACnH,MAAM,GAAGI,EAAAA,CACX6H,KAAK,EAAA,CACL9H,UAAU,CAAC8B,iBAAoB,GAAA,OAAA,GAAU,oBACzCkF,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACb;AACA,oBAAA;gBACF,KAAK,UAAA;AACH,oBAAA,IAAIT,OAAO,KAAO,EAAA;wBAChB,IAAI,CAAC1G,MAAM,GAAGI,EAAG8H,CAAAA,WAAW,GAAG/H,UAAU,CAAC,MAAQgH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBACrD,MAAA,IAAIT,OAAO,MAAQ,EAAA;wBACxB,IAAI,CAAC1G,MAAM,GAAGI,EAAG+H,CAAAA,WAAW,GAAGhI,UAAU,CAAC,MAAQgH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBACrD,MAAA,IAAIT,OAAO,OAAS,EAAA;AACzB,wBAAA,IAAI,CAAC1G,MAAM,GAAGI,GAAGgI,gBAAgB,EAAA,CAAGjB,OAAO,CAAC,CAAA,CAAA;qBACvC,MAAA;AACL,wBAAA,IAAI,CAACnH,MAAM,GAAGI,EAAAA,CACXiI,UAAU,EAAA,CACVlI,UAAU,CAAC8B,iBAAoB,GAAA,OAAA,GAAU,oBACzCkF,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACb;AACA,oBAAA,IAAI,CAACjH,QAAQ,GAAGE,GAAGkI,GAAG,EAAA,CAAGnB,OAAO,CAAC,CAAA,CAAA;AACjC,oBAAA;gBACF,KAAK,MAAA;AACH,oBAAA,IAAIT,OAAO,KAAO,EAAA;wBAChB,IAAI,CAAC1G,MAAM,GAAGI,EAAGmI,CAAAA,QAAQ,GAAGpI,UAAU,CAAC,MAAQgH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAClD,MAAA,IAAIT,OAAO,MAAQ,EAAA;wBACxB,IAAI,CAAC1G,MAAM,GAAGI,EAAGoI,CAAAA,QAAQ,GAAGrI,UAAU,CAAC,MAAQgH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAClD,MAAA,IAAIT,OAAO,OAAS,EAAA;AACzB,wBAAA,IAAI,CAAC1G,MAAM,GAAGI,GAAGqI,aAAa,EAAA,CAAGtB,OAAO,CAAC,CAAA,CAAA;qBACpC,MAAA;AACL,wBAAA,IAAI,CAACnH,MAAM,GAAGI,EAAAA,CACXsI,OAAO,EAAA,CACPvI,UAAU,CAAC8B,iBAAoB,GAAA,OAAA,GAAU,oBACzCkF,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACb;AACA,oBAAA,IAAI,CAACwB,SAAS,GAAGvI,GAAGwI,KAAK,EAAA,CAAGzB,OAAO,CAAC,CAAA,CAAA;AACpC,oBAAA,IAAI,CAAC0B,QAAQ,GAAGzI,GAAGkI,GAAG,EAAA,CAAGnB,OAAO,CAAC,CAAA,CAAA;AACjC,oBAAA;AACF,gBAAA;AACE,oBAAA,MAAM,IAAItG,KAAAA,CAAM,CAAC,mBAAmB,EAAEd,IAAM,CAAA,CAAA,CAAA;AAChD;AACA,YAAA,IAAI,CAACkH,QAAQ,CAAC6B,QAAQ,GAAG1I,GAAG8G,IAAI,EAAA;YAChCX,MAAOjF,CAAAA,KAAK,CAAC,IAAI,EAAEvB,IAAAA,CAAAA;AACnBK,YAAAA,EAAAA,CAAGgH,IAAI,CAAC,WAAA;AACN,gBAAA,IAAIrH,SAAS,MAAQ,EAAA;AACnB,oBAAA,IAAI,CAACE,EAAE,GAAGG,EAAAA,CAAG2I,IAAI,EAAA;oBACjB,IAAI,CAACC,GAAG,CAAC5I,EAAG6I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC5I,EAAE,GAAGG,EAAG2I,CAAAA,IAAI,CAAC,CAAG,EAAA,IAAI,CAACjC,OAAO,CAAC7G,EAAE,CAACwH,CAAC,EAAErH,EAAGsH,CAAAA,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC7G,EAAE,CAACiJ,CAAC,CAAA,CAAA;qBAE/DC,CAAAA,CAAAA,OAAO,CAAC/I,EAAG6I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC5I,EAAE,GAAGG,EAAAA,CAAG2I,IAAI,CAAC,EAAI,EAAA,IAAI,CAACjC,OAAO,CAAC7G,EAAE,CAACwH,CAAC,EAAE,IAAI,CAACX,OAAO,CAAC7G,EAAE,CAACiJ,CAAC,CAAA;qBAE3DC,CAAAA,CAAAA,OAAO,CAAC/I,EAAG6I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC5I,EAAE,GAAGG,EAAG2I,CAAAA,IAAI,CAAC,IAAI,CAACjC,OAAO,CAAC7G,EAAE,CAACiJ,CAAC,EAAE,CAAA,EAAG9I,EAAGsH,CAAAA,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC7G,EAAE,CAACwH,CAAC,CAAA,CAAA;qBAEjE0B,CAAAA,CAAAA,OAAO,CAAC/I,EAAG6I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC5I,EAAE,GAAGG,EAAAA,CAAG2I,IAAI,CAAC,IAAI,CAACjC,OAAO,CAAC7G,EAAE,CAACiJ,CAAC,EAAE,EAAI,EAAA,IAAI,CAACpC,OAAO,CAAC7G,EAAE,CAACwH,CAAC,CAAA;qBAE3D0B,CAAAA,CAAAA,OAAO,CAAC/I,EAAG6I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC5I,EAAE,GAAGG,EAAAA,CAAG2I,IAAI,CAAC,IAAI,CAACjC,OAAO,CAAC7G,EAAE,CAACiJ,CAAC,EAAE,IAAI,CAACpC,OAAO,CAAC7G,EAAE,CAACwH,CAAC,EAAE,CAAA,CAAA;AAC1D,qBAAA,CAAA,CACC2B,KAAK,CAAC,WAAA;wBACL,IAAI,CAACnJ,EAAE,GAAGG,EAAG2I,CAAAA,IAAI,CAAC3I,EAAGsH,CAAAA,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC7G,EAAE,CAACiJ,CAAC,CAAA,EAAG,IAAI,CAACpC,OAAO,CAAC7G,EAAE,CAACwH,CAAC,EAAE,EAAC,CAAA;AACnE,qBAAA,CAAA;iBACG,MAAA;AACL,oBAAA,IAAI,CAACxH,EAAE,GAAG,IAAI,CAAC6G,OAAO,CAAC7G,EAAE;AAC3B;AACA,gBAAA,IAAI+B,IAAM,EAAA;AACR,oBAAA,IAAI,CAAC/B,EAAE,CAACwH,CAAC,GAAGrH,EAAAA,CAAGiJ,GAAG,CAAC,CAAG,EAAA,IAAI,CAACpJ,EAAE,CAACwH,CAAC,CAAA;AACjC;gBACA,IAAI,CAACE,EAAE,CAAC2B,QAAQ,GAAG/C,OAAOA,MAAM,CAC9B,IAAI,EACJxG,IACA,EAAA,IAAI,CAACC,MAAM,EACX,IAAI,CAACC,EAAE,EACPF,IAAS,KAAA,IAAA,GAAO,IAAO,GAAA,IAAI,CAACG,QAAQ,EACpCwG,EAAAA,CAAAA;AAEF,gBAAA,IAAI,CAACO,QAAQ,CAAC6B,QAAQ,GAAGvC,MAAAA,CAAOnF,UAAU,CAAC,IAAI,EAAErB,IAAM,EAAA,IAAI,CAAC+G,OAAO,CAAC7G,EAAE,EAAE,IAAI,CAACqJ,QAAQ,CAAA;gBACrF,IAAI/C,MAAAA,CAAOhH,OAAO,EAAE;oBAClB,IAAI,CAAC0H,QAAQ,CAAC6B,QAAQ,GAAG1I,GAAG8G,IAAI,CAC9BqC,aAAc,CAAA,IAAI,EAAE,IAAI,CAACtC,QAAQ,CAAC6B,QAAQ,CAACU,GAAG,CAAA,EAC9C,IAAI,CAACvC,QAAQ,CAAC6B,QAAQ,CAACW,CAAC,CAAA;AAE5B;AACF,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AACAjG,IAAAA,OAAAA,CAAQ7D,IAAI,GAAG,CAAC,MAAM,EAAEI,IAAAA,CAAK,CAAC,EAAE2G,EAAAA,CAAG,CAAC,EAAEzE,oBAAoB,UAAa,GAAA,OAAA,CAAQ,CAAC,EAAED,IAAAA,GAAO,SAAS,QAAU,CAAA,CAAA;IAC5G,OAAO;AACLwB,QAAAA,OAAAA;AACAd,QAAAA,SAAAA,EAAWpC,YAAYoJ,eAAe,CAAClG,OAAQmG,CAAAA,gBAAgB,CAAC,CAAE,CAAA;AACpE,KAAA;AACF;;;;"}
|
package/dist/blitter/box.js
CHANGED
|
@@ -6,7 +6,6 @@ import { Blitter } from './blitter.js';
|
|
|
6
6
|
*/ class BoxFilterBlitter extends Blitter {
|
|
7
7
|
/** @internal */ _phase;
|
|
8
8
|
/** @internal */ _kernelSize;
|
|
9
|
-
/** @internal */ _sigma;
|
|
10
9
|
/** @internal */ _blurSize;
|
|
11
10
|
/** @internal */ _logSpace;
|
|
12
11
|
/** @internal */ _logSpaceMultiplier;
|