@woosh/meep-engine 3.60.4 → 3.60.5
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/CHANGELOG.md +2602 -0
- package/CONTRIBUTING.md +7 -0
- package/MIGRATION_2_TO_3.md +136 -0
- package/SECURITY.md +4 -0
- package/editor/EditorCameraNavigation.d.ts +2 -1
- package/editor/EditorCameraNavigation.d.ts.map +1 -1
- package/editor/EditorCameraNavigation.js +51 -57
- package/package.json +6 -2
- package/src/engine/EngineHarness.d.ts +3 -9
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -8
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
- package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +8 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +731 -734
- package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
- package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
- package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/water_refraction/README.md +5 -6
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +7 -5
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +2 -2
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
- package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
- package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
- package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +22 -13
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +7 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
- package/editor/REWORK_PLAN_2026_08.md +0 -692
- package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
- package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
- package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
- package/src/REVIEW_2026_08_06/adv-core.md +0 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
- package/src/REVIEW_2026_08_06/adv-view.md +0 -446
- package/src/REVIEW_2026_08_06/api-core.md +0 -296
- package/src/REVIEW_2026_08_06/api-engine.md +0 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
- package/src/REVIEW_2026_08_06/core-binary.md +0 -348
- package/src/REVIEW_2026_08_06/core-collection.md +0 -376
- package/src/REVIEW_2026_08_06/core-math.md +0 -221
- package/src/REVIEW_2026_08_06/core-process.md +0 -266
- package/src/REVIEW_2026_08_06/core-science.md +0 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
- package/src/REVIEW_2026_08_06/engine-input.md +0 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
- package/src/REVIEW_2026_08_06/generation.md +0 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
- package/src/REVIEW_2026_08_06/view.md +0 -667
- package/src/REVIEW_2026_08_06.md +0 -610
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
- package/src/core/bvh2/bvh3/NOTES.md +0 -2
- package/src/core/bvh8/NOTES.md +0 -63
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
- package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
- package/src/core/geom/3d/gjk/NOTES.md +0 -8
- package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
- package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
- package/src/engine/REVIEW_2026_07_03.md +0 -211
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
- package/src/engine/control/first-person/DESIGN.md +0 -658
- package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
- package/src/engine/control/first-person/TODO.md +0 -160
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
- package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
- package/src/engine/ecs/ik/PLAN.md +0 -179
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
- package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
- package/src/engine/network/CONGESTION_CONTROL.md +0 -87
- package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
- package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
- package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
- package/src/engine/physics/cloth/PLAN.md +0 -3056
- package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
- package/src/engine/physics/fluid/solver/NOTES.md +0 -46
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
- package/src/format/image/avif/DECISIONS.md +0 -545
- package/src/format/image/jpeg/NOTES.md +0 -3
- package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
- package/src/generation/COORDINATES.md +0 -54
- package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
- package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
- package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
- package/src/shade/RENDERER_CONTRACT.md +0 -697
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
- package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
- package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
- package/src/shade/renderer/NOTES.md +0 -78
- package/src/shade/renderer/PLAN.md +0 -8
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
- package/src/shade/renderer/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
- package/src/shade/renderer/camera/orbital/README.md +0 -81
- package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
- package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/index.js +0 -9
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
- package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
- package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
- package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
- package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
- package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
- package/src/shade/renderer/hiz/NOTES.md +0 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
- package/src/shade/renderer/light/cluster/NOTES.md +0 -11
- package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
- package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
- package/src/shade/renderer/particles/DESIGN.md +0 -1011
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
- package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
- package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
- package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
- package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
- package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
- package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
- package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
- package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
- package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
- package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
- package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
- package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
- package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
- package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
- package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
- package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
- package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
- package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
- package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
- package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
- package/src/shade/wgsl/NOTES.md +0 -4
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The mip 0 reduction's footprint across x, in source texels, by {@link HZB_FOOTPRINT_X}:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* const HZB_FOOTPRINT_X: i32
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* @type {CodeChunkChoice}
|
|
9
|
+
*/
|
|
10
|
+
export const chunk_hzb_footprint_x: CodeChunkChoice;
|
|
11
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
12
|
+
//# sourceMappingURL=chunk_hzb_footprint_x.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_hzb_footprint_x.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/chunk_hzb_footprint_x.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,oCAFU,eAAe,CAEkD;gCAb3C,uCAAuC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
3
|
+
import { HZB_FOOTPRINT_X } from "./HZB_FOOTPRINT_X.js";
|
|
4
|
+
import { HZBFootprint } from "./HZBFootprint.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The mip 0 reduction's footprint across x, in source texels, by {@link HZB_FOOTPRINT_X}:
|
|
8
|
+
*
|
|
9
|
+
* ```wgsl
|
|
10
|
+
* const HZB_FOOTPRINT_X: i32
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunkChoice}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_hzb_footprint_x = CodeChunkChoice.from(HZB_FOOTPRINT_X);
|
|
16
|
+
|
|
17
|
+
chunk_hzb_footprint_x.add(HZBFootprint.Two, CodeChunk.from(
|
|
18
|
+
//language=WGSL
|
|
19
|
+
`
|
|
20
|
+
const HZB_FOOTPRINT_X: i32 = 2;
|
|
21
|
+
`));
|
|
22
|
+
|
|
23
|
+
chunk_hzb_footprint_x.add(HZBFootprint.Three, CodeChunk.from(
|
|
24
|
+
//language=WGSL
|
|
25
|
+
`
|
|
26
|
+
const HZB_FOOTPRINT_X: i32 = 3;
|
|
27
|
+
`));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The mip 0 reduction's footprint across y, in source texels, by {@link HZB_FOOTPRINT_Y}:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* const HZB_FOOTPRINT_Y: i32
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* @type {CodeChunkChoice}
|
|
9
|
+
*/
|
|
10
|
+
export const chunk_hzb_footprint_y: CodeChunkChoice;
|
|
11
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
12
|
+
//# sourceMappingURL=chunk_hzb_footprint_y.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_hzb_footprint_y.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/chunk_hzb_footprint_y.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,oCAFU,eAAe,CAEkD;gCAb3C,uCAAuC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
3
|
+
import { HZB_FOOTPRINT_Y } from "./HZB_FOOTPRINT_Y.js";
|
|
4
|
+
import { HZBFootprint } from "./HZBFootprint.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The mip 0 reduction's footprint across y, in source texels, by {@link HZB_FOOTPRINT_Y}:
|
|
8
|
+
*
|
|
9
|
+
* ```wgsl
|
|
10
|
+
* const HZB_FOOTPRINT_Y: i32
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunkChoice}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_hzb_footprint_y = CodeChunkChoice.from(HZB_FOOTPRINT_Y);
|
|
16
|
+
|
|
17
|
+
chunk_hzb_footprint_y.add(HZBFootprint.Two, CodeChunk.from(
|
|
18
|
+
//language=WGSL
|
|
19
|
+
`
|
|
20
|
+
const HZB_FOOTPRINT_Y: i32 = 2;
|
|
21
|
+
`));
|
|
22
|
+
|
|
23
|
+
chunk_hzb_footprint_y.add(HZBFootprint.Three, CodeChunk.from(
|
|
24
|
+
//language=WGSL
|
|
25
|
+
`
|
|
26
|
+
const HZB_FOOTPRINT_Y: i32 = 3;
|
|
27
|
+
`));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The widest footprint, in source texels along one axis, of any HZB texel when `output_size` texels cover
|
|
3
|
+
* `source_size`: HZB texel `i` covers `[i·s/o, (i+1)·s/o)` and reduces every source texel that span
|
|
4
|
+
* touches, clipped to the source.
|
|
5
|
+
*
|
|
6
|
+
* An upper bound on the footprints {@link shader_hzb_reduce_mip0} reads, whose bounds are this span
|
|
7
|
+
* nudged inward by a float epsilon.
|
|
8
|
+
*
|
|
9
|
+
* @param {number} source_size source texels on the axis
|
|
10
|
+
* @param {number} output_size HZB mip 0 texels on the axis
|
|
11
|
+
* @returns {number}
|
|
12
|
+
*/
|
|
13
|
+
export function hzb_footprint_texels(source_size: number, output_size: number): number;
|
|
14
|
+
//# sourceMappingURL=hzb_footprint_texels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hzb_footprint_texels.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/hzb_footprint_texels.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,kDAJW,MAAM,eACN,MAAM,GACJ,MAAM,CAqBlB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The widest footprint, in source texels along one axis, of any HZB texel when `output_size` texels cover
|
|
5
|
+
* `source_size`: HZB texel `i` covers `[i·s/o, (i+1)·s/o)` and reduces every source texel that span
|
|
6
|
+
* touches, clipped to the source.
|
|
7
|
+
*
|
|
8
|
+
* An upper bound on the footprints {@link shader_hzb_reduce_mip0} reads, whose bounds are this span
|
|
9
|
+
* nudged inward by a float epsilon.
|
|
10
|
+
*
|
|
11
|
+
* @param {number} source_size source texels on the axis
|
|
12
|
+
* @param {number} output_size HZB mip 0 texels on the axis
|
|
13
|
+
* @returns {number}
|
|
14
|
+
*/
|
|
15
|
+
export function hzb_footprint_texels(source_size, output_size) {
|
|
16
|
+
assert.isNonNegativeInteger(source_size, 'source_size');
|
|
17
|
+
assert.isNonNegativeInteger(output_size, 'output_size');
|
|
18
|
+
assert.greaterThan(output_size, 0, 'output_size');
|
|
19
|
+
|
|
20
|
+
let widest = 0;
|
|
21
|
+
|
|
22
|
+
for (let i = 0; i < output_size; i++) {
|
|
23
|
+
const first = Math.floor(i * source_size / output_size);
|
|
24
|
+
const end = Math.min(Math.ceil((i + 1) * source_size / output_size), source_size);
|
|
25
|
+
|
|
26
|
+
const width = end - first;
|
|
27
|
+
|
|
28
|
+
if (width > widest) {
|
|
29
|
+
widest = width;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return widest;
|
|
34
|
+
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Initial reduction pass, works with non-power-of-two resolutions as input
|
|
3
|
-
* @type {ComputeShader}
|
|
4
|
-
*/
|
|
5
|
-
export const shader_hzb_reduce_mip0: ComputeShader;
|
|
6
1
|
/**
|
|
7
2
|
* Mip1+ reduction pass, works with non-power-of-two resolutions as input
|
|
8
3
|
* @type {ComputeShader}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_hzb_reduce_any.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/shader_hzb_reduce_any.js"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"shader_hzb_reduce_any.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/shader_hzb_reduce_any.js"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,oCAFU,aAAa,CAcpB;8BAnC2B,4BAA4B"}
|
|
@@ -1,57 +1,37 @@
|
|
|
1
|
-
import { vec2f, vec2u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { generate_downsampler_code } from "./generate_downsampler_code.js";
|
|
5
|
-
|
|
6
|
-
import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
|
|
7
|
-
|
|
8
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
-
|
|
10
|
-
// per-pass, eight bytes, read-only: immediate data rather than a uniform buffer. The reduction
|
|
11
|
-
// walks the mip chain a pass at a time and every pass wants a different resolution, which used to
|
|
12
|
-
// mean a persistent table of them bound at a per-mip dynamic offset.
|
|
13
|
-
resources.setImmediate("output_resolution", vec2u);
|
|
14
|
-
|
|
15
|
-
resources.createGroup()
|
|
16
|
-
.addTexture("tInput", "unfilterable-float")
|
|
17
|
-
.addStorageTexture("tOutput", HZB_TEXTURE_FORMAT, "2d", "write-only")
|
|
18
|
-
;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
* @type {ComputeShader}
|
|
24
|
-
*/
|
|
25
|
-
export const
|
|
26
|
-
label: 'HZB / reduce
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
output.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Mip1+ reduction pass, works with non-power-of-two resolutions as input
|
|
43
|
-
* @type {ComputeShader}
|
|
44
|
-
*/
|
|
45
|
-
export const shader_hzb_reduce_any = ComputeShader.from({
|
|
46
|
-
label: 'HZB / reduce any resolution',
|
|
47
|
-
body: generate_downsampler_code({
|
|
48
|
-
type: vec2f,
|
|
49
|
-
initial_value: 'vec2( 1.0, 0.0 )',
|
|
50
|
-
//language=WGSL
|
|
51
|
-
reduction_code: `
|
|
52
|
-
output.x = min(texel.x, output.x);
|
|
53
|
-
output.y = max(texel.y, output.y);
|
|
54
|
-
`,
|
|
55
|
-
}),
|
|
56
|
-
resources,
|
|
57
|
-
});
|
|
1
|
+
import { vec2f, vec2u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
3
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
+
import { generate_downsampler_code } from "./generate_downsampler_code.js";
|
|
5
|
+
|
|
6
|
+
import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
|
|
7
|
+
|
|
8
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
+
|
|
10
|
+
// per-pass, eight bytes, read-only: immediate data rather than a uniform buffer. The reduction
|
|
11
|
+
// walks the mip chain a pass at a time and every pass wants a different resolution, which used to
|
|
12
|
+
// mean a persistent table of them bound at a per-mip dynamic offset.
|
|
13
|
+
resources.setImmediate("output_resolution", vec2u);
|
|
14
|
+
|
|
15
|
+
resources.createGroup()
|
|
16
|
+
.addTexture("tInput", "unfilterable-float")
|
|
17
|
+
.addStorageTexture("tOutput", HZB_TEXTURE_FORMAT, "2d", "write-only")
|
|
18
|
+
;
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Mip1+ reduction pass, works with non-power-of-two resolutions as input
|
|
23
|
+
* @type {ComputeShader}
|
|
24
|
+
*/
|
|
25
|
+
export const shader_hzb_reduce_any = ComputeShader.from({
|
|
26
|
+
label: 'HZB / reduce any resolution',
|
|
27
|
+
body: generate_downsampler_code({
|
|
28
|
+
type: vec2f,
|
|
29
|
+
initial_value: 'vec2( 1.0, 0.0 )',
|
|
30
|
+
//language=WGSL
|
|
31
|
+
reduction_code: `
|
|
32
|
+
output.x = min(texel.x, output.x);
|
|
33
|
+
output.y = max(texel.y, output.y);
|
|
34
|
+
`,
|
|
35
|
+
}),
|
|
36
|
+
resources,
|
|
37
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First reduction: depth of a region of the source (`settings.clip_region`) into the HZB's mip 0, min in
|
|
3
|
+
* R and max in G. The region is the whole viewport for a camera, and a slot of the atlas for a shadow
|
|
4
|
+
* map. Each HZB texel reduces every source texel its area overlaps, a footprint of
|
|
5
|
+
* {@link HZB_FOOTPRINT_X} by {@link HZB_FOOTPRINT_Y} texels at most.
|
|
6
|
+
*
|
|
7
|
+
* @type {ComputeShader}
|
|
8
|
+
*/
|
|
9
|
+
export const shader_hzb_reduce_mip0: ComputeShader;
|
|
10
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
11
|
+
//# sourceMappingURL=shader_hzb_reduce_mip0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_hzb_reduce_mip0.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/shader_hzb_reduce_mip0.js"],"names":[],"mappings":"AA2GA;;;;;;;GAOG;AACH,qCAFU,aAAa,CAMpB;8BApH2B,4BAA4B"}
|
|
@@ -1,111 +1,120 @@
|
|
|
1
|
-
import { vec2u, vec4u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
3
|
-
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
4
|
-
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
5
|
-
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
resources
|
|
25
|
-
|
|
26
|
-
resources.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
let
|
|
47
|
-
let
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
// Output Px
|
|
70
|
-
// Floor(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
let
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
// 5.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
1
|
+
import { vec2u, vec4u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
3
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
4
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
5
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
6
|
+
import { chunk_hzb_footprint_x } from "./chunk_hzb_footprint_x.js";
|
|
7
|
+
import { chunk_hzb_footprint_y } from "./chunk_hzb_footprint_y.js";
|
|
8
|
+
import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Per-pass, 24 bytes, read-only.
|
|
12
|
+
*
|
|
13
|
+
* `clip_region` and `output_resolution` were two uniforms, so two buffers per pass. WGSL allows one
|
|
14
|
+
* immediate per entry point, so carrying them as immediate data means carrying them together.
|
|
15
|
+
*
|
|
16
|
+
* @type {WebGPUStruct}
|
|
17
|
+
*/
|
|
18
|
+
const HZB_CLIP_SETTINGS = WebGPUStruct.from({
|
|
19
|
+
// x, y, width, height
|
|
20
|
+
clip_region: vec4u,
|
|
21
|
+
output_resolution: vec2u,
|
|
22
|
+
}, 'HzbClipSettings');
|
|
23
|
+
|
|
24
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
25
|
+
|
|
26
|
+
resources.setImmediate("settings", HZB_CLIP_SETTINGS);
|
|
27
|
+
|
|
28
|
+
resources.createGroup()
|
|
29
|
+
.addTexture("tInput", "unfilterable-float")
|
|
30
|
+
.addStorageTexture("tOutput", HZB_TEXTURE_FORMAT, "2d", "write-only")
|
|
31
|
+
;
|
|
32
|
+
|
|
33
|
+
const body = CodeChunk.from(
|
|
34
|
+
//language=WGSL
|
|
35
|
+
`
|
|
36
|
+
@compute @workgroup_size(16, 16)
|
|
37
|
+
fn main(
|
|
38
|
+
@builtin(global_invocation_id) global_id: vec3<u32>,
|
|
39
|
+
) {
|
|
40
|
+
if (any(global_id.xy >= settings.output_resolution)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 1. Calculate the UV bounds of the current *output* pixel.
|
|
45
|
+
// We use the output resolution to determine how wide one pixel is in UV space.
|
|
46
|
+
let output_resolution_f = vec2<f32>(settings.output_resolution);
|
|
47
|
+
let uv = (vec2<f32>(global_id.xy) + 0.5) / output_resolution_f;
|
|
48
|
+
let output_pixel_size2 = 0.5 / output_resolution_f;
|
|
49
|
+
let uv_min = uv - output_pixel_size2;
|
|
50
|
+
let uv_max = uv + output_pixel_size2;
|
|
51
|
+
|
|
52
|
+
// minor epsilon to avoid float rounding errors
|
|
53
|
+
const EPSILON = 1e-6;
|
|
54
|
+
|
|
55
|
+
// Nudge the bounds slightly inward to absorb floating-point drift
|
|
56
|
+
let safe_uv_min = uv_min + EPSILON;
|
|
57
|
+
let safe_uv_max = uv_max - EPSILON;
|
|
58
|
+
|
|
59
|
+
// 2. Convert UV bounds to Source Texel coordinates (float).
|
|
60
|
+
// We map the 0..1 UVs to the size of the source clip region.
|
|
61
|
+
let source_size = vec2<f32>(settings.clip_region.zw);
|
|
62
|
+
let texel_min_f = safe_uv_min * source_size;
|
|
63
|
+
let texel_max_f = safe_uv_max * source_size;
|
|
64
|
+
|
|
65
|
+
// 3. Convert to Integer Bounds.
|
|
66
|
+
// Floor the min to find the first pixel.
|
|
67
|
+
// Ceil the max to find the exclusive upper bound.
|
|
68
|
+
// Example (5px -> 2px):
|
|
69
|
+
// Output Px 0 covers UV 0.0-0.5 -> Source 0.0 to 2.5
|
|
70
|
+
// Floor(0.0) = 0. Ceil(2.5) = 3. Pixels 0, 1, 2. (Pixel 2 is partially covered)
|
|
71
|
+
// Output Px 1 covers UV 0.5-1.0 -> Source 2.5 to 5.0
|
|
72
|
+
// Floor(2.5) = 2. Ceil(5.0) = 5. Pixels 2, 3, 4. (Pixel 2 is partially covered again)
|
|
73
|
+
let bound_min = vec2<i32>(floor(texel_min_f));
|
|
74
|
+
let bound_max = vec2<i32>(ceil(texel_max_f));
|
|
75
|
+
|
|
76
|
+
// 4. Clamp bounds to the clip region size to be safe.
|
|
77
|
+
let limit = vec2<i32>(settings.clip_region.zw);
|
|
78
|
+
|
|
79
|
+
let start = max(bound_min, vec2<i32>(0)) + vec2<i32>(settings.clip_region.xy);
|
|
80
|
+
let end = min(bound_max, limit) + vec2<i32>(settings.clip_region.xy);
|
|
81
|
+
|
|
82
|
+
// 5. Read the footprint, HZB_FOOTPRINT_X by HZB_FOOTPRINT_Y texels: the widest footprint of this
|
|
83
|
+
// dispatch on each axis. A narrower one repeats its last texel, which min/max ignores.
|
|
84
|
+
let last = end - vec2<i32>(1);
|
|
85
|
+
|
|
86
|
+
var output = vec2<f32>(1.0, 0.0); // Initialize min/max
|
|
87
|
+
|
|
88
|
+
for (var j = 0; j < HZB_FOOTPRINT_Y; j++) {
|
|
89
|
+
for (var i = 0; i < HZB_FOOTPRINT_X; i++) {
|
|
90
|
+
|
|
91
|
+
let load_coord = min(start + vec2<i32>(i, j), last);
|
|
92
|
+
|
|
93
|
+
let v = textureLoad(tInput, load_coord, 0).r;
|
|
94
|
+
|
|
95
|
+
output.x = min(output.x, v);
|
|
96
|
+
output.y = max(output.y, v);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
textureStore(tOutput, vec2<i32>(global_id.xy), vec4<f32>(output, 0.0, 0.0));
|
|
101
|
+
}
|
|
102
|
+
`, [
|
|
103
|
+
chunk_hzb_footprint_x,
|
|
104
|
+
chunk_hzb_footprint_y,
|
|
105
|
+
]
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* First reduction: depth of a region of the source (`settings.clip_region`) into the HZB's mip 0, min in
|
|
110
|
+
* R and max in G. The region is the whole viewport for a camera, and a slot of the atlas for a shadow
|
|
111
|
+
* map. Each HZB texel reduces every source texel its area overlaps, a footprint of
|
|
112
|
+
* {@link HZB_FOOTPRINT_X} by {@link HZB_FOOTPRINT_Y} texels at most.
|
|
113
|
+
*
|
|
114
|
+
* @type {ComputeShader}
|
|
115
|
+
*/
|
|
116
|
+
export const shader_hzb_reduce_mip0 = ComputeShader.from({
|
|
117
|
+
label: 'HZB / reduce mip0',
|
|
118
|
+
resources,
|
|
119
|
+
body,
|
|
120
|
+
});
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#302@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -9,6 +9,13 @@ export class GPUMaterialManager {
|
|
|
9
9
|
* @param {GPUSamplerManager} [samplers] required by templates that bind shared samplers — terrain's
|
|
10
10
|
*/
|
|
11
11
|
constructor(device: GPUDevice, textures: TextureManager, render_pipelines: RenderPipelineManager, bindings: BindGroupManager, virtual_textures?: VirtualTextureManager, samplers?: GPUSamplerManager);
|
|
12
|
+
/**
|
|
13
|
+
* Sent with a material when {@link update} restages its row because its {@link ShadeMaterial#version}
|
|
14
|
+
* moved: what the scene's material table and the material's uniform hold changes with this frame.
|
|
15
|
+
* Not sent for a material's first row, which {@link obtain} writes.
|
|
16
|
+
* @type {Signal<ShadeMaterial>}
|
|
17
|
+
*/
|
|
18
|
+
onMaterialRestaged: any;
|
|
12
19
|
/**
|
|
13
20
|
*
|
|
14
21
|
* @type {Map<ShadeMaterial, GPUMaterialContext>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AA4NA;IA4FI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAiD3B;IAlJD;;;;;OAKG;IACH,wBAAkC;IAOlC;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAyBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IAsLD;;;;;;;;OAQG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,gBAAgB,EAAhC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAiMnF;IAED;;;;OAIG;IACH,iBAHW,aAAa,GACX,kBAAkB,CAqB9B;IAED;;;;;;;;;;;;OAYG;IACH,kBAHW,aAAa,GACX,OAAO,CAyBnB;IAED;;;;OAIG;IACH,gBAaC;IAED;;;;;;;OAOG;IACH,0BAFW,eAAe,QAazB;IAED;;;;;;;;;;;OAWG;IACH,kBAHW,qBAAqB,GACnB,QAAQ,IAAI,CAAC,CAMzB;IAsBD;;;;;;OAMG;IACH,0BAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IACH,wBAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAuED;;;OAGG;IACH,YAFW,sBAAsB,QAmChC;;CAEJ;8BAr4BY,OAAO,0CAA0C,EAAE,eAAe;6BAClE,OAAO,2BAA2B,EAAE,cAAc;yBAIlD,OAAO,2DAA2D,EAAE,UAAU;qCAC9E,OAAO,wCAAwC,EAAE,sBAAsB;oCACvE,OAAO,gDAAgD,EAAE,qBAAqB;+BAC9E,OAAO,gCAAgC,EAAE,gBAAgB;gCACzD,OAAO,yBAAyB,EAAE,iBAAiB;6BACnD,OAAO,8BAA8B,EAAE,cAAc;oCACrD,OAAO,6CAA6C,EAAE,qBAAqB;4BAC3E,OAAO,oBAAoB,EAAE,aAAa;oCAC1C,OAAO,qCAAqC,EAAE,qBAAqB;mCAtBzE,yBAAyB;mCAjBG,8CAA8C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import Signal from "../../../core/events/signal/Signal.js";
|
|
2
3
|
import { BindGroupLayoutDescriptor } from "../../descriptor/binding/BindGroupLayoutDescriptor.js";
|
|
3
4
|
import { BufferBindingLayout } from "../../descriptor/binding/BufferBindingLayout.js";
|
|
4
5
|
import { GPUShaderStage } from "../../descriptor/GPUShaderStage.js";
|
|
@@ -219,6 +220,14 @@ const material_buffer_pipeline_descriptor = RenderPipelineDescriptor.from({
|
|
|
219
220
|
|
|
220
221
|
export class GPUMaterialManager {
|
|
221
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Sent with a material when {@link update} restages its row because its {@link ShadeMaterial#version}
|
|
225
|
+
* moved: what the scene's material table and the material's uniform hold changes with this frame.
|
|
226
|
+
* Not sent for a material's first row, which {@link obtain} writes.
|
|
227
|
+
* @type {Signal<ShadeMaterial>}
|
|
228
|
+
*/
|
|
229
|
+
onMaterialRestaged = new Signal();
|
|
230
|
+
|
|
222
231
|
/**
|
|
223
232
|
* @type {GPUDevice}
|
|
224
233
|
*/
|
|
@@ -906,6 +915,8 @@ export class GPUMaterialManager {
|
|
|
906
915
|
const row = this.#stage_metadata(material_ctx);
|
|
907
916
|
|
|
908
917
|
material_ctx.write_uniform(queue, row);
|
|
918
|
+
|
|
919
|
+
this.onMaterialRestaged.send1(material_ctx.source);
|
|
909
920
|
}
|
|
910
921
|
}
|
|
911
922
|
|
|
@@ -5,12 +5,6 @@ export class GPUResidentMaterialContext {
|
|
|
5
5
|
* @param {GraphicsContext} graphics
|
|
6
6
|
*/
|
|
7
7
|
constructor(device: GPUDevice, graphics: GraphicsContext);
|
|
8
|
-
/**
|
|
9
|
-
* Sent with a material when it is repacked because its {@link ShadeMaterial#version} moved: the
|
|
10
|
-
* row the device reads changes with the next {@link update}. Not sent for a material's first pack.
|
|
11
|
-
* @type {Signal<ShadeMaterial>}
|
|
12
|
-
*/
|
|
13
|
-
onMaterialRepacked: any;
|
|
14
8
|
/**
|
|
15
9
|
*
|
|
16
10
|
* @returns {number}
|
|
@@ -26,10 +20,6 @@ export class GPUResidentMaterialContext {
|
|
|
26
20
|
* @returns {GPUTextureContext}
|
|
27
21
|
*/
|
|
28
22
|
get buffer_textures(): GPUTextureContext;
|
|
29
|
-
/**
|
|
30
|
-
* @returns {GPUBuffer}
|
|
31
|
-
*/
|
|
32
|
-
get buffer_texture_means(): GPUBuffer;
|
|
33
23
|
/**
|
|
34
24
|
*
|
|
35
25
|
* @returns {GPUTextureView}
|
|
@@ -54,8 +44,8 @@ export class GPUResidentMaterialContext {
|
|
|
54
44
|
* Make a material resident, or repack it if its {@link ShadeMaterial#version} has moved since —
|
|
55
45
|
* the same contract {@link GPUMaterialManager} restages by. A hit used to be final, so a factor
|
|
56
46
|
* set after the first pack never reached the row. Every caller re-obtains what it needs before
|
|
57
|
-
* {@link update}: the scene's drawn list,
|
|
58
|
-
* moves, so the check rides on walks that already happen.
|
|
47
|
+
* {@link update} or {@link commit}: the scene's drawn list, the manager's materials whenever its
|
|
48
|
+
* version moves, or what a card capture traces, so the check rides on walks that already happen.
|
|
59
49
|
*
|
|
60
50
|
* @param {ShadeMaterial} material
|
|
61
51
|
* @returns {MaterialInfo}
|
|
@@ -75,6 +65,16 @@ export class GPUResidentMaterialContext {
|
|
|
75
65
|
* @param {GPUSceneContext} scene_context
|
|
76
66
|
*/
|
|
77
67
|
ensure_scene_materials(scene_context: GPUSceneContext): void;
|
|
68
|
+
/**
|
|
69
|
+
* Write what {@link obtain_material} made resident or repacked since the last commit, and the media
|
|
70
|
+
* that moved. Takes none of the manager's materials, unlike {@link update}: for a reader that makes
|
|
71
|
+
* resident only what it reads.
|
|
72
|
+
*/
|
|
73
|
+
commit(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Make every material the manager holds resident, then {@link commit}: for the readers that trace
|
|
76
|
+
* the whole scene.
|
|
77
|
+
*/
|
|
78
78
|
update(): void;
|
|
79
79
|
destroy(): void;
|
|
80
80
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUResidentMaterialContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/GPUResidentMaterialContext.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUResidentMaterialContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/GPUResidentMaterialContext.js"],"names":[],"mappings":"AAgIA;IAqKI;;;;OAIG;IACH,yCAFW,eAAe,EAkDzB;IA9LD;;;OAGG;IACH,6BAEC;IAQD;;;OAGG;IACH,kCAEC;IAQD;;;OAGG;IACH,yCAEC;IAED;;;OAGG;IACH,kCAIC;IAmED;;;;;OAKG;IACH,0BAEC;IAOD;;;;;;OAMG;IACH,8BAEC;IAsJD;;;;;;;;;OASG;IACH,0BAHW,aAAa,GACX,YAAY,CAmBxB;IAgBD;;;;OAIG;IACH,wBAHW,YAAY,GACV,WAAW,CAIvB;IAGD,uBA0DC;IAuFD,wBA8EC;IAED;;;;OAIG;IACH,sCAFW,eAAe,QAUzB;IAoCD;;;;OAIG;IACH,eAGC;IAED;;;OAGG;IACH,eAGC;IAGD,gBAIC;;CACJ;8BA9vBY,OAAO,0BAA0B,EAAE,eAAe;8BAClD,OAAO,gCAAgC,EAAE,eAAe;2BACxD,OAAO,+BAA+B,EAAE,YAAY;4BACpD,OAAO,qBAAqB,EAAE,aAAa;oCAC3C,OAAO,6BAA6B,EAAE,qBAAqB;kCAC3D,OAAO,qCAAqC,EAAE,mBAAmB;kCAlB5C,oCAAoC;AAYtE;;;;;;;GAOG;AAEH;IACI,WAAM;IAEN;;;OAGG;IACH,SAFU,MAAM,CAEJ;IAEZ;;OAEG;IACH,QAFU,qBAAqB,CAExB;IAEP;;OAEG;IACH,gBAFU,WAAW,CAEP;IAEd;;OAEG;IACH,aAFU,WAAW,CAEV;IAEX;;;;OAIG;IACH,gBAFU,WAAW,GAAC,IAAI,CAEZ;IACd;;OAEG;IACH,kBAFU,WAAW,CAEL;IAEhB;;;OAGG;IACH,aAFU,MAAM,CAEe;CAClC;AAqBD;IACI,WAAO;IAEP;;OAEG;IACH,QAFU,YAAY,CAEf;CACV"}
|