@zephyr3d/scene 0.8.0 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation/animationset.js +220 -1
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/ik/ccd_solver.js +3 -4
- package/dist/animation/ik/ccd_solver.js.map +1 -1
- package/dist/animation/ik/fabrik_solver.js +3 -4
- package/dist/animation/ik/fabrik_solver.js.map +1 -1
- package/dist/animation/ik/ik_pole_constraint.js +7 -2
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/ik/ik_utils.js +0 -79
- package/dist/animation/ik/ik_utils.js.map +1 -1
- package/dist/animation/ik/two_bone_ik_solver.js +3 -4
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/skeleton.js +157 -125
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/spring_bone.js +240 -0
- package/dist/animation/spring/spring_bone.js.map +1 -0
- package/dist/animation/spring/spring_bone_collider.js +198 -0
- package/dist/animation/spring/spring_bone_collider.js.map +1 -0
- package/dist/animation/spring/spring_bone_constraint.js +170 -0
- package/dist/animation/spring/spring_bone_constraint.js.map +1 -0
- package/dist/animation/spring/spring_bone_system.js +328 -0
- package/dist/animation/spring/spring_bone_system.js.map +1 -0
- package/dist/asset/model.js +2 -2
- package/dist/index.d.ts +17 -0
- package/dist/material/mixins/pbr/common.js +20 -17
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/render/gpu_picking.js +100 -0
- package/dist/render/gpu_picking.js.map +1 -0
- package/dist/render/rendergraph/device_pool_allocator.js +41 -0
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -0
- package/dist/render/rendergraph/executor.js +146 -0
- package/dist/render/rendergraph/executor.js.map +1 -0
- package/dist/render/rendergraph/forward_plus_builder.js +414 -0
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +306 -0
- package/dist/render/rendergraph/rendergraph.js.map +1 -0
- package/dist/render/rendergraph/types.js +57 -0
- package/dist/render/rendergraph/types.js.map +1 -0
- package/dist/render/sky_motion_vector.js +85 -0
- package/dist/render/sky_motion_vector.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +3 -3
- package/dist/utility/serialization/scene/node.js +1 -1
- package/package.json +2 -2
- package/dist/animation/ik/ik_chain_builder.js +0 -68
- package/dist/animation/ik/ik_chain_builder.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
- package/dist/src/animation/animation.js +0 -127
- package/dist/src/animation/animation.js.map +0 -1
- package/dist/src/animation/animationset.js +0 -255
- package/dist/src/animation/animationset.js.map +0 -1
- package/dist/src/animation/animationtrack.js +0 -34
- package/dist/src/animation/animationtrack.js.map +0 -1
- package/dist/src/animation/eulerrotationtrack.js +0 -52
- package/dist/src/animation/eulerrotationtrack.js.map +0 -1
- package/dist/src/animation/morphtarget.js +0 -93
- package/dist/src/animation/morphtarget.js.map +0 -1
- package/dist/src/animation/morphtrack.js +0 -70
- package/dist/src/animation/morphtrack.js.map +0 -1
- package/dist/src/animation/proptrack.js +0 -161
- package/dist/src/animation/proptrack.js.map +0 -1
- package/dist/src/animation/rotationtrack.js +0 -51
- package/dist/src/animation/rotationtrack.js.map +0 -1
- package/dist/src/animation/scaletrack.js +0 -50
- package/dist/src/animation/scaletrack.js.map +0 -1
- package/dist/src/animation/skeleton.js +0 -204
- package/dist/src/animation/skeleton.js.map +0 -1
- package/dist/src/animation/translationtrack.js +0 -50
- package/dist/src/animation/translationtrack.js.map +0 -1
- package/dist/src/app/app.js +0 -129
- package/dist/src/app/app.js.map +0 -1
- package/dist/src/app/inputmgr.js +0 -267
- package/dist/src/app/inputmgr.js.map +0 -1
- package/dist/src/asset/assetmanager.js +0 -404
- package/dist/src/asset/assetmanager.js.map +0 -1
- package/dist/src/asset/builtin.js +0 -337
- package/dist/src/asset/builtin.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds.js +0 -470
- package/dist/src/asset/loaders/dds/dds.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
- package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/helpers.js +0 -327
- package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/src/asset/loaders/hdr/hdr.js +0 -180
- package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
- package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
- package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
- package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
- package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
- package/dist/src/asset/loaders/loader.js +0 -45
- package/dist/src/asset/loaders/loader.js.map +0 -1
- package/dist/src/asset/model.js +0 -414
- package/dist/src/asset/model.js.map +0 -1
- package/dist/src/blitter/bilateralblur.js +0 -221
- package/dist/src/blitter/bilateralblur.js.map +0 -1
- package/dist/src/blitter/blitter.js +0 -390
- package/dist/src/blitter/blitter.js.map +0 -1
- package/dist/src/blitter/box.js +0 -118
- package/dist/src/blitter/box.js.map +0 -1
- package/dist/src/blitter/copy.js +0 -22
- package/dist/src/blitter/copy.js.map +0 -1
- package/dist/src/blitter/gaussianblur.js +0 -228
- package/dist/src/blitter/gaussianblur.js.map +0 -1
- package/dist/src/camera/base.js +0 -92
- package/dist/src/camera/base.js.map +0 -1
- package/dist/src/camera/camera.js +0 -1005
- package/dist/src/camera/camera.js.map +0 -1
- package/dist/src/camera/fps.js +0 -238
- package/dist/src/camera/fps.js.map +0 -1
- package/dist/src/camera/orbit.js +0 -245
- package/dist/src/camera/orbit.js.map +0 -1
- package/dist/src/camera/orthocamera.js +0 -167
- package/dist/src/camera/orthocamera.js.map +0 -1
- package/dist/src/camera/perspectivecamera.js +0 -141
- package/dist/src/camera/perspectivecamera.js.map +0 -1
- package/dist/src/index.js +0 -120
- package/dist/src/index.js.map +0 -1
- package/dist/src/material/blinn.js +0 -81
- package/dist/src/material/blinn.js.map +0 -1
- package/dist/src/material/grassmaterial.js +0 -113
- package/dist/src/material/grassmaterial.js.map +0 -1
- package/dist/src/material/lambert.js +0 -92
- package/dist/src/material/lambert.js.map +0 -1
- package/dist/src/material/material.js +0 -301
- package/dist/src/material/material.js.map +0 -1
- package/dist/src/material/meshmaterial.js +0 -704
- package/dist/src/material/meshmaterial.js.map +0 -1
- package/dist/src/material/mixins/albedocolor.js +0 -76
- package/dist/src/material/mixins/albedocolor.js.map +0 -1
- package/dist/src/material/mixins/foliage.js +0 -47
- package/dist/src/material/mixins/foliage.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
- package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
- package/dist/src/material/mixins/lit.js +0 -476
- package/dist/src/material/mixins/lit.js.map +0 -1
- package/dist/src/material/mixins/pbr/common.js +0 -918
- package/dist/src/material/mixins/pbr/common.js.map +0 -1
- package/dist/src/material/mixins/texture.js +0 -172
- package/dist/src/material/mixins/texture.js.map +0 -1
- package/dist/src/material/mixins/vertexcolor.js +0 -56
- package/dist/src/material/mixins/vertexcolor.js.map +0 -1
- package/dist/src/material/particle.js +0 -178
- package/dist/src/material/particle.js.map +0 -1
- package/dist/src/material/pbrmr.js +0 -97
- package/dist/src/material/pbrmr.js.map +0 -1
- package/dist/src/material/pbrsg.js +0 -97
- package/dist/src/material/pbrsg.js.map +0 -1
- package/dist/src/material/shader/helper.js +0 -1209
- package/dist/src/material/shader/helper.js.map +0 -1
- package/dist/src/material/terrain-cm.js +0 -606
- package/dist/src/material/terrain-cm.js.map +0 -1
- package/dist/src/material/terrainmaterial.js +0 -375
- package/dist/src/material/terrainmaterial.js.map +0 -1
- package/dist/src/material/unlit.js +0 -41
- package/dist/src/material/unlit.js.map +0 -1
- package/dist/src/material/water.js +0 -417
- package/dist/src/material/water.js.map +0 -1
- package/dist/src/posteffect/bloom.js +0 -361
- package/dist/src/posteffect/bloom.js.map +0 -1
- package/dist/src/posteffect/compositor.js +0 -226
- package/dist/src/posteffect/compositor.js.map +0 -1
- package/dist/src/posteffect/fxaa.js +0 -273
- package/dist/src/posteffect/fxaa.js.map +0 -1
- package/dist/src/posteffect/grayscale.js +0 -69
- package/dist/src/posteffect/grayscale.js.map +0 -1
- package/dist/src/posteffect/motionblur.js +0 -96
- package/dist/src/posteffect/motionblur.js.map +0 -1
- package/dist/src/posteffect/posteffect.js +0 -126
- package/dist/src/posteffect/posteffect.js.map +0 -1
- package/dist/src/posteffect/sao.js +0 -324
- package/dist/src/posteffect/sao.js.map +0 -1
- package/dist/src/posteffect/ssr.js +0 -489
- package/dist/src/posteffect/ssr.js.map +0 -1
- package/dist/src/posteffect/taa.js +0 -172
- package/dist/src/posteffect/taa.js.map +0 -1
- package/dist/src/posteffect/tonemap.js +0 -94
- package/dist/src/posteffect/tonemap.js.map +0 -1
- package/dist/src/render/abuffer_oit.js +0 -361
- package/dist/src/render/abuffer_oit.js.map +0 -1
- package/dist/src/render/clipmap.js +0 -851
- package/dist/src/render/clipmap.js.map +0 -1
- package/dist/src/render/cluster_light.js +0 -333
- package/dist/src/render/cluster_light.js.map +0 -1
- package/dist/src/render/cull_visitor.js +0 -187
- package/dist/src/render/cull_visitor.js.map +0 -1
- package/dist/src/render/depthpass.js +0 -68
- package/dist/src/render/depthpass.js.map +0 -1
- package/dist/src/render/drawable_mixin.js +0 -227
- package/dist/src/render/drawable_mixin.js.map +0 -1
- package/dist/src/render/envlight.js +0 -463
- package/dist/src/render/envlight.js.map +0 -1
- package/dist/src/render/fbm_wavegenerator.js +0 -251
- package/dist/src/render/fbm_wavegenerator.js.map +0 -1
- package/dist/src/render/fft_wavegenerator.js +0 -1006
- package/dist/src/render/fft_wavegenerator.js.map +0 -1
- package/dist/src/render/fullscreenquad.js +0 -38
- package/dist/src/render/fullscreenquad.js.map +0 -1
- package/dist/src/render/gerstner_wavegenerator.js +0 -314
- package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
- package/dist/src/render/globalbindgroup_allocator.js +0 -60
- package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
- package/dist/src/render/hzb.js +0 -273
- package/dist/src/render/hzb.js.map +0 -1
- package/dist/src/render/lightpass.js +0 -172
- package/dist/src/render/lightpass.js.map +0 -1
- package/dist/src/render/objectcolorpass.js +0 -51
- package/dist/src/render/objectcolorpass.js.map +0 -1
- package/dist/src/render/primitive.js +0 -364
- package/dist/src/render/primitive.js.map +0 -1
- package/dist/src/render/render_queue.js +0 -467
- package/dist/src/render/render_queue.js.map +0 -1
- package/dist/src/render/renderbundle_wrapper.js +0 -152
- package/dist/src/render/renderbundle_wrapper.js.map +0 -1
- package/dist/src/render/renderer.js +0 -455
- package/dist/src/render/renderer.js.map +0 -1
- package/dist/src/render/renderpass.js +0 -200
- package/dist/src/render/renderpass.js.map +0 -1
- package/dist/src/render/shadowmap_pass.js +0 -56
- package/dist/src/render/shadowmap_pass.js.map +0 -1
- package/dist/src/render/sky.js +0 -1103
- package/dist/src/render/sky.js.map +0 -1
- package/dist/src/render/weightedblended_oit.js +0 -168
- package/dist/src/render/weightedblended_oit.js.map +0 -1
- package/dist/src/scene/batchgroup.js +0 -162
- package/dist/src/scene/batchgroup.js.map +0 -1
- package/dist/src/scene/environment.js +0 -209
- package/dist/src/scene/environment.js.map +0 -1
- package/dist/src/scene/graph_node.js +0 -72
- package/dist/src/scene/graph_node.js.map +0 -1
- package/dist/src/scene/light.js +0 -416
- package/dist/src/scene/light.js.map +0 -1
- package/dist/src/scene/mesh.js +0 -341
- package/dist/src/scene/mesh.js.map +0 -1
- package/dist/src/scene/octree.js +0 -649
- package/dist/src/scene/octree.js.map +0 -1
- package/dist/src/scene/particlesys.js +0 -738
- package/dist/src/scene/particlesys.js.map +0 -1
- package/dist/src/scene/raycast_visitor.js +0 -103
- package/dist/src/scene/raycast_visitor.js.map +0 -1
- package/dist/src/scene/scene.js +0 -284
- package/dist/src/scene/scene.js.map +0 -1
- package/dist/src/scene/scene_node.js +0 -732
- package/dist/src/scene/scene_node.js.map +0 -1
- package/dist/src/scene/terrain/grass.js +0 -278
- package/dist/src/scene/terrain/grass.js.map +0 -1
- package/dist/src/scene/terrain/heightfield.js +0 -475
- package/dist/src/scene/terrain/heightfield.js.map +0 -1
- package/dist/src/scene/terrain/patch.js +0 -530
- package/dist/src/scene/terrain/patch.js.map +0 -1
- package/dist/src/scene/terrain/quadtree.js +0 -461
- package/dist/src/scene/terrain/quadtree.js.map +0 -1
- package/dist/src/scene/terrain/terrain.js +0 -246
- package/dist/src/scene/terrain/terrain.js.map +0 -1
- package/dist/src/scene/terrain-cm/grass.js +0 -594
- package/dist/src/scene/terrain-cm/grass.js.map +0 -1
- package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
- package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
- package/dist/src/scene/water.js +0 -374
- package/dist/src/scene/water.js.map +0 -1
- package/dist/src/shaders/atmosphere.js +0 -957
- package/dist/src/shaders/atmosphere.js.map +0 -1
- package/dist/src/shaders/fog.js +0 -112
- package/dist/src/shaders/fog.js.map +0 -1
- package/dist/src/shaders/misc.js +0 -266
- package/dist/src/shaders/misc.js.map +0 -1
- package/dist/src/shaders/noise.js +0 -222
- package/dist/src/shaders/noise.js.map +0 -1
- package/dist/src/shaders/pbr.js +0 -51
- package/dist/src/shaders/pbr.js.map +0 -1
- package/dist/src/shaders/shadow.js +0 -636
- package/dist/src/shaders/shadow.js.map +0 -1
- package/dist/src/shaders/ssr.js +0 -490
- package/dist/src/shaders/ssr.js.map +0 -1
- package/dist/src/shaders/temporal.js +0 -215
- package/dist/src/shaders/temporal.js.map +0 -1
- package/dist/src/shaders/water.js +0 -756
- package/dist/src/shaders/water.js.map +0 -1
- package/dist/src/shadow/esm.js +0 -237
- package/dist/src/shadow/esm.js.map +0 -1
- package/dist/src/shadow/pcf_opt.js +0 -181
- package/dist/src/shadow/pcf_opt.js.map +0 -1
- package/dist/src/shadow/pcf_pd.js +0 -189
- package/dist/src/shadow/pcf_pd.js.map +0 -1
- package/dist/src/shadow/shader.js +0 -37
- package/dist/src/shadow/shader.js.map +0 -1
- package/dist/src/shadow/shadow_impl.js +0 -15
- package/dist/src/shadow/shadow_impl.js.map +0 -1
- package/dist/src/shadow/shadowmapper.js +0 -790
- package/dist/src/shadow/shadowmapper.js.map +0 -1
- package/dist/src/shadow/ssm.js +0 -159
- package/dist/src/shadow/ssm.js.map +0 -1
- package/dist/src/shadow/vsm.js +0 -297
- package/dist/src/shadow/vsm.js.map +0 -1
- package/dist/src/shapes/box.js +0 -386
- package/dist/src/shapes/box.js.map +0 -1
- package/dist/src/shapes/cylinder.js +0 -125
- package/dist/src/shapes/cylinder.js.map +0 -1
- package/dist/src/shapes/plane.js +0 -88
- package/dist/src/shapes/plane.js.map +0 -1
- package/dist/src/shapes/shape.js +0 -87
- package/dist/src/shapes/shape.js.map +0 -1
- package/dist/src/shapes/sphere.js +0 -114
- package/dist/src/shapes/sphere.js.map +0 -1
- package/dist/src/shapes/tetrahedron.js +0 -188
- package/dist/src/shapes/tetrahedron.js.map +0 -1
- package/dist/src/shapes/torus.js +0 -111
- package/dist/src/shapes/torus.js.map +0 -1
- package/dist/src/utility/aabbtree.js +0 -400
- package/dist/src/utility/aabbtree.js.map +0 -1
- package/dist/src/utility/bounding_volume.js +0 -29
- package/dist/src/utility/bounding_volume.js.map +0 -1
- package/dist/src/utility/debug.js +0 -28
- package/dist/src/utility/debug.js.map +0 -1
- package/dist/src/utility/draco/decoder.js +0 -116
- package/dist/src/utility/draco/decoder.js.map +0 -1
- package/dist/src/utility/misc.js +0 -105
- package/dist/src/utility/misc.js.map +0 -1
- package/dist/src/utility/panorama.js +0 -163
- package/dist/src/utility/panorama.js.map +0 -1
- package/dist/src/utility/pmrem.js +0 -354
- package/dist/src/utility/pmrem.js.map +0 -1
- package/dist/src/utility/rendermipmap.js +0 -115
- package/dist/src/utility/rendermipmap.js.map +0 -1
- package/dist/src/utility/serialization/json.js +0 -402
- package/dist/src/utility/serialization/json.js.map +0 -1
- package/dist/src/utility/serialization/manager.js +0 -623
- package/dist/src/utility/serialization/manager.js.map +0 -1
- package/dist/src/utility/serialization/scene/animation.js +0 -248
- package/dist/src/utility/serialization/scene/animation.js.map +0 -1
- package/dist/src/utility/serialization/scene/batch.js +0 -59
- package/dist/src/utility/serialization/scene/batch.js.map +0 -1
- package/dist/src/utility/serialization/scene/camera.js +0 -790
- package/dist/src/utility/serialization/scene/camera.js.map +0 -1
- package/dist/src/utility/serialization/scene/common.js +0 -222
- package/dist/src/utility/serialization/scene/common.js.map +0 -1
- package/dist/src/utility/serialization/scene/light.js +0 -575
- package/dist/src/utility/serialization/scene/light.js.map +0 -1
- package/dist/src/utility/serialization/scene/material.js +0 -1111
- package/dist/src/utility/serialization/scene/material.js.map +0 -1
- package/dist/src/utility/serialization/scene/mesh.js +0 -148
- package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
- package/dist/src/utility/serialization/scene/misc.js +0 -39
- package/dist/src/utility/serialization/scene/misc.js.map +0 -1
- package/dist/src/utility/serialization/scene/node.js +0 -451
- package/dist/src/utility/serialization/scene/node.js.map +0 -1
- package/dist/src/utility/serialization/scene/particle.js +0 -425
- package/dist/src/utility/serialization/scene/particle.js.map +0 -1
- package/dist/src/utility/serialization/scene/primitive.js +0 -692
- package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
- package/dist/src/utility/serialization/scene/scene.js +0 -704
- package/dist/src/utility/serialization/scene/scene.js.map +0 -1
- package/dist/src/utility/serialization/scene/terrain.js +0 -488
- package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
- package/dist/src/utility/serialization/scene/water.js +0 -465
- package/dist/src/utility/serialization/scene/water.js.map +0 -1
- package/dist/src/utility/shprojector.js +0 -297
- package/dist/src/utility/shprojector.js.map +0 -1
- package/dist/src/utility/textures/ggxlut.js +0 -213
- package/dist/src/utility/textures/ggxlut.js.map +0 -1
- package/dist/src/utility/textures/gradientnoise.js +0 -62
- package/dist/src/utility/textures/gradientnoise.js.map +0 -1
- package/dist/src/utility/textures/randomnoise.js +0 -41
- package/dist/src/utility/textures/randomnoise.js.map +0 -1
- package/dist/src/values.js +0 -162
- package/dist/src/values.js.map +0 -1
- package/dist/utility/blueprint/material/common.js +0 -7
- package/dist/utility/blueprint/material/common.js.map +0 -1
- package/dist/utility/serialization/blueprint/constants.js +0 -255
- package/dist/utility/serialization/blueprint/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/constants.js +0 -203
- package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/texture.js +0 -165
- package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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 { Application } from '../app';\r\nimport { Primitive } from '../render/primitive';\r\nimport { linearToGamma } from '../shaders/misc';\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 Application.instance.device.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 = Application.instance.device;\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 = Application.instance.device;\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 = Application.instance.device;\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 = Application.instance.device;\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 = Application.instance.device.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 = Application.instance.device.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 (Application.instance.device.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 return program\r\n ? {\r\n program,\r\n bindGroup: Application.instance.device.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","Application","instance","device","getDeviceCaps","shaderCaps","supportShaderTextureLod","textureSampleLevel","textureSample","textureArraySampleLevel","textureLoad","ivec2","mul","vec2","textureDimensions","Error","textureArrayLoad","writeTexel","texel","setup","_scope","_type","setUniforms","_bindGroup","_sourceTex","source","dest","sampler","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,KAAwB;qBAExB,aAAwC;qBAExC,QAA4B;qBAE5B,KAAyB;qBAEzB,SAA8B;qBAE9B,QAA6B;qBAE7B,SAA8B;qBAE9B,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,QAAqB,GAAA;QACvB,OAAO,IAAI,CAACL,SAAS;AACvB;IACA,IAAIK,QAAAA,CAASC,GAAa,EAAE;QAC1B,IAAI,CAACN,SAAS,GAAGM,GAAO,IAAA,IAAA;AAC1B;wBAEA,IAAIC,OAAoB,GAAA;QACtB,OAAO,IAAI,CAACN,QAAQ;AACtB;IACA,IAAIM,OAAAA,CAAQD,GAAa,EAAE;QACzB,IAAI,CAACL,QAAQ,GAAGK,GAAO,IAAA,IAAA;AACzB;iCAEA,IAAIE,QAAqB,GAAA;QACvB,OAAO,IAAI,CAACN,SAAS;AACvB;IACA,IAAIM,QAAAA,CAASF,GAAa,EAAE;QAC1B,IAAI,CAAC,CAAC,IAAI,CAACJ,SAAS,KAAK,CAAC,CAACI,GAAK,EAAA;AAC9B,YAAA,IAAI,CAACG,cAAc,EAAA;AACrB;QACA,IAAI,CAACP,SAAS,GAAGI,GAAO,IAAA,IAAA;AAC1B;AACA;;AAEC,MACD,IAAII,OAAmB,GAAA;QACrB,OAAO,IAAI,CAACZ,QAAQ;AACtB;IACA,IAAIY,OAAAA,CAAQJ,GAAY,EAAE;AACxB,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,YAA+B,GAAA;QACjC,OAAO,IAAI,CAACd,aAAa;AAC3B;IACA,IAAIc,YAAAA,CAAaC,EAAkB,EAAE;QACnC,IAAI,CAACf,aAAa,GAAGe,EAAAA;AACvB;AACA;;AAEC,MACD,IAAIC,IAAe,GAAA;AACjB,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,cAAuB,GAAA;QACrB,IAAI,CAACb,KAAK,GAAG,IAAA;AACf;AACA;;;;;;;;AAQC,MACDoB,SACEC,CAAAA,KAA4B,EAC5BC,IAAc,EACdC,MAAmB,EACnBC,EAAe,EACfC,QAAqB,EACrBC,UAA8C,EACjC;QACb,MAAMC,EAAAA,GAAKN,MAAMO,QAAQ;QACzB,IAAIF,UAAAA,KAAe,OAAWA,IAAAA,UAAAA,KAAe,OAAS,EAAA;YACpD,OAAQJ,IAAAA;gBACN,KAAK,IAAA;gBACL,KAAK,MAAA;oBACH,OAAOO,WAAAA,CAAYC,QAAQ,CAACC,MAAM,CAACC,aAAa,EAAA,CAAGC,UAAU,CAACC,uBAAuB,GACjFP,EAAGQ,CAAAA,kBAAkB,CAACZ,MAAQC,EAAAA,EAAAA,EAAI,KAClCG,EAAGS,CAAAA,aAAa,CAACb,MAAQC,EAAAA,EAAAA,CAAAA;gBAC/B,KAAK,UAAA;AACH,oBAAA,OAAOG,EAAGU,CAAAA,uBAAuB,CAACd,MAAAA,EAAQC,IAAIC,QAAU,EAAA,CAAA,CAAA;AAC1D,gBAAA;oBACE,OAAO,IAAA;AACX;SACK,MAAA;YACL,OAAQH,IAAAA;gBACN,KAAK,IAAA;AACH,oBAAA,OAAOK,GAAGW,WAAW,CAACf,QAAQI,EAAGY,CAAAA,KAAK,CAACZ,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGc,IAAI,CAACd,EAAAA,CAAGe,iBAAiB,CAACnB,MAAAA,EAAQ,KAAKC,EAAM,CAAA,CAAA,EAAA,CAAA,CAAA;gBAChG,KAAK,MAAA;AACH,oBAAA,MAAM,IAAImB,KAAM,CAAA,2CAAA,CAAA;gBAClB,KAAK,UAAA;AACH,oBAAA,OAAOhB,GAAGiB,gBAAgB,CACxBrB,QACAI,EAAGY,CAAAA,KAAK,CAACZ,EAAGa,CAAAA,GAAG,CAACb,EAAGc,CAAAA,IAAI,CAACd,EAAGe,CAAAA,iBAAiB,CAACnB,MAAQ,EAAA,CAAA,CAAA,CAAA,EAAKC,MAC1DC,QACA,EAAA,CAAA,CAAA;AAEJ,gBAAA;oBACE,OAAO,IAAA;AACX;AACF;AACF;AACA;;;;;;;MAQAoB,UAAAA,CAAWxB,KAA4B,EAAEC,IAAc,EAAEE,EAAe,EAAEsB,KAAkB,EAAe;QACzG,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,IAAiB,EAAEC,OAAwB,EAAQ;AACrF,QAAA,MAAMxB,MAASF,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM;AAC1C,QAAA,MAAMyB,IAAO,GAAA,CAACF,IAAQvB,IAAAA,MAAAA,CAAOT,IAAI,KAAK,QAAA;AACtC,QAAA,MAAMmC,iBAAoBF,GAAAA,OAAAA,GACtBA,OAAQG,CAAAA,SAAS,KAAK,QAAYH,IAAAA,OAAAA,CAAQI,SAAS,KAAK,YAAYJ,OAAQK,CAAAA,SAAS,KAAK,QAAA,GAC1FP,OAAOQ,YAAY,EAAA;AACvB,QAAA,MAAMC,WAAcC,GAAAA,cAAAA,CAClB,IACA,EAAA,IAAI,EACJN,iBACAJ,EAAAA,MAAAA,CAAOW,eAAe,EAAA,GAAMX,MAAOY,CAAAA,cAAc,EAAK,GAAA,KAAA,GAAQ,SAAU,OACxET,EAAAA,IAAAA,CAAAA;AAEFM,QAAAA,WAAAA,CAAYI,SAAS,CAACC,UAAU,CAAC,UAAUd,MAAQE,EAAAA,OAAAA,CAAAA;QACnD,IAAI,IAAI,CAACjD,SAAS,EAAE;YAClB,MAAM8D,SAAAA,GAAY,IAAI,CAAChE,SAAS,GAAG,CAAA,CAAE,IAAIkD,IAAAA,EAAMe,QAActC,EAAAA,IAAAA,MAAAA,CAAOuC,kBAAkB,EAAA;YACtF,MAAMC,UAAAA,GAAa,IAAI,CAACnE,SAAS,GAAG,CAAA,CAAE,IAAIkD,IAAAA,EAAMkB,SAAezC,EAAAA,IAAAA,MAAAA,CAAO0C,mBAAmB,EAAA;YACzF,IAAI,CAAClE,aAAa,CAACmE,OAAO,CACxB,IAAI,CAACpE,SAAS,CAAC,CAAA,CAAE,GAAG8D,SAAAA,EACpB,IAAI,CAAC9D,SAAS,CAAC,CAAA,CAAE,GAAGiE,UAAAA,EACpB,CAAC,IAAI,CAACjE,SAAS,CAAC,CAAA,CAAE,GAAG,CAAI,GAAA,IAAI,CAACA,SAAS,CAAC,CAAA,CAAE,IAAI8D,SAAAA,GAAY,CAC1D,EAAC,CAAA,IAAI,CAAC9D,SAAS,CAAC,CAAE,CAAA,GAAG,CAAI,GAAA,IAAI,CAACA,SAAS,CAAC,CAAA,CAAE,IAAIiE,UAAa,GAAA,CAAA,CAAA;AAE7DT,YAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,WAAa,EAAA,IAAI,CAACpE,aAAa,CAAA;AAChE;AACA,QAAA,IAAI,CAAC2C,WAAW,CAACY,WAAAA,CAAYI,SAAS,EAAEb,MAAAA,CAAAA;QACxCtB,MAAO6C,CAAAA,cAAc,CAACtB,IAAQ,IAAA,IAAA,CAAA;AAC9BvB,QAAAA,MAAAA,CAAO8C,WAAW,CAAC,IAAI,CAACzE,SAAS,CAAA;AACjC2B,QAAAA,MAAAA,CAAO+C,UAAU,CAAC,IAAI,CAACzE,QAAQ,CAAA;QAC/B0B,MAAOgD,CAAAA,UAAU,CAACjB,WAAAA,CAAYkB,OAAO,CAAA;AACrCjD,QAAAA,MAAAA,CAAOkD,YAAY,CAAC,CAAGnB,EAAAA,WAAAA,CAAYI,SAAS,CAAA;AAC5CnC,QAAAA,MAAAA,CAAOmD,eAAe,CAAC,IAAI,CAACjF,aAAa,IAAIkF,qBAAAA,EAAAA,CAAAA;AAC7CC,QAAAA,kBAAAA,EAAAA,CAAqBC,IAAI,EAAA;AAC3B;qBAEA,WAAUC,CACRjC,MAAsB,EACtBC,IAAiB,EACjBiC,KAAa,EACbhC,OAAwB,EAClB;AACN,QAAA,MAAMxB,MAASF,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM;AAC1C,QAAA,MAAMyB,IAAO,GAAA,CAACF,IAAQvB,IAAAA,MAAAA,CAAOT,IAAI,KAAK,QAAA;AACtC,QAAA,MAAMmC,iBAAoBF,GAAAA,OAAAA,GACtBA,OAAQG,CAAAA,SAAS,KAAK,QAAYH,IAAAA,OAAAA,CAAQI,SAAS,KAAK,YAAYJ,OAAQK,CAAAA,SAAS,KAAK,QAAA,GAC1FP,OAAOQ,YAAY,EAAA;AACvB,QAAA,MAAMC,WAAcC,GAAAA,cAAAA,CAClB,UACA,EAAA,IAAI,EACJN,iBACAJ,EAAAA,MAAAA,CAAOW,eAAe,EAAA,GAAMX,MAAOY,CAAAA,cAAc,EAAK,GAAA,KAAA,GAAQ,SAAU,OACxET,EAAAA,IAAAA,CAAAA;AAEFM,QAAAA,WAAAA,CAAYI,SAAS,CAACC,UAAU,CAAC,UAAUd,MAAQE,EAAAA,OAAAA,CAAAA;AACnDO,QAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,UAAYY,EAAAA,KAAAA,CAAAA;AAC3C,QAAA,IAAI,CAACrC,WAAW,CAACY,WAAAA,CAAYI,SAAS,EAAEb,MAAAA,CAAAA;QACxCtB,MAAO6C,CAAAA,cAAc,CAACtB,IAAQ,IAAA,IAAA,CAAA;AAC9BvB,QAAAA,MAAAA,CAAO8C,WAAW,CAAC,IAAI,CAACzE,SAAS,CAAA;AACjC2B,QAAAA,MAAAA,CAAO+C,UAAU,CAAC,IAAI,CAACzE,QAAQ,CAAA;QAC/B0B,MAAOgD,CAAAA,UAAU,CAACjB,WAAAA,CAAYkB,OAAO,CAAA;AACrCjD,QAAAA,MAAAA,CAAOkD,YAAY,CAAC,CAAGnB,EAAAA,WAAAA,CAAYI,SAAS,CAAA;AAC5CnC,QAAAA,MAAAA,CAAOmD,eAAe,CAAC,IAAI,CAACjF,aAAa,IAAIkF,qBAAAA,EAAAA,CAAAA;AAC7CC,QAAAA,kBAAAA,EAAAA,CAAqBC,IAAI,EAAA;AAC3B;qBAEA,WAAUG,CACRnC,MAAmB,EACnBC,IAAiB,EACjBmC,IAAc,EACdlC,OAAwB,EAClB;AACN,QAAA,MAAMxB,MAASF,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM;AAC1C,QAAA,MAAMyB,IAAO,GAAA,CAACF,IAAQvB,IAAAA,MAAAA,CAAOT,IAAI,KAAK,QAAA;AACtC,QAAA,MAAMmC,iBAAoBF,GAAAA,OAAAA,GACtBA,OAAQG,CAAAA,SAAS,KAAK,QAAYH,IAAAA,OAAAA,CAAQI,SAAS,KAAK,YAAYJ,OAAQK,CAAAA,SAAS,KAAK,QAAA,GAC1FP,OAAOQ,YAAY,EAAA;AACvB,QAAA,MAAMC,WAAcC,GAAAA,cAAAA,CAClB,MACA,EAAA,IAAI,EACJN,iBACAJ,EAAAA,MAAAA,CAAOW,eAAe,EAAA,GAAMX,MAAOY,CAAAA,cAAc,EAAK,GAAA,KAAA,GAAQ,SAAU,OACxET,EAAAA,IAAAA,CAAAA;AAEFM,QAAAA,WAAAA,CAAYI,SAAS,CAACC,UAAU,CAAC,UAAUd,MAAQE,EAAAA,OAAAA,CAAAA;AACnDO,QAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,WAAa,EAAA,CAAA,GAAItB,OAAOqC,KAAK,CAAA;AAC5D5B,QAAAA,WAAAA,CAAYI,SAAS,CAACS,QAAQ,CAAC,UAAYc,EAAAA,IAAAA,CAAAA;AAC3C,QAAA,IAAI,CAACvC,WAAW,CAACY,WAAAA,CAAYI,SAAS,EAAEb,MAAAA,CAAAA;QACxCtB,MAAO6C,CAAAA,cAAc,CAACtB,IAAQ,IAAA,IAAA,CAAA;AAC9BvB,QAAAA,MAAAA,CAAO8C,WAAW,CAAC,IAAI,CAACzE,SAAS,CAAA;AACjC2B,QAAAA,MAAAA,CAAO+C,UAAU,CAAC,IAAI,CAACzE,QAAQ,CAAA;QAC/B0B,MAAOgD,CAAAA,UAAU,CAACjB,WAAAA,CAAYkB,OAAO,CAAA;AACrCjD,QAAAA,MAAAA,CAAOkD,YAAY,CAAC,CAAGnB,EAAAA,WAAAA,CAAYI,SAAS,CAAA;AAC5CnC,QAAAA,MAAAA,CAAOmD,eAAe,CAAC,IAAI,CAACjF,aAAa,IAAIkF,qBAAAA,EAAAA,CAAAA;AAC7CC,QAAAA,kBAAAA,EAAAA,CAAqBC,IAAI,EAAA;AAC3B;AAmFAM,IAAAA,IAAAA,CACEtC,MAAmB,EACnBC,IAA+B,EAC/BiC,KAA+B,EAC/BhC,OAAwB,EAClB;AACN,QAAA,MAAMxB,MAASF,GAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM;AAC1CA,QAAAA,MAAAA,CAAO6D,gBAAgB,EAAA;AACvB,QAAA,IAAI,CAACtC,IAAM,EAAA;YACT,IAAID,MAAAA,CAAOwC,WAAW,EAAI,EAAA;AACxB,gBAAA,IAAI,CAACC,MAAM,CAACzC,MAAAA,EAAQ,IAAME,EAAAA,OAAAA,CAAAA;aACrB,MAAA,IAAIF,MAAO0C,CAAAA,gBAAgB,EAAI,EAAA;AACpC,gBAAA,IAAI,CAACT,WAAW,CAACjC,QAAQ,IAAM,EAACkC,SAAoB,CAAGhC,EAAAA,OAAAA,CAAAA;aAClD,MAAA,IAAIF,MAAO2C,CAAAA,aAAa,EAAI,EAAA;AACjC,gBAAA,IAAI,CAACR,WAAW,CAACnC,QAAQ,IAAM,EAACkC,SAAoB,CAAGhC,EAAAA,OAAAA,CAAAA;aAClD,MAAA;AACL,gBAAA,MAAM,IAAIZ,KAAM,CAAA,6CAAA,CAAA;AAClB;SACK,MAAA;YACL,MAAMsD,WAAAA,GAAc3C,IAAK4C,CAAAA,aAAa,EAClC5C,GAAAA,IAAAA,GACAvB,OAAOoE,IAAI,CAACC,yBAAyB,CAAC,KAAO,EAAA;AAAC9C,gBAAAA;aAAK,EAAE,IAAA,CAAA;YACzD,MAAM+C,WAAAA,GAAc/C,KAAK4C,aAAa,EAAA,GAAK5C,KAAKgD,mBAAmB,EAAA,GAAK,CAAA,CAAE,GAAGhD,IAAAA;YAC7E,IAAID,MAAAA,CAAOwC,WAAW,EAAI,EAAA;AACxB,gBAAA,IAAI,CAACQ,WAAAA,EAAaR,WAAiB,EAAA,IAAA,CAACQ,aAAaN,gBAAoB,EAAA,EAAA;AACnE,oBAAA,MAAM,IAAIpD,KAAM,CAAA,yDAAA,CAAA;AAClB;gBACA,IAAI0D,WAAAA,CAAYN,gBAAgB,EAAI,EAAA;AAClCE,oBAAAA,WAAAA,CAAYM,uBAAuB,CAAC,CAAG,EAAChB,KAAoB,IAAA,CAAA,CAAA;AAC9D;AACA,gBAAA,IAAI,CAACO,MAAM,CAACzC,MAAAA,EAAQ4C,WAAa1C,EAAAA,OAAAA,CAAAA;aAC5B,MAAA,IAAIF,MAAO0C,CAAAA,gBAAgB,EAAI,EAAA;AACpC,gBAAA,IAAI,CAACM,WAAaR,EAAAA,WAAAA,EAAAA,IAAiB,CAACQ,WAAAA,CAAYN,gBAAgB,EAAI,EAAA;AAClE,oBAAA,MAAM,IAAIpD,KAAM,CAAA,yDAAA,CAAA;AAClB;gBACA,IAAI0D,WAAAA,CAAYR,WAAW,EAAI,EAAA;AAC7B,oBAAA,IAAI,CAACP,WAAW,CAACjC,QAAQ4C,WAAa,EAACV,SAAoB,CAAGhC,EAAAA,OAAAA,CAAAA;iBACzD,MAAA;oBACL,MAAMiD,CAAAA,GAAIC,KAAKC,GAAG,CAACrD,OAAOsD,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,CAACjC,MAAAA,EAAQ4C,aAAaW,CAAGrB,EAAAA,KAAAA,CAAAA;AAC3C;AACF;aACK,MAAA,IAAIlC,MAAO2C,CAAAA,aAAa,EAAI,EAAA;AACjC,gBAAA,IAAI,CAACK,WAAYL,CAAAA,aAAa,MAAM,CAACK,WAAAA,CAAYR,WAAW,EAAI,EAAA;AAC9D,oBAAA,MAAM,IAAIlD,KAAM,CAAA,yDAAA,CAAA;AAClB;gBACA,IAAI0D,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,CAACnC,MAAAA,EAAQ4C,aAAaW,CAAGrB,EAAAA,KAAAA,CAAAA;AAC3C;iBACK,MAAA;AACL,oBAAA,IAAI,CAACC,WAAW,CAACnC,QAAQ4C,WAAa,EAACV,SAAoB,CAAGhC,EAAAA,OAAAA,CAAAA;AAChE;aACK,MAAA;AACL,gBAAA,MAAM,IAAIZ,KAAM,CAAA,6CAAA,CAAA;AAClB;YACA,IAAIsD,WAAAA,IAAeA,gBAAgB3C,IAAM,EAAA;gBACvCvB,MAAOoE,CAAAA,IAAI,CAACW,kBAAkB,CAACb,WAAAA,CAAAA;AACjC;AACF;AACAlE,QAAAA,MAAAA,CAAOgF,eAAe,EAAA;AACxB;AACF;AAEA,MAAMC,mBAEF,EAAC;AAEL,IAAIC,eAA6B,GAAA,IAAA;AACjC,IAAIC,gBAAmC,GAAA,IAAA;AAEvC,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,GAAmBrF,WAAYC,CAAAA,QAAQ,CAACC,MAAM,CAAC0F,oBAAoB,EAAA;AACnEP,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,CACPzC,IAAc,EACdyG,MAAe,EACftE,iBAA0B,EAC1B/B,UAA8C,EAC9C8B,IAAa,EAAA;AAEb,IAAA,MAAMvC,OAAO,CAAGK,EAAAA,IAAAA,CAAK,CAAC,EAAEyG,MAAAA,CAAO9G,IAAI,CAAC,CAAC,EAAEwC,iBAAAA,CAAkB,CAAC,EAAE/B,UAAAA,CAAW,CAAC,EAAE8B,IAAAA,GAAO,IAAI,CAAG,CAAA,CAAA;IACxF,IAAIM,WAAAA,GAAckD,gBAAgB,CAAC/F,IAAK,CAAA;AACxC,IAAA,IAAI6C,gBAAgBkE,SAAW,EAAA;QAC7BlE,WACEmE,GAAAA,iBAAAA,CAAkB3G,IAAMyG,EAAAA,MAAAA,EAAQtE,iBAAmB/B,EAAAA,UAAAA,EAAY8B,MAAM,CAAC,CAACuE,MAAOnH,CAAAA,QAAQ,CAAK,IAAA,IAAA;QAC7FoG,gBAAgB,CAAC/F,KAAK,GAAG6C,WAAAA;AAC3B;IACA,OAAOA,WAAAA;AACT;AAEA,SAASmE,iBAAAA,CACP3G,IAAc,EACdyG,MAAe,EACftE,iBAA0B,EAC1ByE,EAAsC,EACtC1E,IAAa,EACb2E,SAAkB,EAAA;AAElB,IAAA,MAAMnD,UAAUnD,WAAYC,CAAAA,QAAQ,CAACC,MAAM,CAACqG,kBAAkB,CAAC;AAC7DC,QAAAA,MAAAA,CAAAA,CAAO1G,EAAE,EAAA;YACP,IAAI,CAAC2G,OAAO,CAACC,GAAG,GAAG5G,EAAGc,CAAAA,IAAI,EAAG+F,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,YAAA,IAAI,CAACC,QAAQ,CAACjH,EAAE,GAAGG,GAAGc,IAAI,EAAA;AAC1B,YAAA,IAAI0F,SAAW,EAAA;AACb,gBAAA,IAAI,CAACA,SAAS,GAAGxG,GAAG+G,IAAI,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACrC;YACAZ,MAAOhF,CAAAA,KAAK,CAAC,IAAI,EAAEzB,IAAAA,CAAAA;AACnBK,YAAAA,EAAAA,CAAGiH,IAAI,CAAC,WAAA;AACN,gBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAGnH,EAAG+G,CAAAA,IAAI,CAAC,IAAI,CAACJ,OAAO,CAACC,GAAG,EAAE,CAAG,EAAA,CAAA,CAAA;AACvD,gBAAA,IAAI,CAACE,QAAQ,CAACjH,EAAE,GACdF,IAAAA,KAAS,SACLK,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGc,IAAI,CAAC,CAAA,EAAG,EAAK,CAAA,EAAA,IAAI,CAAC6F,OAAO,CAACC,GAAG,CAACQ,EAAE,CAC1CpH,GAAAA,EAAAA,CAAGqH,GAAG,CAACrH,EAAAA,CAAGa,GAAG,CAAC,IAAI,CAAC8F,OAAO,CAACC,GAAG,CAACQ,EAAE,EAAE,GAAMpH,CAAAA,EAAAA,EAAAA,CAAGc,IAAI,CAAC,GAAA,CAAA,CAAA;AACvD,gBAAA,IAAIZ,YAAYC,QAAQ,CAACC,MAAM,CAACT,IAAI,KAAK,QAAU,EAAA;AACjD,oBAAA,IAAI,CAACuH,SAAS,CAACC,QAAQ,CAACG,CAAC,GAAGtH,EAAAA,CAAGuH,GAAG,CAAC,IAAI,CAACL,SAAS,CAACC,QAAQ,CAACG,CAAC,CAAA;AAC9D;AACA,gBAAA,IAAId,SAAW,EAAA;AACb,oBAAA,IAAI,CAACgB,EAAE,CAACJ,EAAE,GAAGpH,EAAAA,CAAGqH,GAAG,CAACrH,EAAGa,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,GAAGnH,EAAAA,CAAG+G,IAAI,CAAC,IAAI,CAACK,EAAE,EAAE,CAAG,EAAA,CAAA,CAAA;AAChD;AACF,aAAA,CAAA;AACF,SAAA;AACAM,QAAAA,QAAAA,CAAAA,CAAS1H,EAAE,EAAA;YACT,OAAQL,IAAAA;gBACN,KAAK,IAAA;AACH,oBAAA,IAAI4G,OAAO,KAAO,EAAA;wBAChB,IAAI,CAAC3G,MAAM,GAAGI,EAAG2H,CAAAA,MAAM,GAAG5H,UAAU,CAAC,MAAQiH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAChD,MAAA,IAAIT,OAAO,MAAQ,EAAA;wBACxB,IAAI,CAAC3G,MAAM,GAAGI,EAAG4H,CAAAA,MAAM,GAAG7H,UAAU,CAAC,MAAQiH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAChD,MAAA,IAAIT,OAAO,OAAS,EAAA;AACzB,wBAAA,IAAI,CAAC3G,MAAM,GAAGI,GAAG6H,WAAW,EAAA,CAAGb,OAAO,CAAC,CAAA,CAAA;qBAClC,MAAA;AACL,wBAAA,IAAI,CAACpH,MAAM,GAAGI,EAAAA,CACX8H,KAAK,EAAA,CACL/H,UAAU,CAAC+B,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,CAAC3G,MAAM,GAAGI,EAAG+H,CAAAA,WAAW,GAAGhI,UAAU,CAAC,MAAQiH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBACrD,MAAA,IAAIT,OAAO,MAAQ,EAAA;wBACxB,IAAI,CAAC3G,MAAM,GAAGI,EAAGgI,CAAAA,WAAW,GAAGjI,UAAU,CAAC,MAAQiH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBACrD,MAAA,IAAIT,OAAO,OAAS,EAAA;AACzB,wBAAA,IAAI,CAAC3G,MAAM,GAAGI,GAAGiI,gBAAgB,EAAA,CAAGjB,OAAO,CAAC,CAAA,CAAA;qBACvC,MAAA;AACL,wBAAA,IAAI,CAACpH,MAAM,GAAGI,EAAAA,CACXkI,UAAU,EAAA,CACVnI,UAAU,CAAC+B,iBAAoB,GAAA,OAAA,GAAU,oBACzCkF,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACb;AACA,oBAAA,IAAI,CAAClH,QAAQ,GAAGE,GAAGmI,GAAG,EAAA,CAAGnB,OAAO,CAAC,CAAA,CAAA;AACjC,oBAAA;gBACF,KAAK,MAAA;AACH,oBAAA,IAAIT,OAAO,KAAO,EAAA;wBAChB,IAAI,CAAC3G,MAAM,GAAGI,EAAGoI,CAAAA,QAAQ,GAAGrI,UAAU,CAAC,MAAQiH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAClD,MAAA,IAAIT,OAAO,MAAQ,EAAA;wBACxB,IAAI,CAAC3G,MAAM,GAAGI,EAAGqI,CAAAA,QAAQ,GAAGtI,UAAU,CAAC,MAAQiH,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;qBAClD,MAAA,IAAIT,OAAO,OAAS,EAAA;AACzB,wBAAA,IAAI,CAAC3G,MAAM,GAAGI,GAAGsI,aAAa,EAAA,CAAGtB,OAAO,CAAC,CAAA,CAAA;qBACpC,MAAA;AACL,wBAAA,IAAI,CAACpH,MAAM,GAAGI,EAAAA,CACXuI,OAAO,EAAA,CACPxI,UAAU,CAAC+B,iBAAoB,GAAA,OAAA,GAAU,oBACzCkF,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACb;AACA,oBAAA,IAAI,CAACwB,SAAS,GAAGxI,GAAGyI,KAAK,EAAA,CAAGzB,OAAO,CAAC,CAAA,CAAA;AACpC,oBAAA,IAAI,CAAC0B,QAAQ,GAAG1I,GAAGmI,GAAG,EAAA,CAAGnB,OAAO,CAAC,CAAA,CAAA;AACjC,oBAAA;AACF,gBAAA;AACE,oBAAA,MAAM,IAAIhG,KAAAA,CAAM,CAAC,mBAAmB,EAAErB,IAAM,CAAA,CAAA,CAAA;AAChD;AACA,YAAA,IAAI,CAACmH,QAAQ,CAAC6B,QAAQ,GAAG3I,GAAG+G,IAAI,EAAA;YAChCX,MAAOhF,CAAAA,KAAK,CAAC,IAAI,EAAEzB,IAAAA,CAAAA;AACnBK,YAAAA,EAAAA,CAAGiH,IAAI,CAAC,WAAA;AACN,gBAAA,IAAItH,SAAS,MAAQ,EAAA;AACnB,oBAAA,IAAI,CAACE,EAAE,GAAGG,EAAAA,CAAG4I,IAAI,EAAA;oBACjB,IAAI,CAACC,GAAG,CAAC7I,EAAG8I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC7I,EAAE,GAAGG,EAAG4I,CAAAA,IAAI,CAAC,CAAG,EAAA,IAAI,CAACjC,OAAO,CAAC9G,EAAE,CAACyH,CAAC,EAAEtH,EAAGuH,CAAAA,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC9G,EAAE,CAACkJ,CAAC,CAAA,CAAA;qBAE/DC,CAAAA,CAAAA,OAAO,CAAChJ,EAAG8I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC7I,EAAE,GAAGG,EAAAA,CAAG4I,IAAI,CAAC,EAAI,EAAA,IAAI,CAACjC,OAAO,CAAC9G,EAAE,CAACyH,CAAC,EAAE,IAAI,CAACX,OAAO,CAAC9G,EAAE,CAACkJ,CAAC,CAAA;qBAE3DC,CAAAA,CAAAA,OAAO,CAAChJ,EAAG8I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC7I,EAAE,GAAGG,EAAG4I,CAAAA,IAAI,CAAC,IAAI,CAACjC,OAAO,CAAC9G,EAAE,CAACkJ,CAAC,EAAE,CAAA,EAAG/I,EAAGuH,CAAAA,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC9G,EAAE,CAACyH,CAAC,CAAA,CAAA;qBAEjE0B,CAAAA,CAAAA,OAAO,CAAChJ,EAAG8I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC7I,EAAE,GAAGG,EAAAA,CAAG4I,IAAI,CAAC,IAAI,CAACjC,OAAO,CAAC9G,EAAE,CAACkJ,CAAC,EAAE,EAAI,EAAA,IAAI,CAACpC,OAAO,CAAC9G,EAAE,CAACyH,CAAC,CAAA;qBAE3D0B,CAAAA,CAAAA,OAAO,CAAChJ,EAAG8I,CAAAA,KAAK,CAAC,IAAI,CAACJ,QAAQ,EAAE,CAAI,CAAA,EAAA,WAAA;wBACnC,IAAI,CAAC7I,EAAE,GAAGG,EAAAA,CAAG4I,IAAI,CAAC,IAAI,CAACjC,OAAO,CAAC9G,EAAE,CAACkJ,CAAC,EAAE,IAAI,CAACpC,OAAO,CAAC9G,EAAE,CAACyH,CAAC,EAAE,CAAA,CAAA;AAC1D,qBAAA,CAAA,CACC2B,KAAK,CAAC,WAAA;wBACL,IAAI,CAACpJ,EAAE,GAAGG,EAAG4I,CAAAA,IAAI,CAAC5I,EAAGuH,CAAAA,GAAG,CAAC,IAAI,CAACZ,OAAO,CAAC9G,EAAE,CAACkJ,CAAC,CAAA,EAAG,IAAI,CAACpC,OAAO,CAAC9G,EAAE,CAACyH,CAAC,EAAE,EAAC,CAAA;AACnE,qBAAA,CAAA;iBACG,MAAA;AACL,oBAAA,IAAI,CAACzH,EAAE,GAAG,IAAI,CAAC8G,OAAO,CAAC9G,EAAE;AAC3B;AACA,gBAAA,IAAIgC,IAAM,EAAA;AACR,oBAAA,IAAI,CAAChC,EAAE,CAACyH,CAAC,GAAGtH,EAAAA,CAAGkJ,GAAG,CAAC,CAAG,EAAA,IAAI,CAACrJ,EAAE,CAACyH,CAAC,CAAA;AACjC;gBACA,IAAI,CAACE,EAAE,CAAC2B,QAAQ,GAAG/C,OAAOA,MAAM,CAC9B,IAAI,EACJzG,IACA,EAAA,IAAI,CAACC,MAAM,EACX,IAAI,CAACC,EAAE,EACPF,IAAS,KAAA,IAAA,GAAO,IAAO,GAAA,IAAI,CAACG,QAAQ,EACpCyG,EAAAA,CAAAA;AAEF,gBAAA,IAAI,CAACO,QAAQ,CAAC6B,QAAQ,GAAGvC,MAAAA,CAAOlF,UAAU,CAAC,IAAI,EAAEvB,IAAM,EAAA,IAAI,CAACgH,OAAO,CAAC9G,EAAE,EAAE,IAAI,CAACsJ,QAAQ,CAAA;gBACrF,IAAI/C,MAAAA,CAAOjH,OAAO,EAAE;oBAClB,IAAI,CAAC2H,QAAQ,CAAC6B,QAAQ,GAAG3I,GAAG+G,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;AACA,IAAA,OAAOjG,OACH,GAAA;AACEA,QAAAA,OAAAA;QACAd,SAAWrC,EAAAA,WAAAA,CAAYC,QAAQ,CAACC,MAAM,CAACmJ,eAAe,CAAClG,OAAAA,CAAQmG,gBAAgB,CAAC,CAAE,CAAA;KAEpF,GAAA,IAAA;AACN;;;;"}
|
package/dist/src/blitter/box.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Blitter } from './blitter.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Box-filter blitter
|
|
5
|
-
* @public
|
|
6
|
-
*/ class BoxFilterBlitter extends Blitter {
|
|
7
|
-
/** @internal */ _phase;
|
|
8
|
-
/** @internal */ _kernelSize;
|
|
9
|
-
/** @internal */ _sigma;
|
|
10
|
-
/** @internal */ _blurSize;
|
|
11
|
-
/** @internal */ _logSpace;
|
|
12
|
-
/** @internal */ _logSpaceMultiplier;
|
|
13
|
-
/**
|
|
14
|
-
* Creates an instance of BoxFilterBlitter
|
|
15
|
-
* @param phase - phase of the blit operation
|
|
16
|
-
* @param kernelSize - kernel size
|
|
17
|
-
* @param blurSize - blur size
|
|
18
|
-
*/ constructor(phase, kernelSize, blurSize){
|
|
19
|
-
super();
|
|
20
|
-
this._phase = phase;
|
|
21
|
-
this._kernelSize = kernelSize;
|
|
22
|
-
this._blurSize = blurSize;
|
|
23
|
-
this._logSpace = false;
|
|
24
|
-
this._logSpaceMultiplier = 1;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* true if the box filter will be applied in logarithmic space
|
|
28
|
-
*/ get logSpace() {
|
|
29
|
-
return this._logSpace;
|
|
30
|
-
}
|
|
31
|
-
set logSpace(val) {
|
|
32
|
-
this._logSpace = !!val;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Multiplier for logarithmic space blur
|
|
36
|
-
*/ get logSpaceMultiplier() {
|
|
37
|
-
return this._logSpaceMultiplier;
|
|
38
|
-
}
|
|
39
|
-
set logSpaceMultiplier(val) {
|
|
40
|
-
this._logSpaceMultiplier = val;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* {@inheritDoc Blitter.setup}
|
|
44
|
-
* @override
|
|
45
|
-
*/ setup(scope, type) {
|
|
46
|
-
const pb = scope.$builder;
|
|
47
|
-
if (pb.shaderKind === 'fragment') {
|
|
48
|
-
scope.blurSize = pb.float().uniform(0);
|
|
49
|
-
if (this._logSpace && this._phase === 'horizonal') {
|
|
50
|
-
scope.multiplier = pb.float().uniform(0);
|
|
51
|
-
}
|
|
52
|
-
if (this._phase !== 'horizonal' && this._phase !== 'vertical') {
|
|
53
|
-
throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);
|
|
54
|
-
}
|
|
55
|
-
if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {
|
|
56
|
-
throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);
|
|
57
|
-
}
|
|
58
|
-
scope.blurMultiplyVec = type === 'cube' ? this._phase === 'horizonal' ? pb.vec3(1, 0, 0) : pb.vec3(0, 1, 0) : this._phase === 'horizonal' ? pb.vec2(1, 0) : pb.vec2(0, 1);
|
|
59
|
-
scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);
|
|
60
|
-
scope.weight = pb.float(1 / this._kernelSize);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* {@inheritDoc Blitter.setUniforms}
|
|
65
|
-
* @override
|
|
66
|
-
*/ setUniforms(bindGroup) {
|
|
67
|
-
bindGroup.setValue('blurSize', this._blurSize);
|
|
68
|
-
if (this._logSpace && this._phase === 'horizonal') {
|
|
69
|
-
bindGroup.setValue('multiplier', this._logSpaceMultiplier);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* {@inheritDoc Blitter.filter}
|
|
74
|
-
* @override
|
|
75
|
-
*/ filter(scope, type, srcTex, srcUV, srcLayer, sampleType) {
|
|
76
|
-
const that = this;
|
|
77
|
-
const pb = scope.$builder;
|
|
78
|
-
scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);
|
|
79
|
-
if (that._logSpace) {
|
|
80
|
-
scope.avgValue = pb.vec4(scope.weight);
|
|
81
|
-
} else {
|
|
82
|
-
scope.avgValue = pb.mul(that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType), scope.weight);
|
|
83
|
-
}
|
|
84
|
-
scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function() {
|
|
85
|
-
this.d1 = that.readTexel(this, type, srcTex, pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)), srcLayer, sampleType);
|
|
86
|
-
this.d2 = that.readTexel(this, type, srcTex, pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)), srcLayer, sampleType);
|
|
87
|
-
if (that._logSpace) {
|
|
88
|
-
if (that._phase === 'horizonal') {
|
|
89
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.mul(pb.sub(this.d1, this.d0), this.multiplier)), this.weight));
|
|
90
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.mul(pb.sub(this.d2, this.d0), this.multiplier)), this.weight));
|
|
91
|
-
} else {
|
|
92
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d1, this.d0)), this.weight));
|
|
93
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d2, this.d0)), this.weight));
|
|
94
|
-
}
|
|
95
|
-
} else {
|
|
96
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.weight));
|
|
97
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.weight));
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
if (that._logSpace) {
|
|
101
|
-
if (that._phase === 'horizonal') {
|
|
102
|
-
scope.avgValue = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.avgValue));
|
|
103
|
-
} else {
|
|
104
|
-
scope.avgValue = pb.add(scope.d0, pb.log(scope.avgValue));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return scope.avgValue;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* {@inheritDoc Blitter.calcHash}
|
|
111
|
-
* @override
|
|
112
|
-
*/ calcHash() {
|
|
113
|
-
return `${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export { BoxFilterBlitter };
|
|
118
|
-
//# sourceMappingURL=box.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"box.js","sources":["../../../src/blitter/box.ts"],"sourcesContent":["import type { BindGroup, PBShaderExp, PBInsideFunctionScope, PBGlobalScope } from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\n\r\n/**\r\n * Box-filter blitter\r\n * @public\r\n */\r\nexport class BoxFilterBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /**\r\n * Creates an instance of BoxFilterBlitter\r\n * @param phase - phase of the blit operation\r\n * @param kernelSize - kernel size\r\n * @param blurSize - blur size\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernelSize: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernelSize;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n }\r\n /**\r\n * true if the box filter will be applied in logarithmic space\r\n */\r\n get logSpace(): boolean {\r\n return this._logSpace;\r\n }\r\n set logSpace(val: boolean) {\r\n this._logSpace = !!val;\r\n }\r\n /**\r\n * Multiplier for logarithmic space blur\r\n */\r\n get logSpaceMultiplier(): number {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val: number) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n scope.weight = pb.float(1 / this._kernelSize);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\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 scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.weight);\r\n } else {\r\n scope.avgValue = pb.mul(that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType), scope.weight);\r\n }\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.d1 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.d2 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.mul(pb.sub(this.d1, this.d0), this.multiplier)), this.weight)\r\n );\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.mul(pb.sub(this.d2, this.d0), this.multiplier)), this.weight)\r\n );\r\n } else {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d1, this.d0)), this.weight));\r\n this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d2, this.d0)), this.weight));\r\n }\r\n } else {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.weight));\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.weight));\r\n }\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.avgValue = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.avgValue));\r\n } else {\r\n scope.avgValue = pb.add(scope.d0, pb.log(scope.avgValue));\r\n }\r\n }\r\n return scope.avgValue;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash(): string {\r\n return `${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["BoxFilterBlitter","Blitter","phase","kernelSize","blurSize","_phase","_kernelSize","_blurSize","_logSpace","_logSpaceMultiplier","logSpace","val","logSpaceMultiplier","setup","scope","type","pb","$builder","shaderKind","float","uniform","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","weight","setUniforms","bindGroup","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","d0","readTexel","avgValue","vec4","mul","$for","d1","sub","i","d2","add","exp","log"],"mappings":"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"}
|
package/dist/src/blitter/copy.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Blitter } from './blitter.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Copy blitter
|
|
5
|
-
* @public
|
|
6
|
-
*/ class CopyBlitter extends Blitter {
|
|
7
|
-
/**
|
|
8
|
-
* {@inheritDoc Blitter.filter}
|
|
9
|
-
* @override
|
|
10
|
-
*/ filter(scope, type, srcTex, srcUV, srcLayer, sampleType) {
|
|
11
|
-
return this.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* {@inheritDoc Blitter.calcHash}
|
|
15
|
-
* @override
|
|
16
|
-
*/ calcHash() {
|
|
17
|
-
return '';
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { CopyBlitter };
|
|
22
|
-
//# sourceMappingURL=copy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copy.js","sources":["../../../src/blitter/copy.ts"],"sourcesContent":["import type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport type { PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\n\r\n/**\r\n * Copy blitter\r\n * @public\r\n */\r\nexport class CopyBlitter extends Blitter {\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\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 return this.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash(): string {\r\n return '';\r\n }\r\n}\r\n"],"names":["CopyBlitter","Blitter","filter","scope","type","srcTex","srcUV","srcLayer","sampleType","readTexel"],"mappings":";;AAIA;;;IAIO,MAAMA,WAAoBC,SAAAA,OAAAA,CAAAA;AAC/B;;;AAGC,MACDC,MACEC,CAAAA,KAA4B,EAC5BC,IAAc,EACdC,MAAmB,EACnBC,KAAkB,EAClBC,QAAqB,EACrBC,UAAoC,EACvB;QACb,OAAO,IAAI,CAACC,SAAS,CAACN,OAAOC,IAAMC,EAAAA,MAAAA,EAAQC,OAAOC,QAAUC,EAAAA,UAAAA,CAAAA;AAC9D;AACA;;;AAGC,MACD,QAA6B,GAAA;QAC3B,OAAO,EAAA;AACT;AACF;;;;"}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import { Blitter } from './blitter.js';
|
|
2
|
-
import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gaussian blur blitter
|
|
6
|
-
* @public
|
|
7
|
-
*/ class GaussianBlurBlitter extends Blitter {
|
|
8
|
-
/** @internal */ _phase;
|
|
9
|
-
/** @internal */ _kernelSize;
|
|
10
|
-
/** @internal */ _sigma;
|
|
11
|
-
/** @internal */ _blurSize;
|
|
12
|
-
/** @internal */ _logSpace;
|
|
13
|
-
/** @internal */ _logSpaceMultiplier;
|
|
14
|
-
/** @internal */ _depthTex;
|
|
15
|
-
/** @internal */ _depthCutoff;
|
|
16
|
-
/**
|
|
17
|
-
* Creates an instance of GaussianBlurBlitter
|
|
18
|
-
* @param phase - Blitter phase
|
|
19
|
-
* @param kernalSize - kernel size
|
|
20
|
-
* @param sigma - Gaussian standard deviation
|
|
21
|
-
* @param blurSize - Blur radius
|
|
22
|
-
*/ constructor(phase, kernalSize, sigma, blurSize){
|
|
23
|
-
super();
|
|
24
|
-
this._phase = phase;
|
|
25
|
-
this._kernelSize = kernalSize;
|
|
26
|
-
this._sigma = sigma;
|
|
27
|
-
this._blurSize = blurSize;
|
|
28
|
-
this._logSpace = false;
|
|
29
|
-
this._logSpaceMultiplier = 1;
|
|
30
|
-
this._depthTex = null;
|
|
31
|
-
this._depthCutoff = 0.7;
|
|
32
|
-
}
|
|
33
|
-
/** Blur radius */ get blurSize() {
|
|
34
|
-
return this._blurSize;
|
|
35
|
-
}
|
|
36
|
-
set blurSize(val) {
|
|
37
|
-
this._blurSize = val;
|
|
38
|
-
}
|
|
39
|
-
/** Kernel size */ get kernelSize() {
|
|
40
|
-
return this._kernelSize;
|
|
41
|
-
}
|
|
42
|
-
set kernelSize(val) {
|
|
43
|
-
if (this._kernelSize !== val) {
|
|
44
|
-
this._kernelSize = val;
|
|
45
|
-
this.invalidateHash();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/** true if the box filter will be applied in logarithmic space */ get logSpace() {
|
|
49
|
-
return this._logSpace;
|
|
50
|
-
}
|
|
51
|
-
set logSpace(val) {
|
|
52
|
-
if (this._logSpace !== !!val) {
|
|
53
|
-
this._logSpace = !!val;
|
|
54
|
-
this.invalidateHash();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/** Multiplier for logarithmic space blur */ get logSpaceMultiplier() {
|
|
58
|
-
return this._logSpaceMultiplier;
|
|
59
|
-
}
|
|
60
|
-
set logSpaceMultiplier(val) {
|
|
61
|
-
this._logSpaceMultiplier = val;
|
|
62
|
-
}
|
|
63
|
-
/** Linear depth texture */ get depthTexture() {
|
|
64
|
-
return this._depthTex;
|
|
65
|
-
}
|
|
66
|
-
set depthTexture(tex) {
|
|
67
|
-
if (this._depthTex !== tex) {
|
|
68
|
-
if (!tex || !this._depthTex) {
|
|
69
|
-
this.invalidateHash();
|
|
70
|
-
}
|
|
71
|
-
this._depthTex = tex;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/** Depth cutoff */ get depthCutoff() {
|
|
75
|
-
return this._depthCutoff;
|
|
76
|
-
}
|
|
77
|
-
set depthCutoff(val) {
|
|
78
|
-
this._depthCutoff = val;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* {@inheritDoc Blitter.setup}
|
|
82
|
-
* @override
|
|
83
|
-
*/ setup(scope, type) {
|
|
84
|
-
const pb = scope.$builder;
|
|
85
|
-
if (pb.shaderKind === 'fragment') {
|
|
86
|
-
if (this._depthTex) {
|
|
87
|
-
scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);
|
|
88
|
-
scope.depthCutoff = pb.float().uniform(0);
|
|
89
|
-
}
|
|
90
|
-
scope.sigma = pb.float().uniform(0);
|
|
91
|
-
scope.blurSize = pb.float().uniform(0);
|
|
92
|
-
if (this._logSpace && this._phase === 'horizonal') {
|
|
93
|
-
scope.multiplier = pb.float().uniform(0);
|
|
94
|
-
}
|
|
95
|
-
if (this._phase !== 'horizonal' && this._phase !== 'vertical') {
|
|
96
|
-
throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);
|
|
97
|
-
}
|
|
98
|
-
if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {
|
|
99
|
-
throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);
|
|
100
|
-
}
|
|
101
|
-
scope.blurMultiplyVec = type === 'cube' ? this._phase === 'horizonal' ? pb.vec3(1, 0, 0) : pb.vec3(0, 1, 0) : this._phase === 'horizonal' ? pb.vec2(1, 0) : pb.vec2(0, 1);
|
|
102
|
-
scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* {@inheritDoc Blitter.setUniforms}
|
|
107
|
-
* @override
|
|
108
|
-
*/ setUniforms(bindGroup) {
|
|
109
|
-
bindGroup.setValue('sigma', this._sigma);
|
|
110
|
-
bindGroup.setValue('blurSize', this._blurSize);
|
|
111
|
-
if (this._logSpace && this._phase === 'horizonal') {
|
|
112
|
-
bindGroup.setValue('multiplier', this._logSpaceMultiplier);
|
|
113
|
-
}
|
|
114
|
-
if (this._depthTex) {
|
|
115
|
-
bindGroup.setTexture('depthTex', this._depthTex);
|
|
116
|
-
bindGroup.setValue('depthCutoff', this._depthCutoff);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* {@inheritDoc Blitter.filter}
|
|
121
|
-
* @override
|
|
122
|
-
*/ filter(scope, type, srcTex, srcUV, srcLayer, sampleType) {
|
|
123
|
-
const that = this;
|
|
124
|
-
const pb = scope.$builder;
|
|
125
|
-
if (that._depthTex) {
|
|
126
|
-
pb.func('getLinearDepth', [
|
|
127
|
-
pb.vec2('uv')
|
|
128
|
-
], function() {
|
|
129
|
-
this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);
|
|
130
|
-
if (pb.getDevice().type === 'webgl') {
|
|
131
|
-
this.$return(decodeNormalizedFloatFromRGBA(this, this.depthValue));
|
|
132
|
-
} else {
|
|
133
|
-
this.$return(this.depthValue.r);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
scope.incrementalGaussian = pb.vec3();
|
|
138
|
-
scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));
|
|
139
|
-
scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));
|
|
140
|
-
scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);
|
|
141
|
-
scope.coefficientSum = pb.float(0);
|
|
142
|
-
scope.minExpValue = pb.vec4(87, 87, 87, 87);
|
|
143
|
-
scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);
|
|
144
|
-
if (that._logSpace) {
|
|
145
|
-
scope.avgValue = pb.vec4(scope.incrementalGaussian.x);
|
|
146
|
-
} else {
|
|
147
|
-
scope.avgValue = pb.mul(that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType), scope.incrementalGaussian.x);
|
|
148
|
-
}
|
|
149
|
-
if (that._depthTex) {
|
|
150
|
-
scope.centerDepth = scope.getLinearDepth(srcUV);
|
|
151
|
-
}
|
|
152
|
-
scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);
|
|
153
|
-
scope.incrementalGaussian = pb.vec3(pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz), scope.incrementalGaussian.z);
|
|
154
|
-
scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function() {
|
|
155
|
-
this.$l.uv1 = pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));
|
|
156
|
-
this.$l.d1 = pb.vec4();
|
|
157
|
-
if (that._depthTex) {
|
|
158
|
-
this.$l.depth1 = this.getLinearDepth(this.uv1);
|
|
159
|
-
this.$l.test1 = pb.lessThan(pb.abs(pb.sub(this.depth1, this.centerDepth)), this.depthCutoff);
|
|
160
|
-
} else {
|
|
161
|
-
this.$l.test1 = true;
|
|
162
|
-
}
|
|
163
|
-
this.$if(this.test1, function() {
|
|
164
|
-
this.d1 = that.readTexel(scope, type, srcTex, this.uv1, srcLayer, sampleType);
|
|
165
|
-
});
|
|
166
|
-
this.$l.uv2 = pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));
|
|
167
|
-
this.$l.d2 = pb.vec4();
|
|
168
|
-
if (that._depthTex) {
|
|
169
|
-
this.$l.depth2 = this.getLinearDepth(this.uv2);
|
|
170
|
-
this.$l.test2 = pb.lessThan(pb.abs(pb.sub(this.depth2, this.centerDepth)), this.depthCutoff);
|
|
171
|
-
} else {
|
|
172
|
-
this.$l.test2 = true;
|
|
173
|
-
}
|
|
174
|
-
this.$if(this.test2, function() {
|
|
175
|
-
this.d2 = that.readTexel(scope, type, srcTex, pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)), srcLayer, sampleType);
|
|
176
|
-
});
|
|
177
|
-
if (that._logSpace) {
|
|
178
|
-
if (that._phase === 'horizonal') {
|
|
179
|
-
this.$if(this.test1, function() {
|
|
180
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d1, this.d0), this.multiplier))), this.incrementalGaussian.x));
|
|
181
|
-
this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);
|
|
182
|
-
});
|
|
183
|
-
this.$if(this.test2, function() {
|
|
184
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d2, this.d0), this.multiplier))), this.incrementalGaussian.x));
|
|
185
|
-
this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);
|
|
186
|
-
});
|
|
187
|
-
} else {
|
|
188
|
-
this.$if(this.test1, function() {
|
|
189
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d1, this.d0))), this.incrementalGaussian.x));
|
|
190
|
-
this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);
|
|
191
|
-
});
|
|
192
|
-
this.$if(this.test2, function() {
|
|
193
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d2, this.d0))), this.incrementalGaussian.x));
|
|
194
|
-
this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
} else {
|
|
198
|
-
this.$if(this.test1, function() {
|
|
199
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.incrementalGaussian.x));
|
|
200
|
-
this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);
|
|
201
|
-
});
|
|
202
|
-
this.$if(this.test2, function() {
|
|
203
|
-
this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.incrementalGaussian.x));
|
|
204
|
-
this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
this.incrementalGaussian = pb.vec3(pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz), this.incrementalGaussian.z);
|
|
208
|
-
});
|
|
209
|
-
scope.$l.outColor = pb.div(scope.avgValue, scope.coefficientSum);
|
|
210
|
-
if (that._logSpace) {
|
|
211
|
-
if (that._phase === 'horizonal') {
|
|
212
|
-
scope.outColor = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.outColor));
|
|
213
|
-
} else {
|
|
214
|
-
scope.outColor = pb.add(scope.d0, pb.log(scope.outColor));
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
return scope.outColor;
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* {@inheritDoc Blitter.calcHash}
|
|
221
|
-
* @override
|
|
222
|
-
*/ calcHash() {
|
|
223
|
-
return `${this._depthTex ? 1 : 0}-${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
export { GaussianBlurBlitter };
|
|
228
|
-
//# sourceMappingURL=gaussianblur.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianblur.js","sources":["../../../src/blitter/gaussianblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\n\r\n/**\r\n * Gaussian blur blitter\r\n * @public\r\n */\r\nexport class GaussianBlurBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /** @internal */\r\n protected _depthTex: Texture2D;\r\n /** @internal */\r\n protected _depthCutoff: number;\r\n /**\r\n * Creates an instance of GaussianBlurBlitter\r\n * @param phase - Blitter phase\r\n * @param kernalSize - kernel size\r\n * @param sigma - Gaussian standard deviation\r\n * @param blurSize - Blur radius\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernalSize: number, sigma: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernalSize;\r\n this._sigma = sigma;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n this._depthTex = null;\r\n this._depthCutoff = 0.7;\r\n }\r\n /** Blur radius */\r\n get blurSize(): number {\r\n return this._blurSize;\r\n }\r\n set blurSize(val: number) {\r\n this._blurSize = val;\r\n }\r\n /** Kernel size */\r\n get kernelSize(): number {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val: number) {\r\n if (this._kernelSize !== val) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** true if the box filter will be applied in logarithmic space */\r\n get logSpace(): boolean {\r\n return this._logSpace;\r\n }\r\n set logSpace(val: boolean) {\r\n if (this._logSpace !== !!val) {\r\n this._logSpace = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** Multiplier for logarithmic space blur */\r\n get logSpaceMultiplier(): number {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val: number) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /** Linear depth texture */\r\n get depthTexture(): Texture2D {\r\n return this._depthTex;\r\n }\r\n set depthTexture(tex: Texture2D) {\r\n if (this._depthTex !== tex) {\r\n if (!tex || !this._depthTex) {\r\n this.invalidateHash();\r\n }\r\n this._depthTex = tex;\r\n }\r\n }\r\n /** Depth cutoff */\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 /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n if (this._depthTex) {\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n scope.depthCutoff = pb.float().uniform(0);\r\n }\r\n scope.sigma = pb.float().uniform(0);\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('sigma', this._sigma);\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n if (this._depthTex) {\r\n bindGroup.setTexture('depthTex', this._depthTex);\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\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 if (that._depthTex) {\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthValue));\r\n } else {\r\n this.$return(this.depthValue.r);\r\n }\r\n });\r\n }\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.minExpValue = pb.vec4(87, 87, 87, 87);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.incrementalGaussian.x);\r\n } else {\r\n scope.avgValue = pb.mul(\r\n that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType),\r\n scope.incrementalGaussian.x\r\n );\r\n }\r\n if (that._depthTex) {\r\n scope.centerDepth = scope.getLinearDepth(srcUV);\r\n }\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.uv1 = pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d1 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth1 = this.getLinearDepth(this.uv1);\r\n this.$l.test1 = pb.lessThan(pb.abs(pb.sub(this.depth1, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test1 = true;\r\n }\r\n this.$if(this.test1, function () {\r\n this.d1 = that.readTexel(scope, type, srcTex, this.uv1, srcLayer, sampleType);\r\n });\r\n this.$l.uv2 = pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d2 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth2 = this.getLinearDepth(this.uv2);\r\n this.$l.test2 = pb.lessThan(pb.abs(pb.sub(this.depth2, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test2 = true;\r\n }\r\n this.$if(this.test2, function () {\r\n this.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d1, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d2, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d1, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d2, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.outColor = pb.div(scope.avgValue, scope.coefficientSum);\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.outColor = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.outColor));\r\n } else {\r\n scope.outColor = pb.add(scope.d0, pb.log(scope.outColor));\r\n }\r\n }\r\n return scope.outColor;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash(): string {\r\n return `${this._depthTex ? 1 : 0}-${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["GaussianBlurBlitter","Blitter","phase","kernalSize","sigma","blurSize","_phase","_kernelSize","_sigma","_blurSize","_logSpace","_logSpaceMultiplier","_depthTex","_depthCutoff","val","kernelSize","invalidateHash","logSpace","logSpaceMultiplier","depthTexture","tex","depthCutoff","setup","scope","type","pb","$builder","shaderKind","depthTex","tex2D","sampleType","uniform","float","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","setUniforms","bindGroup","setValue","setTexture","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","getDevice","$return","decodeNormalizedFloatFromRGBA","r","incrementalGaussian","x","div","mul","Math","sqrt","PI","y","exp","z","coefficientSum","minExpValue","vec4","d0","readTexel","avgValue","centerDepth","getLinearDepth","add","xy","yz","$for","uv1","sub","i","d1","depth1","test1","lessThan","abs","$if","uv2","d2","depth2","test2","min","outColor","log"],"mappings":"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"}
|