@woosh/meep-engine 3.57.0 → 3.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/ecs/component/editors/ColorEditor.js +2 -2
- package/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +452 -48
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/tools/GridPaintTool.js +2 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +2 -2
- package/editor/view/node-graph/NodeGraphView.d.ts +0 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +0 -2
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/core/bvh8/build/NodeProxy.js +2 -2
- package/src/core/bvh8/build/aabb3_compute_merge_cost.js +4 -4
- package/src/core/bvh8/build/bvh8_build_for_geometry.js +2 -2
- package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.d.ts +1 -1
- package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.js +1 -1
- package/src/core/geom/2d/triangle/tri2_intersects_aabb2.d.ts +17 -0
- package/src/core/geom/2d/triangle/tri2_intersects_aabb2.d.ts.map +1 -0
- package/src/core/geom/2d/triangle/tri2_intersects_aabb2.js +64 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_barycentric.d.ts +23 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_barycentric.d.ts.map +1 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_barycentric.js +81 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts.map +1 -1
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.js +36 -99
- package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts +0 -11
- package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_build_frustum.js +15 -20
- package/src/core/geom/3d/box/box3_raycast.d.ts +1 -1
- package/src/core/geom/3d/box/box3_raycast.js +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +1 -1
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +3 -3
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +3 -3
- package/src/core/geom/3d/shape/HeightMapShape3D.js +2 -2
- package/src/core/geom/3d/shape/MeshShape3D.d.ts +2 -2
- package/src/core/geom/3d/shape/MeshShape3D.js +2 -2
- package/src/core/geom/3d/shape/PosedShape3D.js +2 -2
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.js +0 -4
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.js +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.d.ts +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +2 -2
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +2 -2
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts +0 -14
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +0 -5
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +151 -151
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_collapse_fold_limit.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.d.ts +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.js +1 -2
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts +0 -8
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.js +25 -36
- package/src/core/geom/clipmap/ClipmapCascadePlacement.d.ts +137 -0
- package/src/core/geom/clipmap/ClipmapCascadePlacement.d.ts.map +1 -0
- package/src/core/geom/clipmap/ClipmapCascadePlacement.js +350 -0
- package/src/core/geom/polyline/polyline_simplify_by_error.d.ts +16 -0
- package/src/core/geom/polyline/polyline_simplify_by_error.d.ts.map +1 -0
- package/src/core/geom/polyline/polyline_simplify_by_error.js +52 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply.js +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +2 -2
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +2 -2
- package/src/core/geom/vec3/v3_triple_cross.d.ts +1 -1
- package/src/core/geom/vec3/v3_triple_cross.js +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/asset/preloader/AssetPreloader.d.ts +0 -5
- package/src/engine/asset/preloader/AssetPreloader.d.ts.map +1 -1
- package/src/engine/asset/preloader/AssetPreloader.js +0 -6
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +25 -12
- package/src/engine/graphics/ecs/decal/v2/Decal.d.ts +2 -2
- package/src/engine/graphics/ecs/decal/v2/Decal.js +2 -2
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +420 -418
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +10 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +159 -28
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/path/tube/build/makeTubeStream.js +2 -2
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts +12 -0
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.js +29 -2
- package/src/engine/graphics/texture/sprite/prototypeSpriteCutoutGeometry.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +2 -1
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +7 -5
- package/src/engine/graphics3/Trail3DSystem.d.ts +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +1 -1
- package/src/engine/graphics3/WaterSystem.d.ts +60 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +733 -300
- package/src/engine/graphics3/make_default_environment.d.ts.map +1 -1
- package/src/engine/graphics3/make_default_environment.js +2 -4
- package/src/engine/graphics3/prefab/prefab_place.js +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/navigation/mesh/build/clip_soup_against_overhangs.js +628 -628
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +1 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts +0 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.js +0 -6
- package/src/engine/sound/simulation/render/reverb_band_tails.d.ts +1 -1
- package/src/engine/sound/simulation/render/reverb_band_tails.js +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +1 -1
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +86 -0
- package/src/generation/foliage/FOLIAGE_DESIGN.md +110 -32
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +521 -0
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +86 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +347 -0
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/crown_opacity_measure.d.ts.map +1 -1
- package/src/generation/foliage/analysis/crown_opacity_measure.js +80 -102
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts.map +1 -1
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.js +1 -7
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +3 -2
- package/src/generation/foliage/analysis/tree_leaf_area_targets.d.ts +66 -0
- package/src/generation/foliage/analysis/tree_leaf_area_targets.d.ts.map +1 -0
- package/src/generation/foliage/analysis/tree_leaf_area_targets.js +95 -0
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +90 -0
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -0
- package/src/generation/foliage/analysis/tree_render_cost.js +158 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts +24 -6
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +29 -6
- package/src/generation/foliage/asset/TreeLODAsset.d.ts +24 -11
- package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeLODAsset.js +49 -20
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +21 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +123 -21
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +73 -0
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_lod_plan.js +117 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/BranchGeneratorConfig.d.ts +0 -10
- package/src/generation/foliage/config/BranchGeneratorConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/BranchGeneratorConfig.js +1 -23
- package/src/generation/foliage/config/ShootGrowthConfig.d.ts +45 -10
- package/src/generation/foliage/config/ShootGrowthConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/ShootGrowthConfig.js +70 -16
- package/src/generation/foliage/config/ShootSystemRule.d.ts +12 -12
- package/src/generation/foliage/config/ShootSystemRule.d.ts.map +1 -1
- package/src/generation/foliage/config/ShootSystemRule.js +24 -20
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +20 -37
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +30 -116
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +2 -1
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeSpeciesConfig.js +2 -7
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts +6 -4
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -1
- package/src/generation/foliage/material/foliage_atlas_cutout.js +32 -27
- package/src/generation/foliage/material/foliage_material_from_samplers.d.ts +13 -0
- package/src/generation/foliage/material/foliage_material_from_samplers.d.ts.map +1 -0
- package/src/generation/foliage/material/foliage_material_from_samplers.js +69 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +19 -0
- package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -1
- package/src/generation/foliage/material/foliage_tile.js +9 -1
- package/src/generation/foliage/material/leaf_geometry.d.ts +7 -0
- package/src/generation/foliage/material/leaf_geometry.d.ts.map +1 -1
- package/src/generation/foliage/material/leaf_geometry.js +21 -9
- package/src/generation/foliage/material/make_foliage_material.d.ts +2 -3
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_foliage_material.js +3 -57
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/material/tree_cluster_atlas_pack.d.ts +14 -0
- package/src/generation/foliage/material/tree_cluster_atlas_pack.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas_pack.js +28 -0
- package/src/generation/foliage/material/tree_cluster_bake.d.ts +74 -0
- package/src/generation/foliage/material/tree_cluster_bake.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_bake.js +415 -0
- package/src/generation/foliage/material/tree_cluster_press.d.ts +18 -0
- package/src/generation/foliage/material/tree_cluster_press.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_press.js +83 -0
- package/src/generation/foliage/material/tree_cluster_tiles.d.ts +46 -0
- package/src/generation/foliage/material/tree_cluster_tiles.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_tiles.js +75 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +22 -4
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +28 -16
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_cards.d.ts +61 -0
- package/src/generation/foliage/mesh/tree_cluster_cards.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_cluster_cards.js +114 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +122 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +354 -0
- package/src/generation/foliage/mesh/tree_clusters.d.ts +92 -0
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_clusters.js +187 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +609 -226
- package/src/generation/foliage/mesh/tree_mesh_build_clusters.d.ts +25 -0
- package/src/generation/foliage/mesh/tree_mesh_build_clusters.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_clusters.js +144 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +7 -10
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +13 -39
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +235 -209
- package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts +5 -2
- package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootFrameworkHash.js +13 -8
- package/src/generation/foliage/skeleton/ShootGirth.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootGirth.js +6 -5
- package/src/generation/foliage/skeleton/ShootLightField.d.ts +9 -0
- package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootLightField.js +25 -0
- package/src/generation/foliage/skeleton/ShootWoodHash.d.ts +89 -0
- package/src/generation/foliage/skeleton/ShootWoodHash.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/ShootWoodHash.js +195 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +25 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +50 -0
- package/src/generation/foliage/skeleton/shoot_demography.d.ts +17 -4
- package/src/generation/foliage/skeleton/shoot_demography.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/shoot_demography.js +22 -6
- package/src/generation/foliage/skeleton/shoot_geometry.d.ts +5 -6
- package/src/generation/foliage/skeleton/shoot_geometry.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/shoot_geometry.js +29 -12
- package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts +43 -4
- package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/shoot_systems_simulate.js +537 -70
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +30 -5
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +46 -10
- package/src/generation/foliage/skeleton/tree_skeleton_bind_skin_joints.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_bind_skin_joints.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_bind_skin_joints.js +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2033
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +14 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +74 -7
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +6 -6
- package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/additive_blending/main.js +529 -529
- package/src/shade/playground/avboit/main.js +1 -1
- package/src/shade/playground/basis_textures/main.js +365 -365
- package/src/shade/playground/caldera/main.js +1 -1
- package/src/shade/playground/contact_shadows/main.js +1 -1
- package/src/shade/playground/foliage_wind/main.js +289 -289
- package/src/shade/playground/mesh_row_ceiling/main.js +1 -1
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_ecs/main.js +1 -1
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/main.js +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/playground/sh_exponential/main.js +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +1 -1
- package/src/shade/playground/ssr_motion/main.js +1 -1
- package/src/shade/playground/ssr_reprojection/main.js +1 -1
- package/src/shade/playground/tonemap_sdr/main.js +1 -1
- package/src/shade/playground/vgeo_runtime/main.js +1 -1
- package/src/shade/playground/vgeo_scene/main.js +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +1 -1
- package/src/shade/playground/vsm/index.html +4 -1
- package/src/shade/playground/vsm/main.d.ts.map +1 -1
- package/src/shade/playground/vsm/main.js +8 -5
- package/src/shade/playground/water_refraction/main.js +1 -1
- package/src/shade/playground/water_surface/main.js +1 -1
- package/src/shade/renderer/Renderer.d.ts +16 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +225 -40
- package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
- package/src/shade/renderer/ShadeIndirectLightingMode.js +6 -0
- package/src/shade/renderer/camera/orbital/README.md +3 -6
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +1 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/FluidCascadePlacement.d.ts +8 -105
- package/src/shade/renderer/fluid/FluidCascadePlacement.d.ts.map +1 -1
- package/src/shade/renderer/fluid/FluidCascadePlacement.js +13 -306
- 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/forcing/shader_fluid_forcing_command.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_command.js +8 -14
- 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/BoxGeometry.d.ts +0 -1
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +0 -9
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts +4 -2
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +13 -2
- package/src/shade/renderer/geometry/Geometry.js +2 -2
- package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/blas_from_meshlets.js +12 -2
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -0
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +5 -0
- package/src/shade/renderer/geometry/mesh_compute_surface_area.js +4 -4
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +5 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +15 -0
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +35 -26
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js +2 -1
- package/src/shade/renderer/geometry/normals/decode_octahedral_u32_to_normal.d.ts +13 -0
- package/src/shade/renderer/geometry/normals/decode_octahedral_u32_to_normal.d.ts.map +1 -0
- package/src/shade/renderer/geometry/normals/decode_octahedral_u32_to_normal.js +33 -0
- package/src/shade/renderer/geometry/normals/geometry_build_tangents.js +7 -7
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +189 -45
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1853 -144
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts +60 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF.js +62 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_RESOURCES.d.ts +29 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_RESOURCES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_RESOURCES.js +41 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts +12 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js +53 -0
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts +79 -0
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.js +168 -0
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts +75 -0
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js +110 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts +48 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js +146 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts +31 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +136 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts +29 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +146 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.js +77 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js +84 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js +72 -0
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +171 -0
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +884 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts +82 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.js +127 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts +24 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.js +29 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts +12 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.js +31 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts +29 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.js +179 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.js +107 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +36 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +237 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.js +61 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +102 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.js +65 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts +22 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.js +136 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts +20 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js +104 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts +30 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js +146 -0
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts +35 -0
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +161 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts +21 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js +112 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_normal.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_normal.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_normal.js +34 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_raymarch.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_raymarch.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_raymarch.js +64 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_sample.d.ts +32 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_sample.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_sample.js +104 -0
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts +2 -0
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +13 -23
- package/src/shade/renderer/geometry/util/geometry_compute_surface_area.js +2 -2
- package/src/shade/renderer/geometry/util/geometry_estimate_uv_aspect.js +2 -2
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_ao.js +2 -2
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +2 -2
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +0 -2
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +3 -13
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts +10 -16
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +39 -82
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +136 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +487 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +3505 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +83 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +626 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +265 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +475 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +189 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_MOVERS.d.ts +37 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_MOVERS.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_MOVERS.js +48 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +239 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +993 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +69 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +169 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +191 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +590 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +35 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +35 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +124 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +94 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +73 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +35 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +238 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts +10 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js +44 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_coarse.d.ts +24 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_coarse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_coarse.js +92 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers.js +146 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts +18 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.js +84 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_requeue.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_requeue.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_requeue.js +67 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.js +128 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +127 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +79 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts +11 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.js +160 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts +34 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.js +189 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.d.ts +25 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +184 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1124 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +223 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +297 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +244 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +493 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +41 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +34 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +284 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +37 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +176 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_fill.d.ts +10 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_fill.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_fill.js +39 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +177 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts +18 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.js +105 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts +25 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +124 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +118 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +25 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +145 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +33 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +196 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +88 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +98 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.js +31 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/chunk_slot_stack.d.ts +33 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/chunk_slot_stack.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/chunk_slot_stack.js +58 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_fill.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_fill.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_fill.js +62 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_push_range.d.ts +21 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_push_range.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_push_range.js +61 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +12 -11
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +117 -120
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts +1 -2
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.js +44 -45
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/lightmap/atlas/rescale_uvs.js +2 -2
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +5 -5
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +10 -4
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +112 -8
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +21 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +30 -0
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +24 -0
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +1 -0
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +120 -0
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +53 -15
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -3
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -38
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +5 -6
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +5 -7
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +3 -2
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +3 -2
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup.js +316 -318
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +3 -2
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +2 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +1 -1
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +75 -78
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +0 -5
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +377 -382
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +17 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +38 -2
- package/src/shade/renderer/scene/MESH_INSTANCE_METADATA_STRUCT.d.ts +17 -0
- package/src/shade/renderer/scene/MESH_INSTANCE_METADATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/scene/MESH_INSTANCE_METADATA_STRUCT.js +27 -0
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +4 -6
- package/src/shade/renderer/scene/chunk_mesh_flags.d.ts +9 -0
- package/src/shade/renderer/scene/chunk_mesh_flags.d.ts.map +1 -0
- package/src/shade/renderer/scene/chunk_mesh_flags.js +22 -0
- package/src/shade/renderer/scene/movers/SCENE_MOVER_LAYOUT.d.ts +65 -0
- package/src/shade/renderer/scene/movers/SCENE_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/SCENE_MOVER_LAYOUT.js +87 -0
- package/src/shade/renderer/scene/movers/SceneMoverTracker.d.ts +42 -0
- package/src/shade/renderer/scene/movers/SceneMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/SceneMoverTracker.js +153 -0
- package/src/shade/renderer/scene/movers/chunk_scene_append_mover.d.ts +14 -0
- package/src/shade/renderer/scene/movers/chunk_scene_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/chunk_scene_append_mover.js +33 -0
- package/src/shade/renderer/scene/movers/graph_scene_movers.d.ts +33 -0
- package/src/shade/renderer/scene/movers/graph_scene_movers.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/graph_scene_movers.js +114 -0
- package/src/shade/renderer/scene/movers/shader_scene_movers.d.ts +33 -0
- package/src/shade/renderer/scene/movers/shader_scene_movers.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/shader_scene_movers.js +197 -0
- package/src/shade/renderer/scene/movers/shader_scene_skinned_movers.d.ts +24 -0
- package/src/shade/renderer/scene/movers/shader_scene_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/shader_scene_skinned_movers.js +112 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +26 -4
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +64 -6
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_nearest_point_on_surface.js +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_decompose_transform.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_decompose_transform.js +2 -2
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_decode_u32.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_decode_u32.js +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.js +1 -1
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_mat2x4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_mat2x4.js +10 -7
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_vec4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_vec4.js +6 -3
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +62 -34
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +1 -1
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +1 -1
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceDescriptor.d.ts +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +50 -11
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +188 -51
- package/src/shade/renderer/shadow/map/SHADOWMAP_PATCH_MIN_SIDE.d.ts +8 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_PATCH_MIN_SIDE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_PATCH_MIN_SIDE.js +7 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +7 -7
- package/src/shade/renderer/shadow/map/Shadowmap.js +7 -7
- package/src/shade/renderer/shadow/map/ShadowmapResolutionPolicy.d.ts +17 -0
- package/src/shade/renderer/shadow/map/ShadowmapResolutionPolicy.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/ShadowmapResolutionPolicy.js +29 -8
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_get_light_visibility.d.ts +0 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_get_light_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_get_light_visibility.js +0 -3
- package/src/shade/renderer/shadow/sdf/SDF_DRAW_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/SDF_DRAW_SETTINGS_STRUCT.js +2 -5
- package/src/shade/renderer/shadow/sdf/chunk_geometry_sdf_query_distance.d.ts +8 -0
- package/src/shade/renderer/shadow/sdf/chunk_geometry_sdf_query_distance.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_geometry_sdf_query_distance.js +13 -41
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +6 -5
- package/src/shade/renderer/shadow/sdf/chunk_sdf_geometry_raymarch.d.ts +8 -0
- package/src/shade/renderer/shadow/sdf/chunk_sdf_geometry_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_sdf_geometry_raymarch.js +20 -73
- package/src/shade/renderer/shadow/sdf/chunk_sdf_mesh_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_sdf_mesh_raymarch.js +4 -0
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts +2 -0
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +14 -8
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_LOW_LOAD_FACTOR.d.ts +12 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_LOW_LOAD_FACTOR.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_LOW_LOAD_FACTOR.js +11 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts +9 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.js +8 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.js +12 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +3 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +80 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +303 -3
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +54 -3
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +418 -338
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +8 -9
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +9 -92
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +6 -6
- package/src/shade/renderer/texture/atlas/GPUTileAtlas2D.d.ts +90 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas2D.d.ts.map +1 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas2D.js +208 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +23 -4
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +56 -5
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/view/GPUViewContext.js +2 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts +59 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.js +152 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +145 -46
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +14 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +56 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_sun_shadow_media.d.ts +21 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_sun_shadow_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_sun_shadow_media.js +125 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +4 -44
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +558 -311
- package/src/shade/renderer/volumetrics/shader_volumetrics_cull_sun_shadow_media.d.ts +18 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_cull_sun_shadow_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_cull_sun_shadow_media.js +84 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts +4 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.js +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +12 -2
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +46 -2
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +127 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts.map +1 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.js +741 -0
- package/src/shade/renderer/water/query/WATER_QUERY_DATABASE_SPEC.d.ts +58 -0
- package/src/shade/renderer/water/query/WATER_QUERY_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/water/query/WATER_QUERY_DATABASE_SPEC.js +79 -0
- package/src/shade/renderer/water/query/shader_water_surface_query.d.ts +32 -0
- package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -0
- package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -0
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +12 -6
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +20 -1
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +26 -0
- package/src/view/common/LabelView.js +1 -1
- package/src/view/common/VirtualListView.js +1 -1
- package/src/view/elements/progress/SmoothProgressBar.js +1 -1
- package/src/view/tooltip/TooltipManager.js +1 -1
- package/editor/view/ecs/components/DatGuiController.d.ts +0 -2
- package/editor/view/ecs/components/DatGuiController.d.ts.map +0 -1
- package/editor/view/ecs/components/DatGuiController.js +0 -2
- package/editor/view/v2/SplitView.d.ts +0 -2
- package/editor/view/v2/SplitView.d.ts.map +0 -1
- package/editor/view/v2/SplitView.js +0 -2
- package/src/core/binary/hash/XXH128Hash.d.ts +0 -2
- package/src/core/binary/hash/XXH128Hash.d.ts.map +0 -1
- package/src/core/binary/hash/XXH128Hash.js +0 -4
- package/src/core/binary/hash/XXH3_SECRET.d.ts +0 -2
- package/src/core/binary/hash/XXH3_SECRET.d.ts.map +0 -1
- package/src/core/binary/hash/XXH3_SECRET.js +0 -4
- package/src/core/binary/hash/crc32.d.ts +0 -2
- package/src/core/binary/hash/crc32.d.ts.map +0 -1
- package/src/core/binary/hash/crc32.js +0 -4
- package/src/core/binary/hash/xxh3_128.d.ts +0 -2
- package/src/core/binary/hash/xxh3_128.d.ts.map +0 -1
- package/src/core/binary/hash/xxh3_128.js +0 -4
- package/src/core/binary/hash/xxh3_64.d.ts +0 -2
- package/src/core/binary/hash/xxh3_64.d.ts.map +0 -1
- package/src/core/binary/hash/xxh3_64.js +0 -4
- package/src/core/binary/hash/xxh3_common.d.ts +0 -2
- package/src/core/binary/hash/xxh3_common.d.ts.map +0 -1
- package/src/core/binary/hash/xxh3_common.js +0 -90
- package/src/core/binary/lsb_32.d.ts +0 -17
- package/src/core/binary/lsb_32.d.ts.map +0 -1
- package/src/core/binary/lsb_32.js +0 -17
- package/src/core/color/hex/hex2rgb.d.ts +0 -2
- package/src/core/color/hex/hex2rgb.d.ts.map +0 -1
- package/src/core/color/hex/hex2rgb.js +0 -7
- package/src/core/color/hex/rgb2hex.d.ts +0 -2
- package/src/core/color/hex/rgb2hex.d.ts.map +0 -1
- package/src/core/color/hex/rgb2hex.js +0 -7
- package/src/core/color/hsv/hsv2rgb.d.ts +0 -2
- package/src/core/color/hsv/hsv2rgb.d.ts.map +0 -1
- package/src/core/color/hsv/hsv2rgb.js +0 -8
- package/src/core/color/hsv/rgb2hsv.d.ts +0 -2
- package/src/core/color/hsv/rgb2hsv.d.ts.map +0 -1
- package/src/core/color/hsv/rgb2hsv.js +0 -7
- package/src/core/color/hunt/hpe_to_xyz.d.ts +0 -2
- package/src/core/color/hunt/hpe_to_xyz.d.ts.map +0 -1
- package/src/core/color/hunt/hpe_to_xyz.js +0 -4
- package/src/core/color/hunt/xyz_to_hpe.d.ts +0 -2
- package/src/core/color/hunt/xyz_to_hpe.d.ts.map +0 -1
- package/src/core/color/hunt/xyz_to_hpe.js +0 -12
- package/src/core/color/int2rgb.d.ts +0 -2
- package/src/core/color/int2rgb.d.ts.map +0 -1
- package/src/core/color/int2rgb.js +0 -7
- package/src/core/color/rgb2uint24.d.ts +0 -2
- package/src/core/color/rgb2uint24.d.ts.map +0 -1
- package/src/core/color/rgb2uint24.js +0 -7
- package/src/core/color/rgb2uint32.d.ts +0 -2
- package/src/core/color/rgb2uint32.d.ts.map +0 -1
- package/src/core/color/rgb2uint32.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_array_combine.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_array_combine.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_array_combine.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_area.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_area.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_compute_area.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_intersects_point.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_intersects_point.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_intersects_point.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.js +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.d.ts +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.d.ts.map +0 -1
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.js +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.d.ts +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.d.ts.map +0 -1
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.js +0 -7
- package/src/core/geom/2d/circle/circle_intersects_point.d.ts +0 -7
- package/src/core/geom/2d/circle/circle_intersects_point.d.ts.map +0 -1
- package/src/core/geom/2d/circle/circle_intersects_point.js +0 -7
- package/src/core/geom/2d/compute_polygon_area_2d.d.ts +0 -7
- package/src/core/geom/2d/compute_polygon_area_2d.d.ts.map +0 -1
- package/src/core/geom/2d/compute_polygon_area_2d.js +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.d.ts +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.d.ts.map +0 -1
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.js +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +0 -1
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +0 -7
- package/src/core/geom/2d/convex-hull/orientation3_array.d.ts +0 -7
- package/src/core/geom/2d/convex-hull/orientation3_array.d.ts.map +0 -1
- package/src/core/geom/2d/convex-hull/orientation3_array.js +0 -7
- package/src/core/geom/2d/intersect_ray_2d.d.ts +0 -7
- package/src/core/geom/2d/intersect_ray_2d.d.ts.map +0 -1
- package/src/core/geom/2d/intersect_ray_2d.js +0 -7
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.d.ts +0 -7
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.d.ts.map +0 -1
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.js +0 -7
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +0 -7
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +0 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +0 -7
- package/src/core/geom/2d/rectangle_to_aabb.d.ts +0 -7
- package/src/core/geom/2d/rectangle_to_aabb.d.ts.map +0 -1
- package/src/core/geom/2d/rectangle_to_aabb.js +0 -7
- package/src/core/geom/2d/spline_bezier2_2d.d.ts +0 -7
- package/src/core/geom/2d/spline_bezier2_2d.d.ts.map +0 -1
- package/src/core/geom/2d/spline_bezier2_2d.js +0 -7
- package/src/core/geom/2d/triangle2d_compute_area.d.ts +0 -7
- package/src/core/geom/2d/triangle2d_compute_area.d.ts.map +0 -1
- package/src/core/geom/2d/triangle2d_compute_area.js +0 -7
- package/src/core/geom/2d/triangle2d_contains_point.d.ts +0 -7
- package/src/core/geom/2d/triangle2d_contains_point.d.ts.map +0 -1
- package/src/core/geom/2d/triangle2d_contains_point.js +0 -7
- package/src/core/geom/2d/triangle2d_get_barycentric.d.ts +0 -7
- package/src/core/geom/2d/triangle2d_get_barycentric.d.ts.map +0 -1
- package/src/core/geom/2d/triangle2d_get_barycentric.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_raycast.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_raycast.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_raycast.js +0 -7
- package/src/core/geom/3d/aabb/compute_aabb_from_points.d.ts +0 -7
- package/src/core/geom/3d/aabb/compute_aabb_from_points.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/compute_aabb_from_points.js +0 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +0 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +0 -7
- package/src/core/geom/3d/compute_circle_bounding_box.d.ts +0 -7
- package/src/core/geom/3d/compute_circle_bounding_box.d.ts.map +0 -1
- package/src/core/geom/3d/compute_circle_bounding_box.js +0 -7
- package/src/core/geom/3d/cone/computeConeBoundingBox.d.ts +0 -7
- package/src/core/geom/3d/cone/computeConeBoundingBox.d.ts.map +0 -1
- package/src/core/geom/3d/cone/computeConeBoundingBox.js +0 -7
- package/src/core/geom/3d/cone/computeConePlaneSide.d.ts +0 -7
- package/src/core/geom/3d/cone/computeConePlaneSide.d.ts.map +0 -1
- package/src/core/geom/3d/cone/computeConePlaneSide.js +0 -7
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts +0 -7
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +0 -1
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +0 -7
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.d.ts +0 -7
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.js +0 -7
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.d.ts +0 -7
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +0 -7
- package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts +0 -7
- package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/frustum_matrix4_project.js +0 -7
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.d.ts +0 -7
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.js +0 -7
- package/src/core/geom/3d/frustum/read_three_planes_to_array.d.ts +0 -7
- package/src/core/geom/3d/frustum/read_three_planes_to_array.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/read_three_planes_to_array.js +0 -7
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts +0 -7
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +0 -7
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +0 -7
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +0 -7
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts +0 -7
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.d.ts +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.js +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js +0 -7
- package/src/core/geom/3d/mat4/allocate_m4.d.ts +0 -7
- package/src/core/geom/3d/mat4/allocate_m4.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/allocate_m4.js +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.js +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.js +0 -7
- package/src/core/geom/3d/mat4/compose_matrix4_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/compose_matrix4_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/compose_matrix4_array.js +0 -7
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +0 -7
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts +0 -7
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +0 -7
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.d.ts +0 -7
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.js +0 -7
- package/src/core/geom/3d/morton/mortonEncode_LUT.d.ts +0 -7
- package/src/core/geom/3d/morton/mortonEncode_LUT.d.ts.map +0 -1
- package/src/core/geom/3d/morton/mortonEncode_LUT.js +0 -7
- package/src/core/geom/3d/morton/mortonEncode_magicbits.d.ts +0 -7
- package/src/core/geom/3d/morton/mortonEncode_magicbits.d.ts.map +0 -1
- package/src/core/geom/3d/morton/mortonEncode_magicbits.js +0 -7
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.d.ts +0 -2
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.d.ts.map +0 -1
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.js +0 -5
- package/src/core/geom/3d/plane/is_point_within_planes.d.ts +0 -7
- package/src/core/geom/3d/plane/is_point_within_planes.d.ts.map +0 -1
- package/src/core/geom/3d/plane/is_point_within_planes.js +0 -7
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +0 -7
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +0 -7
- package/src/core/geom/3d/plane/plane3_intersect_plane.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_intersect_plane.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_intersect_plane.js +0 -7
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.js +0 -7
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.d.ts +0 -7
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.d.ts.map +0 -1
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.js +0 -7
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.d.ts +0 -7
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.d.ts.map +0 -1
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.js +0 -7
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.d.ts +0 -7
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.d.ts.map +0 -1
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.js +0 -7
- package/src/core/geom/3d/ray/ray3_array_compose.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_array_compose.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_array_compose.js +0 -7
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.js +0 -7
- package/src/core/geom/3d/ray/ray3_distance_to_point.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_distance_to_point.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_distance_to_point.js +0 -7
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +0 -7
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +0 -7
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +0 -1
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +0 -7
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +0 -7
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +0 -1
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +0 -7
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.d.ts +0 -7
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.js +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.js +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.js +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.js +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.js +0 -7
- package/src/core/geom/3d/sphere/sphere_intersects_point.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_intersects_point.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_intersects_point.js +0 -7
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +0 -7
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.js +0 -7
- package/src/core/geom/3d/sphere/spherical_from_cartesian.d.ts +0 -7
- package/src/core/geom/3d/sphere/spherical_from_cartesian.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/spherical_from_cartesian.js +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.js +0 -7
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.js +0 -7
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts +0 -8
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.js +0 -8
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.js +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.js +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_normal.d.ts +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_normal.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/compute_triangle_normal.js +0 -7
- package/src/core/geom/3d/triangle/rayTriangleIntersection.d.ts +0 -7
- package/src/core/geom/3d/triangle/rayTriangleIntersection.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/rayTriangleIntersection.js +0 -7
- package/src/core/geom/3d/triangle/triangle3_incenter.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle3_incenter.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle3_incenter.js +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.js +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.js +0 -7
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.js +0 -7
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +0 -7
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +0 -7
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +0 -7
- package/src/core/geom/3d/util/make_justified_point_grid.d.ts +0 -7
- package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +0 -1
- package/src/core/geom/3d/util/make_justified_point_grid.js +0 -7
- package/src/core/geom/mat3/m3_cm_from_translation.d.ts +0 -7
- package/src/core/geom/mat3/m3_cm_from_translation.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_cm_from_translation.js +0 -7
- package/src/core/geom/mat3/m3_cm_invert.d.ts +0 -7
- package/src/core/geom/mat3/m3_cm_invert.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_cm_invert.js +0 -7
- package/src/core/geom/mat3/m3_make_rotation.d.ts +0 -2
- package/src/core/geom/mat3/m3_make_rotation.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_make_rotation.js +0 -5
- package/src/core/geom/mat3/m3_multiply_vec3.d.ts +0 -7
- package/src/core/geom/mat3/m3_multiply_vec3.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_multiply_vec3.js +0 -7
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.d.ts +0 -7
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.d.ts.map +0 -1
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.js +0 -7
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.d.ts +0 -7
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.js +0 -7
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.d.ts +0 -7
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.js +0 -7
- package/src/core/geom/packing/max-rect/cutArea.d.ts +0 -7
- package/src/core/geom/packing/max-rect/cutArea.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/cutArea.js +0 -7
- package/src/core/geom/packing/max-rect/findBestContainer.d.ts +0 -7
- package/src/core/geom/packing/max-rect/findBestContainer.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/findBestContainer.js +0 -7
- package/src/core/geom/packing/max-rect/packMaxRectangles.d.ts +0 -7
- package/src/core/geom/packing/max-rect/packMaxRectangles.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/packMaxRectangles.js +0 -7
- package/src/core/geom/packing/max-rect/packOneBox.d.ts +0 -7
- package/src/core/geom/packing/max-rect/packOneBox.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/packOneBox.js +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.d.ts +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.js +0 -7
- package/src/core/geom/random/randomPointInBox.d.ts +0 -7
- package/src/core/geom/random/randomPointInBox.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInBox.js +0 -7
- package/src/core/geom/random/randomPointInCircle.d.ts +0 -7
- package/src/core/geom/random/randomPointInCircle.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInCircle.js +0 -7
- package/src/core/geom/random/randomPointInPoint.d.ts +0 -7
- package/src/core/geom/random/randomPointInPoint.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInPoint.js +0 -7
- package/src/core/geom/random/randomPointInSphere.d.ts +0 -7
- package/src/core/geom/random/randomPointInSphere.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInSphere.js +0 -7
- package/src/core/geom/random/randomPointOnBox.d.ts +0 -7
- package/src/core/geom/random/randomPointOnBox.d.ts.map +0 -1
- package/src/core/geom/random/randomPointOnBox.js +0 -7
- package/src/core/geom/random/randomPointOnSphere.d.ts +0 -7
- package/src/core/geom/random/randomPointOnSphere.d.ts.map +0 -1
- package/src/core/geom/random/randomPointOnSphere.js +0 -7
- package/src/core/geom/vec/vector_copy.d.ts +0 -7
- package/src/core/geom/vec/vector_copy.d.ts.map +0 -1
- package/src/core/geom/vec/vector_copy.js +0 -7
- package/src/core/geom/vec/vector_scale_array.d.ts +0 -7
- package/src/core/geom/vec/vector_scale_array.d.ts.map +0 -1
- package/src/core/geom/vec/vector_scale_array.js +0 -7
- package/src/core/geom/vec3/v3_angle_atan2_between.d.ts +0 -7
- package/src/core/geom/vec3/v3_angle_atan2_between.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_angle_atan2_between.js +0 -7
- package/src/core/geom/vec3/v3_angle_between.d.ts +0 -7
- package/src/core/geom/vec3/v3_angle_between.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_angle_between.js +0 -7
- package/src/core/geom/vec3/v3_angle_cos_between.d.ts +0 -7
- package/src/core/geom/vec3/v3_angle_cos_between.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_angle_cos_between.js +0 -7
- package/src/core/geom/vec3/v3_array_add_in_place.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_add_in_place.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_add_in_place.js +0 -7
- package/src/core/geom/vec3/v3_array_centroid.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_centroid.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_centroid.js +0 -7
- package/src/core/geom/vec3/v3_array_copy.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_copy.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_copy.js +0 -7
- package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_displace_in_direction.js +0 -7
- package/src/core/geom/vec3/v3_array_equals.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_equals.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_equals.js +0 -7
- package/src/core/geom/vec3/v3_array_immediate_add.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_immediate_add.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_immediate_add.js +0 -7
- package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_matrix4_rotate.js +0 -7
- package/src/core/geom/vec3/v3_array_normalize.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_normalize.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_normalize.js +0 -7
- package/src/core/geom/vec3/v3_array_scale.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_scale.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_scale.js +0 -7
- package/src/core/geom/vec3/v3_compute_interior_angle.d.ts +0 -7
- package/src/core/geom/vec3/v3_compute_interior_angle.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_compute_interior_angle.js +0 -7
- package/src/core/geom/vec3/v3_dot_array_array.d.ts +0 -7
- package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +0 -7
- package/src/core/geom/vec3/v3_matrix4_rotate.d.ts +0 -7
- package/src/core/geom/vec3/v3_matrix4_rotate.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_matrix4_rotate.js +0 -7
- package/src/core/geom/vec3/v3_multiply_scalar.d.ts +0 -7
- package/src/core/geom/vec3/v3_multiply_scalar.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_multiply_scalar.js +0 -7
- package/src/core/geom/vec3/v3_quat3_apply.d.ts +0 -7
- package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_quat3_apply.js +0 -7
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +0 -7
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +0 -7
- package/src/core/geom/vec3/v3_triple_cross_product.d.ts +0 -7
- package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_triple_cross_product.js +0 -7
- package/src/core/geom/vec4/v4_multiply_mat4.d.ts +0 -7
- package/src/core/geom/vec4/v4_multiply_mat4.d.ts.map +0 -1
- package/src/core/geom/vec4/v4_multiply_mat4.js +0 -7
- package/src/core/math/fabsf.d.ts +0 -6
- package/src/core/math/fabsf.d.ts.map +0 -1
- package/src/core/math/fabsf.js +0 -6
- package/src/core/model/object/optional_equality.d.ts +0 -10
- package/src/core/model/object/optional_equality.d.ts.map +0 -1
- package/src/core/model/object/optional_equality.js +0 -10
- package/src/core/primitives/strings/string_compute_byte_size.d.ts +0 -7
- package/src/core/primitives/strings/string_compute_byte_size.d.ts.map +0 -1
- package/src/core/primitives/strings/string_compute_byte_size.js +0 -8
- package/src/engine/graphics/FrameThrottle.d.ts +0 -2
- package/src/engine/graphics/FrameThrottle.d.ts.map +0 -1
- package/src/engine/graphics/FrameThrottle.js +0 -2
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +0 -2
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +0 -2
- package/src/engine/graphics/texture/isImageBitmap.d.ts +0 -2
- package/src/engine/graphics/texture/isImageBitmap.d.ts.map +0 -1
- package/src/engine/graphics/texture/isImageBitmap.js +0 -2
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +0 -10
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +0 -10
- package/src/engine/graphics3/AnimationSystem3.d.ts +0 -10
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/AnimationSystem3.js +0 -10
- package/src/engine/graphics3/CameraSystem3.d.ts +0 -10
- package/src/engine/graphics3/CameraSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/CameraSystem3.js +0 -10
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +0 -10
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +0 -10
- package/src/engine/graphics3/DecalSystem3.d.ts +0 -10
- package/src/engine/graphics3/DecalSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/DecalSystem3.js +0 -10
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +0 -10
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +0 -10
- package/src/engine/graphics3/GraphicsEngine3.d.ts +0 -10
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +0 -1
- package/src/engine/graphics3/GraphicsEngine3.js +0 -10
- package/src/engine/graphics3/HighlightSystem.d.ts +0 -19
- package/src/engine/graphics3/HighlightSystem.d.ts.map +0 -1
- package/src/engine/graphics3/HighlightSystem.js +0 -27
- package/src/engine/graphics3/HighlightSystem3.d.ts +0 -13
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/HighlightSystem3.js +0 -15
- package/src/engine/graphics3/LightSystem3.d.ts +0 -10
- package/src/engine/graphics3/LightSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/LightSystem3.js +0 -10
- package/src/engine/graphics3/MeshSystem3.d.ts +0 -10
- package/src/engine/graphics3/MeshSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/MeshSystem3.js +0 -10
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +0 -10
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +0 -10
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +0 -10
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +0 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +0 -10
- package/src/engine/graphics3/PickingSystem3.d.ts +0 -10
- package/src/engine/graphics3/PickingSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/PickingSystem3.js +0 -10
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +0 -10
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +0 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +0 -10
- package/src/engine/graphics3/TerrainSystem3.d.ts +0 -10
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/TerrainSystem3.js +0 -10
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +0 -10
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +0 -10
- package/src/engine/graphics3/Trail3DSystem3.d.ts +0 -10
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/Trail3DSystem3.js +0 -10
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +0 -10
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +0 -10
- package/src/engine/graphics3/WaterSystem3.d.ts +0 -10
- package/src/engine/graphics3/WaterSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/WaterSystem3.js +0 -10
- package/src/engine/network/convertPathToURL.d.ts +0 -2
- package/src/engine/network/convertPathToURL.d.ts.map +0 -1
- package/src/engine/network/convertPathToURL.js +0 -2
- package/src/format/image/png/crc32.d.ts +0 -2
- package/src/format/image/png/crc32.d.ts.map +0 -1
- package/src/format/image/png/crc32.js +0 -7
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts +0 -2
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +0 -1
- package/src/shade/renderer/camera/OrbitalCameraController.js +0 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts +0 -16
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts.map +0 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.js +0 -17
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.js +0 -8
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.js +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.js +0 -49
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.js +0 -90
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +0 -126
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts +0 -8
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts.map +0 -1
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.js +0 -10
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.js +0 -62
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +0 -153
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +0 -75
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +0 -32
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +0 -184
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +0 -109
|
@@ -1,229 +1,1938 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ALLOCATOR_NO_SPACE, OffsetAllocator } from "../../../../core/binary/allocator/OffsetAllocator.js";
|
|
3
|
+
import Signal from "../../../../core/events/signal/Signal.js";
|
|
4
|
+
import { BufferDescriptor } from "../../../descriptor/buffer/BufferDescriptor.js";
|
|
5
|
+
import { graph_read_buffer } from "../../buffer/graph_read_buffer.js";
|
|
6
|
+
import { GPU_DATABASE_NULL } from "../../buffer/table/GPU_DATABASE_NULL.js";
|
|
7
|
+
import { WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION } from "../../gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js";
|
|
8
|
+
import { shader_slot_stack_fill, SLOT_STACK_FILL_WORKGROUP_SIZE } from "../../gpu_primitive/slot_stack/shader_slot_stack_fill.js";
|
|
9
|
+
import {
|
|
10
|
+
shader_slot_stack_push_range,
|
|
11
|
+
SLOT_STACK_PUSH_RANGE_WORKGROUP_SIZE
|
|
12
|
+
} from "../../gpu_primitive/slot_stack/shader_slot_stack_push_range.js";
|
|
13
|
+
import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
|
|
3
14
|
import { GPUTileAtlas3D } from "../../texture/atlas/GPUTileAtlas3D.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
15
|
+
import {
|
|
16
|
+
MESH_SDF_BAKE_WORKGROUP_SIZE,
|
|
17
|
+
MESH_SDF_COUNTER_SLOTS,
|
|
18
|
+
MESH_SDF_COUNTER_WORDS,
|
|
19
|
+
MESH_SDF_LOG_COMPLETIONS,
|
|
20
|
+
MESH_SDF_LOG_HEADER_WORDS,
|
|
21
|
+
MESH_SDF_LOG_PLACED,
|
|
22
|
+
MESH_SDF_LOG_QUEUED,
|
|
23
|
+
MESH_SDF_LOG_RECORD_WORDS,
|
|
24
|
+
MESH_SDF_LOG_FREE_SLOTS,
|
|
25
|
+
MESH_SDF_LOG_STARVED,
|
|
26
|
+
MESH_SDF_LOG_TAKEN,
|
|
27
|
+
MESH_SDF_STAGING_VEC4S,
|
|
28
|
+
MESH_SDF_GROUPS_PER_BRICK,
|
|
29
|
+
MESH_SDF_TAKE_DISPATCH,
|
|
30
|
+
MESH_SDF_TAKE_PLACE_DISPATCH,
|
|
31
|
+
MESH_SDF_TAKE_WORDS
|
|
32
|
+
} from "./bake/MESH_SDF_BAKE.js";
|
|
33
|
+
import { shader_mesh_sdf_classify } from "./bake/shader_mesh_sdf_classify.js";
|
|
34
|
+
import { shader_mesh_sdf_evaluate } from "./bake/shader_mesh_sdf_evaluate.js";
|
|
35
|
+
import { shader_mesh_sdf_free } from "./bake/shader_mesh_sdf_free.js";
|
|
36
|
+
import { shader_mesh_sdf_store } from "./bake/shader_mesh_sdf_store.js";
|
|
37
|
+
import { shader_mesh_sdf_take } from "./bake/shader_mesh_sdf_take.js";
|
|
38
|
+
import { GPUMeshCardSets, MESH_CARD_CAPTURE_BUDGET_MAX } from "./cards/GPUMeshCardSets.js";
|
|
39
|
+
import { mesh_card_layout_words, mesh_card_placement_of } from "./cards/MESH_CARDS.js";
|
|
40
|
+
import { shader_mesh_cards_compact } from "./cards/shader_mesh_cards_compact.js";
|
|
41
|
+
import { shader_mesh_cards_histogram } from "./cards/shader_mesh_cards_histogram.js";
|
|
42
|
+
import { shader_mesh_cards_log } from "./cards/shader_mesh_cards_log.js";
|
|
43
|
+
import { shader_mesh_cards_merge } from "./cards/shader_mesh_cards_merge.js";
|
|
44
|
+
import { shader_mesh_cards_pages } from "./cards/shader_mesh_cards_pages.js";
|
|
45
|
+
import { shader_mesh_cards_split } from "./cards/shader_mesh_cards_split.js";
|
|
46
|
+
import { MESH_SDF_BRICK_TEXELS, MeshSDFState } from "./MESH_SDF.js";
|
|
47
|
+
import { MESH_SDF_SAMPLER } from "./MESH_SDF_RESOURCES.js";
|
|
48
|
+
import { MESH_SDF_STRUCT } from "./MESH_SDF_STRUCT.js";
|
|
49
|
+
import { MeshSDFLayout } from "./MeshSDFLayout.js";
|
|
6
50
|
|
|
7
51
|
/**
|
|
8
|
-
* @typedef {import("
|
|
52
|
+
* @typedef {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
9
53
|
* @typedef {import("../GPUGeometryManager.js").GPUGeometryManager} GPUGeometryManager
|
|
10
|
-
* @typedef {import("../
|
|
54
|
+
* @typedef {import("../GPUGeometryMetadata.js").GPUGeometryMetadata} GPUGeometryMetadata
|
|
55
|
+
* @typedef {import("../../material/resident/GPUResidentMaterialContext.js").GPUResidentMaterialContext} GPUResidentMaterialContext
|
|
11
56
|
*/
|
|
12
57
|
|
|
58
|
+
/*
|
|
59
|
+
What the host knows of a geometry id. `Queued` is the host's alone: the header reads None until the
|
|
60
|
+
bake is admitted and the indirection range is the geometry's.
|
|
61
|
+
*/
|
|
62
|
+
const HOST_NONE = 0;
|
|
63
|
+
const HOST_QUEUED = 1;
|
|
64
|
+
const HOST_BAKING = 2;
|
|
65
|
+
const HOST_RESIDENT = 3;
|
|
66
|
+
const HOST_ALIAS = 4;
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
Where a resident geometry's cards are (§6.5): waiting for placement; being placed, in a range sized
|
|
70
|
+
for any layout of its grid; placed, waiting to be moved into a range of their own size; placed.
|
|
71
|
+
*/
|
|
72
|
+
const CARDS_NONE = 0;
|
|
73
|
+
const CARDS_QUEUED = 1;
|
|
74
|
+
const CARDS_PLACING = 2;
|
|
75
|
+
const CARDS_COMPACTING = 3;
|
|
76
|
+
const CARDS_PLACED = 4;
|
|
77
|
+
|
|
78
|
+
const HEADER_BYTES = MESH_SDF_STRUCT.size;
|
|
79
|
+
const HEADER_ORIGIN = MESH_SDF_STRUCT.get("origin").offset;
|
|
80
|
+
const HEADER_VOXEL = MESH_SDF_STRUCT.get("voxel").offset;
|
|
81
|
+
const HEADER_BRICKS = MESH_SDF_STRUCT.get("bricks").offset;
|
|
82
|
+
const HEADER_LEVEL_COUNT = MESH_SDF_STRUCT.get("level_count").offset;
|
|
83
|
+
const HEADER_INDIRECTION = MESH_SDF_STRUCT.get("indirection").offset;
|
|
84
|
+
const HEADER_CARDS = MESH_SDF_STRUCT.get("cards").offset;
|
|
85
|
+
const HEADER_STATE = MESH_SDF_STRUCT.get("state").offset;
|
|
86
|
+
const HEADER_SOURCE = MESH_SDF_STRUCT.get("source").offset;
|
|
87
|
+
const HEADER_GENERATION = MESH_SDF_STRUCT.get("generation").offset;
|
|
88
|
+
const HEADER_TWO_SIDED = MESH_SDF_STRUCT.get("two_sided").offset;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Tiles across x and y of the brick atlas: a layer is 128² texels and holds 256 bricks, and the
|
|
92
|
+
* atlas grows in whole layers.
|
|
93
|
+
* @type {number}
|
|
94
|
+
*/
|
|
95
|
+
const ATLAS_SLOTS_XY = 16;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Slots the atlas starts with: one layer. It doubles each time a frame's take is held back by the
|
|
99
|
+
* free slots, so a scene reaches what it needs in a few doublings and never holds much past it.
|
|
100
|
+
* @type {number}
|
|
101
|
+
*/
|
|
102
|
+
const INITIAL_SLOT_CAPACITY = ATLAS_SLOTS_XY * ATLAS_SLOTS_XY;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Readbacks of the bake's log in flight before a frame's bake is skipped. A mapping normally lands a
|
|
106
|
+
* frame or two after its copy; past this the device is behind, and a frame that cannot be read back
|
|
107
|
+
* must not complete a geometry the host would never hear of.
|
|
108
|
+
* @type {number}
|
|
109
|
+
*/
|
|
110
|
+
const MAX_LOGS_IN_FLIGHT = 3;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Completion records the log has room for to start with; it doubles when more geometries are in
|
|
114
|
+
* flight at once.
|
|
115
|
+
* @type {number}
|
|
116
|
+
*/
|
|
117
|
+
const INITIAL_LOG_CAPACITY = 64;
|
|
118
|
+
|
|
13
119
|
/**
|
|
14
|
-
*
|
|
120
|
+
* Words the arena starts with. It doubles as allocations need, appending.
|
|
15
121
|
* @type {number}
|
|
16
122
|
*/
|
|
17
|
-
const
|
|
123
|
+
const INITIAL_ARENA_WORDS = 4096;
|
|
18
124
|
|
|
19
125
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
126
|
+
* Geometries whose cards one frame places, at most: a safety net for a frame in which many complete.
|
|
127
|
+
* A placement's five passes cost 140 µs a geometry at the median over Sponza's fill on the RTX 4090
|
|
128
|
+
* (220 µs on the AMD iGPU), its split pass most of it, so ⌊1 ms / 140 µs⌋ of them fit the bake's
|
|
129
|
+
* basis of 1 ms a frame there.
|
|
24
130
|
* @type {number}
|
|
25
131
|
*/
|
|
26
|
-
const
|
|
132
|
+
const MESH_CARD_PLACEMENTS_PER_FRAME = 7;
|
|
27
133
|
|
|
28
134
|
/**
|
|
135
|
+
* Most bricks a frame's take may hand out: evaluate and store run {@link MESH_SDF_GROUPS_PER_BRICK}
|
|
136
|
+
* workgroups a brick in one dispatch row.
|
|
29
137
|
* @type {number}
|
|
30
138
|
*/
|
|
31
|
-
const
|
|
139
|
+
export const MESH_SDF_BAKE_BUDGET_MAX = Math.floor(WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION / MESH_SDF_GROUPS_PER_BRICK);
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* The most bricks one geometry can have under `max_bricks`: every level of a cube of that many.
|
|
143
|
+
*
|
|
144
|
+
* @param {number} max_bricks
|
|
145
|
+
* @returns {number}
|
|
146
|
+
*/
|
|
147
|
+
function max_bricks_of_a_geometry(max_bricks) {
|
|
148
|
+
let total = 0;
|
|
149
|
+
|
|
150
|
+
for (let level = 0; ; level++) {
|
|
151
|
+
const per_axis = Math.ceil(max_bricks / 2 ** level);
|
|
152
|
+
|
|
153
|
+
total += per_axis ** 3;
|
|
154
|
+
|
|
155
|
+
if (per_axis <= 1) {
|
|
156
|
+
return total;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Grow a typed array by doubling until it holds `length`, keeping its contents.
|
|
163
|
+
*
|
|
164
|
+
* @template {Uint8Array|Uint32Array} T
|
|
165
|
+
* @param {T} array
|
|
166
|
+
* @param {number} length
|
|
167
|
+
* @returns {T}
|
|
168
|
+
*/
|
|
169
|
+
function grow_typed(array, length) {
|
|
170
|
+
if (array.length >= length) {
|
|
171
|
+
return array;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
let size = Math.max(1, array.length);
|
|
175
|
+
|
|
176
|
+
while (size < length) {
|
|
177
|
+
size *= 2;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const grown = new array.constructor(size);
|
|
181
|
+
|
|
182
|
+
grown.set(array);
|
|
183
|
+
|
|
184
|
+
return grown;
|
|
185
|
+
}
|
|
32
186
|
|
|
33
187
|
/**
|
|
34
|
-
* Per-geometry signed distance fields
|
|
35
|
-
*
|
|
188
|
+
* Per-geometry sparse signed distance fields (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §6): bricks of 8³
|
|
189
|
+
* `r8unorm` texels on 7³ voxels, in size classes with levels ({@link MeshSDFLayout}), baked on the
|
|
190
|
+
* device from the geometry's BLAS and kept by geometry id for as long as something holds the
|
|
191
|
+
* geometry.
|
|
192
|
+
*
|
|
193
|
+
* **Lifetime.** {@link acquire} and {@link release} count holders per geometry id. The first holder
|
|
194
|
+
* queues a bake; the last one going leaves the cache in place until {@link trim}, which only a user of
|
|
195
|
+
* the caches calls, so a cache outlives a mode that stops using it and is there when the mode comes
|
|
196
|
+
* back (D28). {@link forget} drops a geometry the geometry manager has let go of, whatever holds it.
|
|
197
|
+
* {@link alias} points a skinned clone's id at its source's cache, which readers follow.
|
|
36
198
|
*
|
|
37
|
-
* **A
|
|
38
|
-
*
|
|
39
|
-
*
|
|
199
|
+
* **Side.** A holder says whether it draws both sides of the geometry. A field is baked two-sided
|
|
200
|
+
* while any of its holders does: its vote then counts no back face, so nothing is inside it (UE 5.4's
|
|
201
|
+
* rule, which takes the side from the material). A field whose holders' side has changed since its
|
|
202
|
+
* bake is baked again at the next bake, so holds moved within a frame bake nothing; a field no one
|
|
203
|
+
* holds keeps the side it has.
|
|
40
204
|
*
|
|
41
|
-
* **
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
205
|
+
* **The bake** ({@link graph_bake}, once a frame) admits queued geometries in request order whose
|
|
206
|
+
* trees are resident, while the ring has room for every brick they could queue, and runs free,
|
|
207
|
+
* classify, take, evaluate and store (`bake/`). At most `budget` bricks are evaluated a frame. The
|
|
208
|
+
* device logs each geometry it completes; the log is read back, and the host turns the header
|
|
209
|
+
* resident and sends {@link onBaked}. A take held back by the free slots is logged too, and the atlas
|
|
210
|
+
* and its slot stack double.
|
|
211
|
+
*
|
|
212
|
+
* **Cards** (§6.5): a geometry turned resident has its cards placed by the next bake that has room
|
|
213
|
+
* (`cards/`), in a range sized for any layout of its grid. The placement is logged with the columns
|
|
214
|
+
* and pages it took; on that readback the geometry gets a range of exactly that size, and the next bake
|
|
215
|
+
* moves the layout into it and gives the placement's range back. The layout then reaches
|
|
216
|
+
* {@link cards}, whose card sets — one per (geometry, material) pair — are captured after the bake,
|
|
217
|
+
* `capture_budget` pages a frame.
|
|
218
|
+
*
|
|
219
|
+
* **Readers** bind {@link headers}, {@link indirection}, {@link texture} and {@link MESH_SDF_SAMPLER}
|
|
220
|
+
* (see {@link write_bindings}) and sample through `mesh_sdf_sample`, which only a resident header
|
|
221
|
+
* should be given to.
|
|
222
|
+
*
|
|
223
|
+
* Device storage is made on first use: a renderer that never asks for a cache allocates nothing.
|
|
45
224
|
*/
|
|
46
225
|
export class GPUGeometrySDFManager {
|
|
47
226
|
|
|
48
227
|
/**
|
|
49
|
-
* @type {
|
|
228
|
+
* @type {GPUDevice}
|
|
229
|
+
*/
|
|
230
|
+
#device;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @type {GPUGeometryManager}
|
|
234
|
+
*/
|
|
235
|
+
#geometries;
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Sent with a geometry id when its cache turns resident, on the frame its completion is read back.
|
|
239
|
+
* @type {Signal<number>}
|
|
240
|
+
*/
|
|
241
|
+
onBaked = new Signal();
|
|
242
|
+
|
|
243
|
+
#voxel_size = 0.125;
|
|
244
|
+
#max_bricks = 18;
|
|
245
|
+
|
|
246
|
+
// ---- per geometry id ----
|
|
247
|
+
|
|
248
|
+
#references = new Uint32Array(64);
|
|
249
|
+
/** Holders drawing both sides. */
|
|
250
|
+
#two_sided_references = new Uint32Array(64);
|
|
251
|
+
/** 1 when the bake under way, or the cache, is two-sided: what its header says. */
|
|
252
|
+
#two_sided = new Uint8Array(64);
|
|
253
|
+
#state = new Uint8Array(64);
|
|
254
|
+
#generation = new Uint32Array(64);
|
|
255
|
+
#brick_count = new Uint32Array(64);
|
|
256
|
+
|
|
257
|
+
#card_state = new Uint8Array(64);
|
|
258
|
+
/** Words of the range the geometry's cards are placed in. */
|
|
259
|
+
#placement_words = new Uint32Array(64);
|
|
260
|
+
/** Where the placement's scratch starts in it. */
|
|
261
|
+
#placement_scratch = new Uint32Array(64);
|
|
262
|
+
/** Columns over the six directions of the geometry's level-0 grid: the histogram's threads. */
|
|
263
|
+
#placement_columns = new Uint32Array(64);
|
|
264
|
+
/** Pages the placed layout has. */
|
|
265
|
+
#card_pages = new Uint32Array(64);
|
|
266
|
+
/** Words the placed layout keeps. */
|
|
267
|
+
#card_words = new Uint32Array(64);
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* The range each geometry's cards are being placed in.
|
|
271
|
+
* @type {(import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation|null)[]}
|
|
50
272
|
*/
|
|
51
|
-
#
|
|
273
|
+
#card_scratch = [];
|
|
52
274
|
|
|
53
275
|
/**
|
|
54
|
-
* The
|
|
276
|
+
* The range each geometry's placed layout keeps.
|
|
277
|
+
* @type {(import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation|null)[]}
|
|
278
|
+
*/
|
|
279
|
+
#card_ranges = [];
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Resident geometries whose cards wait for placement, in the order they turned resident.
|
|
55
283
|
* @type {number[]}
|
|
56
284
|
*/
|
|
57
|
-
#
|
|
285
|
+
#place_queue = [];
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Geometries whose placed layout waits to be moved into its own range.
|
|
289
|
+
* @type {number[]}
|
|
290
|
+
*/
|
|
291
|
+
#compact_queue = [];
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* The (geometry, material) pairs' captures of the layouts.
|
|
295
|
+
* @type {GPUMeshCardSets}
|
|
296
|
+
*/
|
|
297
|
+
#cards;
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* @type {(import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation|null)[]}
|
|
301
|
+
*/
|
|
302
|
+
#ranges = [];
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* @type {(GPUGeometryMetadata|undefined)[]}
|
|
306
|
+
*/
|
|
307
|
+
#records = [];
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Ids waiting for their bake, in request order. An id dropped while queued stays until the next
|
|
311
|
+
* admission walks past it.
|
|
312
|
+
* @type {number[]}
|
|
313
|
+
*/
|
|
314
|
+
#queue = [];
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Ids whose last holder went since the last {@link trim}.
|
|
318
|
+
* @type {number[]}
|
|
319
|
+
*/
|
|
320
|
+
#unreferenced = [];
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Ids whose holders changed since the last bake, which may draw a side other than their field's.
|
|
324
|
+
* @type {number[]}
|
|
325
|
+
*/
|
|
326
|
+
#holders_changed = [];
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Indirection ranges given back since the last bake, as offset then count, for the free pass.
|
|
330
|
+
* @type {number[]}
|
|
331
|
+
*/
|
|
332
|
+
#freed = [];
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* The allocations of {@link #freed}, held from the allocator until their free pass is recorded.
|
|
336
|
+
* @type {import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation[]}
|
|
337
|
+
*/
|
|
338
|
+
#freeing = [];
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Allocations whose last reader was recorded in the last bake, given back to the allocator at the
|
|
342
|
+
* start of the next. A range handed out in the frame that reads it would take the new owner's host
|
|
343
|
+
* writes, which land before the frame's commands run.
|
|
344
|
+
* @type {import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation[]}
|
|
345
|
+
*/
|
|
346
|
+
#release_next = [];
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Geometries admitted and not yet complete.
|
|
350
|
+
* @type {number}
|
|
351
|
+
*/
|
|
352
|
+
#baking = 0;
|
|
353
|
+
|
|
354
|
+
#layout = new MeshSDFLayout();
|
|
355
|
+
|
|
356
|
+
#header_scratch = new DataView(new ArrayBuffer(HEADER_BYTES));
|
|
357
|
+
#word_scratch = new Uint32Array(4);
|
|
358
|
+
|
|
359
|
+
// ---- device storage, made by #ensure_device ----
|
|
360
|
+
|
|
361
|
+
/** @type {GPUBuffer|null} */
|
|
362
|
+
#headers = null;
|
|
363
|
+
#header_capacity = 0;
|
|
364
|
+
|
|
365
|
+
/** @type {GPUBuffer|null} */
|
|
366
|
+
#indirection = null;
|
|
367
|
+
/** @type {OffsetAllocator|null} */
|
|
368
|
+
#indirection_allocator = null;
|
|
369
|
+
#indirection_capacity = 0;
|
|
370
|
+
|
|
371
|
+
/** @type {GPUTileAtlas3D|null} */
|
|
372
|
+
#atlas = null;
|
|
373
|
+
/** @type {GPUBuffer|null} */
|
|
374
|
+
#slots = null;
|
|
375
|
+
#slot_capacity = 0;
|
|
376
|
+
#fill_pending = false;
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Ranges of slots the next bake pushes, as first then count: what the atlas gained.
|
|
380
|
+
* @type {number[]}
|
|
381
|
+
*/
|
|
382
|
+
#pushes = [];
|
|
383
|
+
|
|
384
|
+
/** @type {GPUBuffer|null} */
|
|
385
|
+
#take = null;
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* The frame's words in the arena: its log, room for {@link #log_capacity} completions, then its
|
|
389
|
+
* tallies, a word for each of {@link #staging_bricks} bricks taken.
|
|
390
|
+
* @type {import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation|null}
|
|
391
|
+
*/
|
|
392
|
+
#frame_range = null;
|
|
393
|
+
#log_capacity = 0;
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* The ring's entries, then the staging of {@link #staging_bricks} bricks.
|
|
397
|
+
* @type {GPUBuffer|null}
|
|
398
|
+
*/
|
|
399
|
+
#ring = null;
|
|
400
|
+
#ring_capacity = 0;
|
|
401
|
+
#staging_bricks = 0;
|
|
402
|
+
|
|
403
|
+
/** @type {GPUBuffer|null} */
|
|
404
|
+
#classify_ranges = null;
|
|
405
|
+
#classify_ranges_capacity = 0;
|
|
406
|
+
#classify_scratch = new Uint32Array(64);
|
|
407
|
+
|
|
408
|
+
/** @type {GPUBuffer|null} */
|
|
409
|
+
#free_ranges = null;
|
|
410
|
+
#free_ranges_capacity = 0;
|
|
411
|
+
#free_scratch = new Uint32Array(64);
|
|
412
|
+
|
|
413
|
+
// ---- the frame's bake, as graph_bake records it for #execute_bake ----
|
|
414
|
+
|
|
415
|
+
#frame_classify_runs = 0;
|
|
416
|
+
#frame_classify_bricks = 0;
|
|
417
|
+
#frame_free_runs = 0;
|
|
418
|
+
#frame_free_entries = 0;
|
|
419
|
+
#frame_budget = 0;
|
|
420
|
+
#frame_log_capacity = 1;
|
|
421
|
+
#frame_log_offset = 0;
|
|
422
|
+
#frame_log_bytes = 0;
|
|
423
|
+
#frame_tally_offset = 0;
|
|
424
|
+
#frame_bytes = 0;
|
|
425
|
+
|
|
426
|
+
#log_data = { arena: -1 };
|
|
427
|
+
|
|
428
|
+
/** The frame's placements, as geometry, the range's first word, and where its scratch starts. */
|
|
429
|
+
#frame_placements = [];
|
|
430
|
+
/** The frame's layout moves, as source, destination and words. */
|
|
431
|
+
#frame_compactions = [];
|
|
432
|
+
|
|
433
|
+
#histogram_settings = { geometry: 0, columns: 0 };
|
|
434
|
+
#split_settings = { geometry: 0 };
|
|
435
|
+
#merge_settings = { geometry: 0, dispatch: MESH_SDF_TAKE_PLACE_DISPATCH };
|
|
436
|
+
#pages_settings = { geometry: 0 };
|
|
437
|
+
#place_log_settings = { geometry: 0, log_offset: 0, log_capacity: 0 };
|
|
438
|
+
#compact_settings = { source: 0, destination: 0, count: 0, groups_x: 0 };
|
|
439
|
+
|
|
440
|
+
#blas_bindings = { blas_lookup: null, blas_data: null, geometries: null, meshlet_metadata: null, meshlet_data: null };
|
|
441
|
+
|
|
442
|
+
#classify_settings = { range_count: 0, brick_count: 0, groups_x: 0, ring_capacity: 0, log_offset: 0, log_capacity: 0 };
|
|
443
|
+
#free_settings = { range_count: 0, entry_count: 0, groups_x: 0 };
|
|
444
|
+
#take_settings = { budget: 0, log_offset: 0 };
|
|
445
|
+
#evaluate_settings = { ring_capacity: 0, slot_capacity: 0, log_offset: 0, log_capacity: 0, tally_offset: 0 };
|
|
446
|
+
#store_settings = { ring_capacity: 0 };
|
|
447
|
+
#push_settings = { first: 0, count: 0, counter: MESH_SDF_COUNTER_SLOTS };
|
|
448
|
+
#bindings = {};
|
|
449
|
+
|
|
450
|
+
// ---- what the log has told ----
|
|
451
|
+
|
|
452
|
+
#frame = 0;
|
|
453
|
+
#logs_in_flight = 0;
|
|
454
|
+
#skipped_frames = 0;
|
|
455
|
+
|
|
456
|
+
/** Bricks admitted since the device storage was made: an upper bound on what the ring has had. */
|
|
457
|
+
#admitted_total = 0;
|
|
458
|
+
#read_frame = -1;
|
|
459
|
+
#read_queued = 0;
|
|
460
|
+
#read_admitted = 0;
|
|
461
|
+
/** Bumped when the ring is emptied by hand, which voids every log recorded before it. */
|
|
462
|
+
#ring_epoch = 0;
|
|
463
|
+
#grown_frame = -1;
|
|
464
|
+
|
|
465
|
+
#coarsened_count = 0;
|
|
466
|
+
#resident_count = 0;
|
|
467
|
+
#starved_frames = 0;
|
|
468
|
+
#bricks_evaluated = 0;
|
|
469
|
+
#free_slots = 0;
|
|
470
|
+
|
|
471
|
+
#destroyed = false;
|
|
58
472
|
|
|
59
473
|
/**
|
|
60
|
-
*
|
|
61
474
|
* @param {GPUDevice} device
|
|
475
|
+
* @param {GPUGeometryManager} geometries whose ids the caches are kept by, and whose trees the bake reads
|
|
62
476
|
*/
|
|
63
|
-
constructor(device) {
|
|
477
|
+
constructor(device, geometries) {
|
|
64
478
|
assert.defined(device, 'device');
|
|
479
|
+
assert.defined(geometries, 'geometries');
|
|
65
480
|
|
|
66
|
-
this.#
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// a cube: the build and every reader take one resolution for all three axes
|
|
70
|
-
content_size: [DEFAULT_MESH_RESOLUTION, DEFAULT_MESH_RESOLUTION, DEFAULT_MESH_RESOLUTION],
|
|
71
|
-
border: 0,
|
|
72
|
-
slots_x: ATLAS_SLOTS_X,
|
|
73
|
-
slots_y: ATLAS_SLOTS_Y,
|
|
74
|
-
capacity: ATLAS_SLOTS_X * ATLAS_SLOTS_Y,
|
|
75
|
-
// loaded by the readers, stored into by shader_build_sdf
|
|
76
|
-
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING,
|
|
77
|
-
label: "GPUGeometrySDFManager/atlas",
|
|
78
|
-
});
|
|
481
|
+
this.#device = device;
|
|
482
|
+
this.#geometries = geometries;
|
|
483
|
+
this.#cards = new GPUMeshCardSets(device);
|
|
79
484
|
}
|
|
80
485
|
|
|
81
486
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @
|
|
487
|
+
* The card sets: one capture of a geometry's layout per (geometry, material) pair, which their
|
|
488
|
+
* user acquires and releases. Layouts reach it as they are placed.
|
|
489
|
+
* @returns {GPUMeshCardSets}
|
|
85
490
|
*/
|
|
86
|
-
get
|
|
87
|
-
return this.#
|
|
491
|
+
get cards() {
|
|
492
|
+
return this.#cards;
|
|
88
493
|
}
|
|
89
494
|
|
|
90
495
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
496
|
+
* Level 0's voxel, in the geometry's local units, and the bricks per axis past which it grows. A
|
|
497
|
+
* change rebakes every cache.
|
|
498
|
+
*
|
|
499
|
+
* @param {number} voxel_size
|
|
500
|
+
* @param {number} max_bricks even, at least 2
|
|
94
501
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
502
|
+
configure(voxel_size, max_bricks) {
|
|
503
|
+
assert.isFinite(voxel_size, 'voxel_size');
|
|
504
|
+
assert.greaterThan(voxel_size, 0, 'voxel_size');
|
|
505
|
+
assert.isPositiveInteger(max_bricks, 'max_bricks');
|
|
506
|
+
assert.equal(max_bricks % 2, 0, 'max_bricks must be even');
|
|
507
|
+
|
|
508
|
+
if (voxel_size === this.#voxel_size && max_bricks === this.#max_bricks) {
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
this.#voxel_size = voxel_size;
|
|
513
|
+
this.#max_bricks = max_bricks;
|
|
514
|
+
|
|
515
|
+
const state = this.#state;
|
|
516
|
+
|
|
517
|
+
for (let id = 0; id < state.length; id++) {
|
|
518
|
+
const s = state[id];
|
|
519
|
+
|
|
520
|
+
if (s === HOST_BAKING || s === HOST_RESIDENT) {
|
|
521
|
+
this.#drop(id);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if (this.#references[id] > 0 && state[id] === HOST_NONE) {
|
|
525
|
+
state[id] = HOST_QUEUED;
|
|
526
|
+
this.#queue.push(id);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
if (this.#ring !== null) {
|
|
531
|
+
// every bake was cancelled, so the ring holds stale bricks alone, and a ring sized for
|
|
532
|
+
// the new cap may be needed
|
|
533
|
+
this.#reset_ring();
|
|
534
|
+
}
|
|
97
535
|
}
|
|
98
536
|
|
|
99
537
|
/**
|
|
100
|
-
*
|
|
101
|
-
* also the stride between tiles: the atlas holds them with no border.
|
|
102
|
-
* @return {number}
|
|
538
|
+
* @returns {number}
|
|
103
539
|
*/
|
|
104
|
-
get
|
|
105
|
-
return
|
|
540
|
+
get voxel_size() {
|
|
541
|
+
return this.#voxel_size;
|
|
106
542
|
}
|
|
107
543
|
|
|
108
544
|
/**
|
|
109
|
-
*
|
|
110
|
-
* after {@link build_slots}: when the atlas widens, x or y changes and every tile moves.
|
|
111
|
-
* @return {number[]}
|
|
545
|
+
* @returns {number}
|
|
112
546
|
*/
|
|
113
|
-
get
|
|
114
|
-
|
|
115
|
-
const out = this.#atlas_resolution_in_tiles;
|
|
116
|
-
|
|
117
|
-
out[0] = atlas.slots_x;
|
|
118
|
-
out[1] = atlas.slots_y;
|
|
119
|
-
out[2] = atlas.slots_z;
|
|
120
|
-
|
|
121
|
-
return out;
|
|
547
|
+
get max_bricks() {
|
|
548
|
+
return this.#max_bricks;
|
|
122
549
|
}
|
|
123
550
|
|
|
124
551
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
552
|
+
* One more holder of a geometry's cache; the first queues its bake.
|
|
553
|
+
*
|
|
554
|
+
* @param {GPUGeometryMetadata} record
|
|
555
|
+
* @param {boolean} two_sided whether the holder draws both sides of the geometry
|
|
127
556
|
*/
|
|
128
|
-
|
|
129
|
-
|
|
557
|
+
acquire(record, two_sided) {
|
|
558
|
+
assert.defined(record, 'record');
|
|
559
|
+
assert.isBoolean(two_sided, 'two_sided');
|
|
560
|
+
|
|
561
|
+
const id = record.index;
|
|
562
|
+
|
|
563
|
+
this.#ensure_id(id);
|
|
564
|
+
|
|
565
|
+
this.#records[id] = record;
|
|
566
|
+
|
|
567
|
+
if (two_sided) {
|
|
568
|
+
this.#two_sided_references[id]++;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
if (++this.#references[id] === 1 && this.#state[id] === HOST_NONE) {
|
|
572
|
+
this.#state[id] = HOST_QUEUED;
|
|
573
|
+
this.#queue.push(id);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
this.#holders_changed.push(id);
|
|
130
577
|
}
|
|
131
578
|
|
|
132
579
|
/**
|
|
133
|
-
*
|
|
580
|
+
* One holder fewer. The cache stays until {@link trim}.
|
|
134
581
|
*
|
|
135
|
-
* @param {
|
|
582
|
+
* @param {GPUGeometryMetadata} record
|
|
583
|
+
* @param {boolean} two_sided as the holder acquired it
|
|
136
584
|
*/
|
|
137
|
-
|
|
138
|
-
assert.
|
|
585
|
+
release(record, two_sided) {
|
|
586
|
+
assert.defined(record, 'record');
|
|
587
|
+
assert.isBoolean(two_sided, 'two_sided');
|
|
139
588
|
|
|
140
|
-
const
|
|
589
|
+
const id = record.index;
|
|
590
|
+
|
|
591
|
+
assert.greaterThan(this.#references[id] ?? 0, 0, `geometry ${id} released more often than acquired`);
|
|
141
592
|
|
|
142
|
-
|
|
143
|
-
|
|
593
|
+
if (two_sided) {
|
|
594
|
+
assert.greaterThan(this.#two_sided_references[id], 0, `geometry ${id} released two-sided more often than acquired so`);
|
|
595
|
+
|
|
596
|
+
this.#two_sided_references[id]--;
|
|
597
|
+
}
|
|
144
598
|
|
|
145
|
-
|
|
599
|
+
if (--this.#references[id] === 0) {
|
|
600
|
+
this.#unreferenced.push(id);
|
|
146
601
|
}
|
|
602
|
+
|
|
603
|
+
this.#holders_changed.push(id);
|
|
147
604
|
}
|
|
148
605
|
|
|
149
|
-
|
|
150
|
-
|
|
606
|
+
/**
|
|
607
|
+
* Drop the cache of every geometry whose last holder went since the last trim, and is still gone.
|
|
608
|
+
*/
|
|
609
|
+
trim() {
|
|
610
|
+
const unreferenced = this.#unreferenced;
|
|
611
|
+
|
|
612
|
+
for (let i = 0; i < unreferenced.length; i++) {
|
|
613
|
+
const id = unreferenced[i];
|
|
614
|
+
|
|
615
|
+
if (this.#references[id] === 0 && this.#state[id] !== HOST_ALIAS) {
|
|
616
|
+
this.#drop(id);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
unreferenced.length = 0;
|
|
151
621
|
}
|
|
152
622
|
|
|
623
|
+
/**
|
|
624
|
+
* The geometry manager has let a geometry go: its cache, or its alias, goes now, whatever holds
|
|
625
|
+
* it.
|
|
626
|
+
*
|
|
627
|
+
* @param {GPUGeometryMetadata} record
|
|
628
|
+
*/
|
|
629
|
+
forget(record) {
|
|
630
|
+
assert.defined(record, 'record');
|
|
631
|
+
|
|
632
|
+
const id = record.index;
|
|
633
|
+
|
|
634
|
+
if (id >= this.#state.length) {
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
this.#references[id] = 0;
|
|
639
|
+
this.#two_sided_references[id] = 0;
|
|
640
|
+
this.#drop(id);
|
|
641
|
+
this.#records[id] = undefined;
|
|
642
|
+
}
|
|
153
643
|
|
|
154
644
|
/**
|
|
645
|
+
* Readers of `clone` read `source`'s cache: the hook for a skinned clone, whose unskinned shape is
|
|
646
|
+
* its source's (§6.3). Written once; it follows the source through its bake.
|
|
155
647
|
*
|
|
156
|
-
* @param {
|
|
157
|
-
* @param {
|
|
158
|
-
* @param {GPUGeometryManager} geometries
|
|
648
|
+
* @param {GPUGeometryMetadata} clone
|
|
649
|
+
* @param {GPUGeometryMetadata} source
|
|
159
650
|
*/
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
651
|
+
alias(clone, source) {
|
|
652
|
+
assert.defined(clone, 'clone');
|
|
653
|
+
assert.defined(source, 'source');
|
|
654
|
+
assert.notEqual(clone.index, source.index, 'a geometry cannot alias itself');
|
|
655
|
+
|
|
656
|
+
const id = clone.index;
|
|
657
|
+
|
|
658
|
+
this.#ensure_id(Math.max(id, source.index));
|
|
659
|
+
|
|
660
|
+
if (this.#state[id] === HOST_ALIAS) {
|
|
167
661
|
return;
|
|
168
662
|
}
|
|
169
663
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const slot_resolution = this.tile_resolution;
|
|
178
|
-
const atlas_resolution_in_slots = this.atlas_resolution_in_tiles;
|
|
179
|
-
|
|
180
|
-
for (let i = 0; i < slot_indices.length; i++) {
|
|
181
|
-
const slot_index = slot_indices[i];
|
|
182
|
-
|
|
183
|
-
const buffer_settings = {
|
|
184
|
-
slot_index,
|
|
185
|
-
slot_resolution,
|
|
186
|
-
atlas_resolution_in_slots,
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const wgx = Math.ceil(slot_resolution / SFD_BUILD_WORKGROUP_SIZE[0]);
|
|
191
|
-
const wgy = Math.ceil(slot_resolution / SFD_BUILD_WORKGROUP_SIZE[1]);
|
|
192
|
-
const wgz = Math.ceil(slot_resolution / SFD_BUILD_WORKGROUP_SIZE[2]);
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
*
|
|
196
|
-
* @type {GPUGeometryBVHManager}
|
|
197
|
-
*/
|
|
198
|
-
const blas = geometries.blas;
|
|
199
|
-
|
|
200
|
-
shader_build_sdf.dispatch({
|
|
201
|
-
encoder: command_ctx,
|
|
202
|
-
bindings: {
|
|
203
|
-
settings: buffer_settings,
|
|
204
|
-
blas_lookup: blas.buffer_metadata,
|
|
205
|
-
blas_data: blas.buffer_data,
|
|
206
|
-
geometries: geometries.buffer_metadata,
|
|
207
|
-
// the triangles the query reads, through their meshlets
|
|
208
|
-
meshlet_metadata: geometries.meshlets.buffer_metadata,
|
|
209
|
-
meshlet_data: geometries.meshlets.buffer_data,
|
|
210
|
-
output_texture: this.#atlas.texture.obtainView(),
|
|
211
|
-
},
|
|
212
|
-
group_count_x: wgx,
|
|
213
|
-
group_count_y: wgy,
|
|
214
|
-
group_count_z: wgz,
|
|
215
|
-
});
|
|
664
|
+
this.#drop(id);
|
|
665
|
+
|
|
666
|
+
this.#state[id] = HOST_ALIAS;
|
|
667
|
+
|
|
668
|
+
if (this.#headers !== null) {
|
|
669
|
+
this.#ensure_headers(id + 1);
|
|
670
|
+
this.#write_header_alias(id, source.index);
|
|
216
671
|
}
|
|
217
672
|
|
|
673
|
+
this.#records[id] = clone;
|
|
674
|
+
this.#aliases.set(id, source.index);
|
|
218
675
|
}
|
|
219
676
|
|
|
220
677
|
/**
|
|
221
|
-
*
|
|
222
|
-
* @
|
|
223
|
-
* @return {Promise<Float32Array>}
|
|
678
|
+
* Aliases by clone id, for the headers written when device storage is made.
|
|
679
|
+
* @type {Map<number, number>}
|
|
224
680
|
*/
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
681
|
+
#aliases = new Map();
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* What a reader finds in the geometry's header.
|
|
685
|
+
*
|
|
686
|
+
* @param {GPUGeometryMetadata} record
|
|
687
|
+
* @returns {MeshSDFState}
|
|
688
|
+
*/
|
|
689
|
+
state_of(record) {
|
|
690
|
+
switch (this.#state[record.index] ?? HOST_NONE) {
|
|
691
|
+
case HOST_BAKING:
|
|
692
|
+
return MeshSDFState.Baking;
|
|
693
|
+
case HOST_RESIDENT:
|
|
694
|
+
return MeshSDFState.Resident;
|
|
695
|
+
case HOST_ALIAS:
|
|
696
|
+
return MeshSDFState.Alias;
|
|
697
|
+
default:
|
|
698
|
+
return MeshSDFState.None;
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Geometries whose layout was coarsened by the cap, of those baked: coarser than asked.
|
|
704
|
+
* @returns {number}
|
|
705
|
+
*/
|
|
706
|
+
get coarsened_count() {
|
|
707
|
+
return this.#coarsened_count;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* @returns {number}
|
|
712
|
+
*/
|
|
713
|
+
get resident_count() {
|
|
714
|
+
return this.#resident_count;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
* Geometries admitted and not yet complete.
|
|
719
|
+
* @returns {number}
|
|
720
|
+
*/
|
|
721
|
+
get baking_count() {
|
|
722
|
+
return this.#baking;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* Geometries requested and not yet admitted.
|
|
727
|
+
* @returns {number}
|
|
728
|
+
*/
|
|
729
|
+
get queued_count() {
|
|
730
|
+
let count = 0;
|
|
731
|
+
|
|
732
|
+
for (const id of this.#queue) {
|
|
733
|
+
if (this.#state[id] === HOST_QUEUED) {
|
|
734
|
+
count++;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
return count;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/**
|
|
742
|
+
* Frames whose take the free slots held back, as read back.
|
|
743
|
+
* @returns {number}
|
|
744
|
+
*/
|
|
745
|
+
get starved_frames() {
|
|
746
|
+
return this.#starved_frames;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/**
|
|
750
|
+
* Bricks evaluate has been handed, as read back: classify's survivors, stale ones included.
|
|
751
|
+
* @returns {number}
|
|
752
|
+
*/
|
|
753
|
+
get bricks_evaluated() {
|
|
754
|
+
return this.#bricks_evaluated;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
/**
|
|
758
|
+
* Free slots of the atlas before the last take read back.
|
|
759
|
+
* @returns {number}
|
|
760
|
+
*/
|
|
761
|
+
get free_slots() {
|
|
762
|
+
return this.#free_slots;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* Frames whose bake was skipped because its log could not be read back.
|
|
767
|
+
* @returns {number}
|
|
768
|
+
*/
|
|
769
|
+
get skipped_frames() {
|
|
770
|
+
return this.#skipped_frames;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/**
|
|
774
|
+
* Slots the brick atlas holds.
|
|
775
|
+
* @returns {number}
|
|
776
|
+
*/
|
|
777
|
+
get slot_capacity() {
|
|
778
|
+
return this.#slot_capacity;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Every geometry's header, by geometry id. Replaced when it grows; take it each frame.
|
|
783
|
+
* @returns {GPUBuffer}
|
|
784
|
+
*/
|
|
785
|
+
get headers() {
|
|
786
|
+
this.#ensure_device();
|
|
787
|
+
|
|
788
|
+
return this.#headers;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/**
|
|
792
|
+
* Every brick's entry: a slot or EMPTY. Replaced when it grows; take it each frame.
|
|
793
|
+
* @returns {GPUBuffer}
|
|
794
|
+
*/
|
|
795
|
+
get indirection() {
|
|
796
|
+
this.#ensure_device();
|
|
797
|
+
|
|
798
|
+
return this.#indirection;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
/**
|
|
802
|
+
* The brick atlas, `r8unorm`. Replaced when it grows; take a view each frame.
|
|
803
|
+
* @returns {import("../../texture/GPUTextureContext.js").GPUTextureContext}
|
|
804
|
+
*/
|
|
805
|
+
get texture() {
|
|
806
|
+
this.#ensure_device();
|
|
807
|
+
|
|
808
|
+
return this.#atlas.texture;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Put what `mesh_sdf_sample` and `mesh_sdf_header` read into a reader's bindings, under the names
|
|
813
|
+
* they take.
|
|
814
|
+
*
|
|
815
|
+
* @param {Object} bindings
|
|
816
|
+
* @returns {Object} bindings
|
|
817
|
+
*/
|
|
818
|
+
write_bindings(bindings) {
|
|
819
|
+
bindings.mesh_sdf_headers = this.headers;
|
|
820
|
+
bindings.mesh_sdf_indirection = this.indirection;
|
|
821
|
+
bindings.mesh_sdf_atlas = this.texture.obtainView();
|
|
822
|
+
bindings.mesh_sdf_sampler = MESH_SDF_SAMPLER;
|
|
823
|
+
|
|
824
|
+
return bindings;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
/**
|
|
828
|
+
* @returns {number} bytes
|
|
829
|
+
*/
|
|
830
|
+
get gpu_memory_usage() {
|
|
831
|
+
let bytes = 0;
|
|
832
|
+
|
|
833
|
+
for (const buffer of [this.#headers, this.#indirection, this.#slots, this.#take, this.#ring, this.#classify_ranges, this.#free_ranges]) {
|
|
834
|
+
if (buffer !== null) {
|
|
835
|
+
bytes += buffer.size;
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
if (this.#atlas !== null) {
|
|
840
|
+
bytes += this.#atlas.capacity * MESH_SDF_BRICK_TEXELS ** 3;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
return bytes + this.#cards.gpu_memory_usage;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* Record the frame's bake: queue again what is held for the other side than it was baked for, free
|
|
848
|
+
* what was given back, classify what is admitted, take, evaluate and store up to `budget` bricks,
|
|
849
|
+
* place the cards of what turned resident and move placed layouts into their ranges. Then, with a
|
|
850
|
+
* `capture_budget`, capture up to that many pages of card sets. Records nothing when there is
|
|
851
|
+
* nothing to do.
|
|
852
|
+
*
|
|
853
|
+
* @param {Object} options
|
|
854
|
+
* @param {FrameGraph} options.graph
|
|
855
|
+
* @param {number} options.budget bricks evaluated at most, `mesh_sdf_bake_budget`
|
|
856
|
+
* @param {number} [options.capture_budget] card pages captured at most, `card_capture_budget`; 0
|
|
857
|
+
* captures nothing
|
|
858
|
+
* @param {GPUResidentMaterialContext|null} [options.materials] what the capture shades with, as it
|
|
859
|
+
* stands this frame; needed with a `capture_budget`
|
|
860
|
+
*/
|
|
861
|
+
graph_bake({ graph, budget, capture_budget = 0, materials = null }) {
|
|
862
|
+
assert.defined(graph, 'graph');
|
|
863
|
+
assert.isPositiveInteger(budget, 'budget');
|
|
864
|
+
assert.lessThanOrEqual(budget, MESH_SDF_BAKE_BUDGET_MAX, 'budget');
|
|
865
|
+
assert.isNonNegativeInteger(capture_budget, 'capture_budget');
|
|
866
|
+
assert.lessThanOrEqual(capture_budget, MESH_CARD_CAPTURE_BUDGET_MAX, 'capture_budget');
|
|
867
|
+
|
|
868
|
+
this.#frame++;
|
|
869
|
+
|
|
870
|
+
this.#follow_sides();
|
|
871
|
+
|
|
872
|
+
// the last bake's commands were submitted before this call: what they read may be handed out
|
|
873
|
+
const release_next = this.#release_next;
|
|
874
|
+
|
|
875
|
+
for (let i = 0; i < release_next.length; i++) {
|
|
876
|
+
this.#indirection_allocator.free(release_next[i]);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
release_next.length = 0;
|
|
880
|
+
|
|
881
|
+
const queued_bound = this.#read_queued + (this.#admitted_total - this.#read_admitted);
|
|
882
|
+
|
|
883
|
+
const has_work = this.#queue.length > 0
|
|
884
|
+
|| queued_bound > 0
|
|
885
|
+
|| this.#freed.length > 0
|
|
886
|
+
|| this.#pushes.length > 0
|
|
887
|
+
|| this.#fill_pending
|
|
888
|
+
|| this.#place_queue.length > 0
|
|
889
|
+
|| this.#compact_queue.length > 0;
|
|
890
|
+
|
|
891
|
+
let arena = -1;
|
|
892
|
+
|
|
893
|
+
if (has_work) {
|
|
894
|
+
if (this.#logs_in_flight >= MAX_LOGS_IN_FLIGHT) {
|
|
895
|
+
this.#skipped_frames++;
|
|
896
|
+
} else {
|
|
897
|
+
arena = this.#record_bake(graph, budget, queued_bound);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
if (capture_budget > 0 && this.#cards.has_pending_capture) {
|
|
902
|
+
assert.notNull(materials, 'materials');
|
|
903
|
+
|
|
904
|
+
this.#ensure_device();
|
|
905
|
+
|
|
906
|
+
if (arena === -1) {
|
|
907
|
+
arena = graph_import_buffer(graph, this.#indirection, "mesh_sdf_indirection");
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
const geometries = this.#geometries;
|
|
911
|
+
const blas = this.#blas_bindings;
|
|
912
|
+
|
|
913
|
+
blas.blas_lookup = geometries.blas.buffer_metadata;
|
|
914
|
+
blas.blas_data = geometries.blas.buffer_data;
|
|
915
|
+
blas.geometries = geometries.buffer_metadata;
|
|
916
|
+
blas.meshlet_metadata = geometries.meshlets.buffer_metadata;
|
|
917
|
+
blas.meshlet_data = geometries.meshlets.buffer_data;
|
|
918
|
+
|
|
919
|
+
this.#cards.graph_capture({ graph, budget: capture_budget, arena, headers: this.#headers, materials, blas });
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
/**
|
|
924
|
+
* @param {FrameGraph} graph
|
|
925
|
+
* @param {number} budget
|
|
926
|
+
* @param {number} queued_bound
|
|
927
|
+
* @returns {number} graph handle of the arena as the bake leaves it
|
|
928
|
+
*/
|
|
929
|
+
#record_bake(graph, budget, queued_bound) {
|
|
930
|
+
this.#ensure_device();
|
|
931
|
+
this.#ensure_headers(this.#geometries.__last_geometry_index);
|
|
932
|
+
|
|
933
|
+
this.#admit(queued_bound);
|
|
934
|
+
this.#upload_free_ranges();
|
|
935
|
+
this.#take_placements();
|
|
936
|
+
this.#take_compactions();
|
|
937
|
+
|
|
938
|
+
// room for a completion of every geometry in flight and a record of every placement, and a tally
|
|
939
|
+
// and staging for every brick the budget takes
|
|
940
|
+
this.#ensure_frame(Math.max(1, this.#baking + this.#frame_placements.length / 3), budget);
|
|
941
|
+
|
|
942
|
+
const log_words = MESH_SDF_LOG_HEADER_WORDS + MESH_SDF_LOG_RECORD_WORDS * this.#log_capacity;
|
|
943
|
+
|
|
944
|
+
this.#frame_budget = budget;
|
|
945
|
+
this.#frame_log_capacity = this.#log_capacity;
|
|
946
|
+
this.#frame_log_offset = this.#frame_range.offset;
|
|
947
|
+
this.#frame_log_bytes = 4 * log_words;
|
|
948
|
+
this.#frame_tally_offset = this.#frame_range.offset + log_words;
|
|
949
|
+
this.#frame_bytes = 4 * (log_words + this.#staging_bricks);
|
|
950
|
+
|
|
951
|
+
const data = this.#log_data;
|
|
952
|
+
|
|
953
|
+
const pass = graph.add("Mesh SDF Bake", data, this.#execute);
|
|
954
|
+
|
|
955
|
+
// the arena as it stands after every growth of the frame: the log is read back out of it
|
|
956
|
+
data.arena = pass.write(graph_import_buffer(graph, this.#indirection, "mesh_sdf_indirection"));
|
|
957
|
+
|
|
958
|
+
pass.make_side_effect();
|
|
959
|
+
|
|
960
|
+
const frame = this.#frame;
|
|
961
|
+
const admitted = this.#admitted_total;
|
|
962
|
+
const epoch = this.#ring_epoch;
|
|
963
|
+
const capacity = this.#frame_log_capacity;
|
|
964
|
+
|
|
965
|
+
this.#logs_in_flight++;
|
|
966
|
+
|
|
967
|
+
graph_read_buffer({ graph, buffer: data.arena, offset: 4 * this.#frame_log_offset, size: this.#frame_log_bytes })
|
|
968
|
+
.then(reference => {
|
|
969
|
+
try {
|
|
970
|
+
if (!this.#destroyed) {
|
|
971
|
+
this.#apply_log(new Uint32Array(reference.getValue()), frame, admitted, epoch, capacity);
|
|
972
|
+
}
|
|
973
|
+
} finally {
|
|
974
|
+
reference.release();
|
|
975
|
+
}
|
|
976
|
+
})
|
|
977
|
+
.catch(error => {
|
|
978
|
+
if (!this.#destroyed) {
|
|
979
|
+
// a lost log costs its completions until the geometry is baked again; say so
|
|
980
|
+
console.warn('GPUGeometrySDFManager: bake log readback failed', error);
|
|
981
|
+
}
|
|
982
|
+
})
|
|
983
|
+
.finally(() => {
|
|
984
|
+
this.#logs_in_flight--;
|
|
985
|
+
});
|
|
986
|
+
|
|
987
|
+
return data.arena;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/**
|
|
991
|
+
* Drop and queue again each field whose holders draw another side than it was baked for: two-sided
|
|
992
|
+
* while any of them draws both sides. A field no one holds keeps its side.
|
|
993
|
+
*/
|
|
994
|
+
#follow_sides() {
|
|
995
|
+
const changed = this.#holders_changed;
|
|
996
|
+
|
|
997
|
+
for (let i = 0; i < changed.length; i++) {
|
|
998
|
+
const id = changed[i];
|
|
999
|
+
const state = this.#state[id];
|
|
1000
|
+
|
|
1001
|
+
if (this.#references[id] === 0 || (state !== HOST_BAKING && state !== HOST_RESIDENT)) {
|
|
1002
|
+
// a queued field takes its holders' side when admitted
|
|
1003
|
+
continue;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
if ((this.#two_sided_references[id] > 0) === (this.#two_sided[id] === 1)) {
|
|
1007
|
+
continue;
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
this.#drop(id);
|
|
1011
|
+
|
|
1012
|
+
this.#state[id] = HOST_QUEUED;
|
|
1013
|
+
this.#queue.push(id);
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
changed.length = 0;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
/**
|
|
1020
|
+
* Give the frame's placements their ranges, in the order the geometries turned resident.
|
|
1021
|
+
*/
|
|
1022
|
+
#take_placements() {
|
|
1023
|
+
const queue = this.#place_queue;
|
|
1024
|
+
const placements = this.#frame_placements;
|
|
1025
|
+
|
|
1026
|
+
placements.length = 0;
|
|
1027
|
+
|
|
1028
|
+
let taken = 0;
|
|
1029
|
+
|
|
1030
|
+
while (taken < queue.length && placements.length < 3 * MESH_CARD_PLACEMENTS_PER_FRAME) {
|
|
1031
|
+
const id = queue[taken++];
|
|
1032
|
+
|
|
1033
|
+
if (this.#state[id] !== HOST_RESIDENT || this.#card_state[id] !== CARDS_QUEUED) {
|
|
1034
|
+
// dropped since it was queued
|
|
1035
|
+
continue;
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
const words = this.#placement_words[id];
|
|
1039
|
+
|
|
1040
|
+
this.#ensure_indirection(words);
|
|
1041
|
+
|
|
1042
|
+
const range = this.#indirection_allocator.allocate(words);
|
|
1043
|
+
|
|
1044
|
+
assert.notEqual(range.offset, ALLOCATOR_NO_SPACE, 'card placement allocation after growth');
|
|
1045
|
+
|
|
1046
|
+
this.#card_scratch[id] = range;
|
|
1047
|
+
this.#card_state[id] = CARDS_PLACING;
|
|
1048
|
+
this.#write_header_cards(id, range.offset);
|
|
1049
|
+
|
|
1050
|
+
placements.push(id, range.offset, this.#placement_scratch[id]);
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
queue.copyWithin(0, taken);
|
|
1054
|
+
queue.length -= taken;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
/**
|
|
1058
|
+
* Move the layouts whose placement has been read back into their own ranges, this frame; their
|
|
1059
|
+
* card sets can be captured from here.
|
|
1060
|
+
*/
|
|
1061
|
+
#take_compactions() {
|
|
1062
|
+
const queue = this.#compact_queue;
|
|
1063
|
+
const moves = this.#frame_compactions;
|
|
1064
|
+
|
|
1065
|
+
moves.length = 0;
|
|
1066
|
+
|
|
1067
|
+
for (let i = 0; i < queue.length; i++) {
|
|
1068
|
+
const id = queue[i];
|
|
1069
|
+
|
|
1070
|
+
if (this.#card_state[id] !== CARDS_COMPACTING) {
|
|
1071
|
+
// dropped since
|
|
1072
|
+
continue;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
const source = this.#card_scratch[id];
|
|
1076
|
+
const target = this.#card_ranges[id];
|
|
1077
|
+
|
|
1078
|
+
moves.push(source.offset, target.offset, this.#card_words[id]);
|
|
1079
|
+
|
|
1080
|
+
// the copy reads it this frame
|
|
1081
|
+
this.#release_next.push(source);
|
|
1082
|
+
this.#card_scratch[id] = null;
|
|
1083
|
+
|
|
1084
|
+
this.#card_state[id] = CARDS_PLACED;
|
|
1085
|
+
this.#write_header_cards(id, target.offset);
|
|
1086
|
+
|
|
1087
|
+
this.#cards.set_layout(id, this.#card_pages[id]);
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
queue.length = 0;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
/**
|
|
1094
|
+
* Admit queued geometries in request order: those whose tree is resident, while every brick they
|
|
1095
|
+
* could queue fits on the ring beside what may be on it already.
|
|
1096
|
+
*
|
|
1097
|
+
* @param {number} queued_bound bricks the ring may hold now, at most
|
|
1098
|
+
*/
|
|
1099
|
+
#admit(queued_bound) {
|
|
1100
|
+
const queue = this.#queue;
|
|
1101
|
+
const state = this.#state;
|
|
1102
|
+
const blas = this.#geometries.blas;
|
|
1103
|
+
const layout = this.#layout;
|
|
1104
|
+
|
|
1105
|
+
let bound = queued_bound;
|
|
1106
|
+
let runs = 0;
|
|
1107
|
+
let bricks = 0;
|
|
1108
|
+
let kept = 0;
|
|
1109
|
+
let full = false;
|
|
1110
|
+
|
|
1111
|
+
for (let i = 0; i < queue.length; i++) {
|
|
1112
|
+
const id = queue[i];
|
|
1113
|
+
|
|
1114
|
+
if (state[id] !== HOST_QUEUED) {
|
|
1115
|
+
// dropped while queued
|
|
1116
|
+
continue;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
const record = this.#records[id];
|
|
1120
|
+
|
|
1121
|
+
if (full || blas.get_address(record) === undefined) {
|
|
1122
|
+
// the ring is full this frame, or the tree is not traceable yet
|
|
1123
|
+
queue[kept++] = id;
|
|
1124
|
+
continue;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
layout.compute(record.geometry.bounding_box, this.#voxel_size, this.#max_bricks);
|
|
1128
|
+
|
|
1129
|
+
const count = layout.brick_count;
|
|
1130
|
+
|
|
1131
|
+
if (bound + count > this.#ring_capacity) {
|
|
1132
|
+
// in request order: the rest wait with it
|
|
1133
|
+
full = true;
|
|
1134
|
+
queue[kept++] = id;
|
|
1135
|
+
continue;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
// the geometry's pending word, then its entries
|
|
1139
|
+
this.#ensure_indirection(count + 1);
|
|
1140
|
+
|
|
1141
|
+
const range = this.#indirection_allocator.allocate(count + 1);
|
|
1142
|
+
|
|
1143
|
+
assert.notEqual(range.offset, ALLOCATOR_NO_SPACE, 'indirection allocation after growth');
|
|
1144
|
+
|
|
1145
|
+
this.#ranges[id] = range;
|
|
1146
|
+
this.#brick_count[id] = count;
|
|
1147
|
+
this.#generation[id]++;
|
|
1148
|
+
this.#two_sided[id] = this.#two_sided_references[id] > 0 ? 1 : 0;
|
|
1149
|
+
state[id] = HOST_BAKING;
|
|
1150
|
+
this.#baking++;
|
|
1151
|
+
|
|
1152
|
+
if (layout.coarsened) {
|
|
1153
|
+
this.#coarsened_count++;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
this.#write_header_baking(id, layout, range.offset + 1);
|
|
1157
|
+
|
|
1158
|
+
// level 0's grid, which the cards are placed over
|
|
1159
|
+
const grid = layout.bricks;
|
|
1160
|
+
const placement = mesh_card_placement_of(grid);
|
|
1161
|
+
|
|
1162
|
+
this.#placement_words[id] = placement.words;
|
|
1163
|
+
this.#placement_scratch[id] = placement.histograms;
|
|
1164
|
+
this.#placement_columns[id] = 2 * (grid[0] * grid[1] + grid[1] * grid[2] + grid[0] * grid[2]);
|
|
1165
|
+
|
|
1166
|
+
this.#word_scratch[0] = count;
|
|
1167
|
+
this.#device.queue.writeBuffer(this.#indirection, range.offset * 4, this.#word_scratch, 0, 1);
|
|
1168
|
+
|
|
1169
|
+
this.#classify_scratch = grow_typed(this.#classify_scratch, 2 * (runs + 1));
|
|
1170
|
+
this.#classify_scratch[2 * runs] = bricks;
|
|
1171
|
+
this.#classify_scratch[2 * runs + 1] = id;
|
|
1172
|
+
|
|
1173
|
+
runs++;
|
|
1174
|
+
bricks += count;
|
|
1175
|
+
bound += count;
|
|
1176
|
+
this.#admitted_total += count;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
queue.length = kept;
|
|
1180
|
+
|
|
1181
|
+
this.#frame_classify_runs = runs;
|
|
1182
|
+
this.#frame_classify_bricks = bricks;
|
|
1183
|
+
|
|
1184
|
+
if (runs > 0) {
|
|
1185
|
+
this.#classify_ranges = this.#ensure_runs_buffer(this.#classify_ranges, runs, "classify");
|
|
1186
|
+
this.#device.queue.writeBuffer(this.#classify_ranges, 0, this.#classify_scratch, 0, 2 * runs);
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
#upload_free_ranges() {
|
|
1191
|
+
const freed = this.#freed;
|
|
1192
|
+
const runs = freed.length / 2;
|
|
1193
|
+
|
|
1194
|
+
let entries = 0;
|
|
1195
|
+
|
|
1196
|
+
if (runs > 0) {
|
|
1197
|
+
this.#free_scratch = grow_typed(this.#free_scratch, 2 * runs);
|
|
1198
|
+
|
|
1199
|
+
for (let i = 0; i < runs; i++) {
|
|
1200
|
+
this.#free_scratch[2 * i] = entries;
|
|
1201
|
+
this.#free_scratch[2 * i + 1] = freed[2 * i];
|
|
1202
|
+
|
|
1203
|
+
entries += freed[2 * i + 1];
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
this.#free_ranges = this.#ensure_runs_buffer(this.#free_ranges, runs, "free");
|
|
1207
|
+
this.#device.queue.writeBuffer(this.#free_ranges, 0, this.#free_scratch, 0, 2 * runs);
|
|
1208
|
+
|
|
1209
|
+
freed.length = 0;
|
|
1210
|
+
|
|
1211
|
+
// read by this frame's free pass
|
|
1212
|
+
const freeing = this.#freeing;
|
|
1213
|
+
|
|
1214
|
+
for (let i = 0; i < freeing.length; i++) {
|
|
1215
|
+
this.#release_next.push(freeing[i]);
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
freeing.length = 0;
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
this.#frame_free_runs = runs;
|
|
1222
|
+
this.#frame_free_entries = entries;
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
/**
|
|
1226
|
+
* {@link #execute_bake}, bound once.
|
|
1227
|
+
* @type {function(Object, Object, Object): void}
|
|
1228
|
+
*/
|
|
1229
|
+
#execute = (data, resources, context) => this.#execute_bake(data, resources, context);
|
|
1230
|
+
|
|
1231
|
+
/**
|
|
1232
|
+
* @param {Object} data
|
|
1233
|
+
* @param {import("../../../../engine/graphics/render/frame_graph/FramePassResources.js").FramePassResources} resources
|
|
1234
|
+
* @param {import("../../../device/graph/GraphicsExecutionContext.js").GraphicsExecutionContext} context
|
|
1235
|
+
*/
|
|
1236
|
+
#execute_bake(data, resources, context) {
|
|
1237
|
+
const encoder = context.encoder;
|
|
1238
|
+
const arena = resources.get(data.arena);
|
|
1239
|
+
const b = this.#bindings;
|
|
1240
|
+
|
|
1241
|
+
// the log and the tallies
|
|
1242
|
+
encoder.clearBuffer(arena, 4 * this.#frame_log_offset, this.#frame_bytes);
|
|
1243
|
+
|
|
1244
|
+
if (this.#fill_pending) {
|
|
1245
|
+
this.#fill_pending = false;
|
|
1246
|
+
|
|
1247
|
+
shader_slot_stack_fill.dispatch({
|
|
1248
|
+
encoder,
|
|
1249
|
+
group_count_x: Math.min(Math.ceil(this.#slot_capacity / SLOT_STACK_FILL_WORKGROUP_SIZE), WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION),
|
|
1250
|
+
bindings: { capacity: this.#slot_capacity, slots: this.#slots },
|
|
1251
|
+
});
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
const pushes = this.#pushes;
|
|
1255
|
+
|
|
1256
|
+
for (let i = 0; i < pushes.length; i += 2) {
|
|
1257
|
+
const settings = this.#push_settings;
|
|
1258
|
+
|
|
1259
|
+
settings.first = pushes[i];
|
|
1260
|
+
settings.count = pushes[i + 1];
|
|
1261
|
+
|
|
1262
|
+
shader_slot_stack_push_range.dispatch({
|
|
1263
|
+
encoder,
|
|
1264
|
+
group_count_x: Math.min(Math.ceil(settings.count / SLOT_STACK_PUSH_RANGE_WORKGROUP_SIZE), WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION),
|
|
1265
|
+
bindings: { settings, counts: arena, slots: this.#slots },
|
|
1266
|
+
});
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
pushes.length = 0;
|
|
1270
|
+
|
|
1271
|
+
const geometries = this.#geometries;
|
|
1272
|
+
|
|
1273
|
+
b.blas_lookup = geometries.blas.buffer_metadata;
|
|
1274
|
+
b.blas_data = geometries.blas.buffer_data;
|
|
1275
|
+
b.geometries = geometries.buffer_metadata;
|
|
1276
|
+
b.meshlet_metadata = geometries.meshlets.buffer_metadata;
|
|
1277
|
+
b.meshlet_data = geometries.meshlets.buffer_data;
|
|
1278
|
+
b.mesh_sdf_headers = this.#headers;
|
|
1279
|
+
b.mesh_sdf_indirection = arena;
|
|
1280
|
+
b.mesh_sdf_slots = this.#slots;
|
|
1281
|
+
b.mesh_sdf_ring = this.#ring;
|
|
1282
|
+
b.mesh_sdf_take = this.#take;
|
|
1283
|
+
|
|
1284
|
+
if (this.#frame_free_entries > 0) {
|
|
1285
|
+
const groups = Math.ceil(this.#frame_free_entries / MESH_SDF_BAKE_WORKGROUP_SIZE);
|
|
1286
|
+
const groups_x = Math.min(groups, WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION);
|
|
1287
|
+
const settings = this.#free_settings;
|
|
1288
|
+
|
|
1289
|
+
settings.range_count = this.#frame_free_runs;
|
|
1290
|
+
settings.entry_count = this.#frame_free_entries;
|
|
1291
|
+
settings.groups_x = groups_x;
|
|
1292
|
+
|
|
1293
|
+
b.settings = settings;
|
|
1294
|
+
b.mesh_sdf_ranges = this.#free_ranges;
|
|
1295
|
+
|
|
1296
|
+
shader_mesh_sdf_free.dispatch({
|
|
1297
|
+
encoder,
|
|
1298
|
+
group_count_x: groups_x,
|
|
1299
|
+
group_count_y: Math.ceil(groups / groups_x),
|
|
1300
|
+
bindings: b,
|
|
1301
|
+
});
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
if (this.#frame_classify_bricks > 0) {
|
|
1305
|
+
const groups = Math.ceil(this.#frame_classify_bricks / MESH_SDF_BAKE_WORKGROUP_SIZE);
|
|
1306
|
+
const groups_x = Math.min(groups, WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION);
|
|
1307
|
+
const settings = this.#classify_settings;
|
|
1308
|
+
|
|
1309
|
+
settings.range_count = this.#frame_classify_runs;
|
|
1310
|
+
settings.brick_count = this.#frame_classify_bricks;
|
|
1311
|
+
settings.groups_x = groups_x;
|
|
1312
|
+
settings.ring_capacity = this.#ring_capacity;
|
|
1313
|
+
settings.log_offset = this.#frame_log_offset;
|
|
1314
|
+
settings.log_capacity = this.#frame_log_capacity;
|
|
1315
|
+
|
|
1316
|
+
b.settings = settings;
|
|
1317
|
+
b.mesh_sdf_ranges = this.#classify_ranges;
|
|
1318
|
+
|
|
1319
|
+
shader_mesh_sdf_classify.dispatch({
|
|
1320
|
+
encoder,
|
|
1321
|
+
group_count_x: groups_x,
|
|
1322
|
+
group_count_y: Math.ceil(groups / groups_x),
|
|
1323
|
+
bindings: b,
|
|
1324
|
+
});
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
this.#take_settings.budget = this.#frame_budget;
|
|
1328
|
+
this.#take_settings.log_offset = this.#frame_log_offset;
|
|
1329
|
+
b.settings = this.#take_settings;
|
|
1330
|
+
|
|
1331
|
+
shader_mesh_sdf_take.dispatch({ encoder, bindings: b });
|
|
1332
|
+
|
|
1333
|
+
const evaluate_settings = this.#evaluate_settings;
|
|
1334
|
+
|
|
1335
|
+
evaluate_settings.ring_capacity = this.#ring_capacity;
|
|
1336
|
+
evaluate_settings.slot_capacity = this.#slot_capacity;
|
|
1337
|
+
evaluate_settings.log_offset = this.#frame_log_offset;
|
|
1338
|
+
evaluate_settings.log_capacity = this.#frame_log_capacity;
|
|
1339
|
+
evaluate_settings.tally_offset = this.#frame_tally_offset;
|
|
1340
|
+
|
|
1341
|
+
b.settings = evaluate_settings;
|
|
1342
|
+
|
|
1343
|
+
shader_mesh_sdf_evaluate.dispatchIndirect({
|
|
1344
|
+
encoder,
|
|
1345
|
+
bindings: b,
|
|
1346
|
+
command: this.#take,
|
|
1347
|
+
command_offset: MESH_SDF_TAKE_DISPATCH * 4,
|
|
1348
|
+
});
|
|
1349
|
+
|
|
1350
|
+
this.#store_settings.ring_capacity = this.#ring_capacity;
|
|
1351
|
+
b.settings = this.#store_settings;
|
|
1352
|
+
b.mesh_sdf_atlas_store = this.#atlas.texture.obtainView();
|
|
1353
|
+
|
|
1354
|
+
shader_mesh_sdf_store.dispatchIndirect({
|
|
1355
|
+
encoder,
|
|
1356
|
+
bindings: b,
|
|
1357
|
+
command: this.#take,
|
|
1358
|
+
command_offset: MESH_SDF_TAKE_DISPATCH * 4,
|
|
1359
|
+
});
|
|
1360
|
+
|
|
1361
|
+
// card placement, a geometry at a time over its level-0 entries: the scratch cleared, then
|
|
1362
|
+
// histogram, split, merge, pages and log
|
|
1363
|
+
const placements = this.#frame_placements;
|
|
1364
|
+
|
|
1365
|
+
for (let i = 0; i < placements.length; i += 3) {
|
|
1366
|
+
const id = placements[i];
|
|
1367
|
+
const first = placements[i + 1];
|
|
1368
|
+
const scratch = placements[i + 2];
|
|
1369
|
+
|
|
1370
|
+
encoder.clearBuffer(arena, 4 * (first + scratch), 4 * (this.#placement_words[id] - scratch));
|
|
1371
|
+
|
|
1372
|
+
const histogram = this.#histogram_settings;
|
|
1373
|
+
|
|
1374
|
+
histogram.geometry = id;
|
|
1375
|
+
histogram.columns = this.#placement_columns[id];
|
|
1376
|
+
b.settings = histogram;
|
|
1377
|
+
|
|
1378
|
+
shader_mesh_cards_histogram.dispatch({
|
|
1379
|
+
encoder,
|
|
1380
|
+
group_count_x: Math.ceil(histogram.columns / MESH_SDF_BAKE_WORKGROUP_SIZE),
|
|
1381
|
+
bindings: b,
|
|
1382
|
+
});
|
|
1383
|
+
|
|
1384
|
+
this.#split_settings.geometry = id;
|
|
1385
|
+
b.settings = this.#split_settings;
|
|
1386
|
+
|
|
1387
|
+
shader_mesh_cards_split.dispatch({ encoder, bindings: b });
|
|
1388
|
+
|
|
1389
|
+
this.#merge_settings.geometry = id;
|
|
1390
|
+
b.settings = this.#merge_settings;
|
|
1391
|
+
|
|
1392
|
+
shader_mesh_cards_merge.dispatch({ encoder, bindings: b });
|
|
1393
|
+
|
|
1394
|
+
this.#pages_settings.geometry = id;
|
|
1395
|
+
b.settings = this.#pages_settings;
|
|
1396
|
+
|
|
1397
|
+
shader_mesh_cards_pages.dispatchIndirect({
|
|
1398
|
+
encoder,
|
|
1399
|
+
bindings: b,
|
|
1400
|
+
command: this.#take,
|
|
1401
|
+
command_offset: MESH_SDF_TAKE_PLACE_DISPATCH * 4,
|
|
1402
|
+
});
|
|
1403
|
+
|
|
1404
|
+
const log = this.#place_log_settings;
|
|
1405
|
+
|
|
1406
|
+
log.geometry = id;
|
|
1407
|
+
log.log_offset = this.#frame_log_offset;
|
|
1408
|
+
log.log_capacity = this.#frame_log_capacity;
|
|
1409
|
+
b.settings = log;
|
|
1410
|
+
|
|
1411
|
+
shader_mesh_cards_log.dispatch({ encoder, bindings: b });
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
// placed layouts into ranges of their own size
|
|
1415
|
+
const moves = this.#frame_compactions;
|
|
1416
|
+
|
|
1417
|
+
for (let i = 0; i < moves.length; i += 3) {
|
|
1418
|
+
const settings = this.#compact_settings;
|
|
1419
|
+
const groups = Math.ceil(moves[i + 2] / MESH_SDF_BAKE_WORKGROUP_SIZE);
|
|
1420
|
+
const groups_x = Math.min(groups, WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION);
|
|
1421
|
+
|
|
1422
|
+
settings.source = moves[i];
|
|
1423
|
+
settings.destination = moves[i + 1];
|
|
1424
|
+
settings.count = moves[i + 2];
|
|
1425
|
+
settings.groups_x = groups_x;
|
|
1426
|
+
b.settings = settings;
|
|
1427
|
+
|
|
1428
|
+
shader_mesh_cards_compact.dispatch({
|
|
1429
|
+
encoder,
|
|
1430
|
+
group_count_x: groups_x,
|
|
1431
|
+
group_count_y: Math.ceil(groups / groups_x),
|
|
1432
|
+
bindings: b,
|
|
1433
|
+
});
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
/**
|
|
1438
|
+
* @param {Uint32Array} words
|
|
1439
|
+
* @param {number} frame the frame the log is of
|
|
1440
|
+
* @param {number} admitted {@link #admitted_total} as that frame left it
|
|
1441
|
+
* @param {number} epoch {@link #ring_epoch} as that frame left it
|
|
1442
|
+
* @param {number} capacity records the log held
|
|
1443
|
+
*/
|
|
1444
|
+
#apply_log(words, frame, admitted, epoch, capacity) {
|
|
1445
|
+
if (epoch === this.#ring_epoch && frame > this.#read_frame) {
|
|
1446
|
+
this.#read_frame = frame;
|
|
1447
|
+
this.#read_queued = words[MESH_SDF_LOG_QUEUED];
|
|
1448
|
+
this.#read_admitted = admitted;
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
this.#bricks_evaluated += words[MESH_SDF_LOG_TAKEN];
|
|
1452
|
+
|
|
1453
|
+
if (frame === this.#read_frame) {
|
|
1454
|
+
this.#free_slots = words[MESH_SDF_LOG_FREE_SLOTS];
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
if (words[MESH_SDF_LOG_STARVED] !== 0) {
|
|
1458
|
+
this.#starved_frames++;
|
|
1459
|
+
|
|
1460
|
+
// a log from before the last growth asked for what that growth gave
|
|
1461
|
+
if (frame > this.#grown_frame) {
|
|
1462
|
+
this.#grow_slots();
|
|
1463
|
+
this.#grown_frame = this.#frame;
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
const count = words[MESH_SDF_LOG_COMPLETIONS];
|
|
1468
|
+
|
|
1469
|
+
assert.lessThanOrEqual(count, capacity, 'bake log overflowed: a geometry completed that was not in flight');
|
|
1470
|
+
|
|
1471
|
+
for (let i = 0; i < count; i++) {
|
|
1472
|
+
const word = MESH_SDF_LOG_HEADER_WORDS + i * MESH_SDF_LOG_RECORD_WORDS;
|
|
1473
|
+
const marked = words[word];
|
|
1474
|
+
|
|
1475
|
+
if ((marked & MESH_SDF_LOG_PLACED) !== 0) {
|
|
1476
|
+
this.#apply_placed((marked & ~MESH_SDF_LOG_PLACED) >>> 0, words[word + 1], words[word + 2], words[word + 3]);
|
|
1477
|
+
continue;
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
const id = marked;
|
|
1481
|
+
|
|
1482
|
+
if (this.#state[id] !== HOST_BAKING || this.#generation[id] !== words[word + 1]) {
|
|
1483
|
+
// of a bake dropped since
|
|
1484
|
+
continue;
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
this.#state[id] = HOST_RESIDENT;
|
|
1488
|
+
this.#baking--;
|
|
1489
|
+
this.#resident_count++;
|
|
1490
|
+
|
|
1491
|
+
this.#word_scratch[0] = MeshSDFState.Resident;
|
|
1492
|
+
this.#device.queue.writeBuffer(this.#headers, id * HEADER_BYTES + HEADER_STATE, this.#word_scratch, 0, 1);
|
|
1493
|
+
|
|
1494
|
+
this.#card_state[id] = CARDS_QUEUED;
|
|
1495
|
+
this.#place_queue.push(id);
|
|
1496
|
+
|
|
1497
|
+
this.onBaked.send1(id);
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
/**
|
|
1502
|
+
* A geometry's cards are placed, with `columns` over every card and `pages` pages: a range of that
|
|
1503
|
+
* size for the layout, which the next bake moves it into.
|
|
1504
|
+
*
|
|
1505
|
+
* @param {number} id
|
|
1506
|
+
* @param {number} generation the bake's the placement read
|
|
1507
|
+
* @param {number} columns
|
|
1508
|
+
* @param {number} pages
|
|
1509
|
+
*/
|
|
1510
|
+
#apply_placed(id, generation, columns, pages) {
|
|
1511
|
+
if (this.#state[id] !== HOST_RESIDENT || this.#generation[id] !== generation || this.#card_state[id] !== CARDS_PLACING) {
|
|
1512
|
+
// of a placement whose geometry was dropped since
|
|
1513
|
+
return;
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
const words = mesh_card_layout_words(columns, pages);
|
|
1517
|
+
|
|
1518
|
+
this.#ensure_indirection(words);
|
|
1519
|
+
|
|
1520
|
+
const range = this.#indirection_allocator.allocate(words);
|
|
1521
|
+
|
|
1522
|
+
assert.notEqual(range.offset, ALLOCATOR_NO_SPACE, 'card layout allocation after growth');
|
|
1523
|
+
|
|
1524
|
+
this.#card_ranges[id] = range;
|
|
1525
|
+
this.#card_pages[id] = pages;
|
|
1526
|
+
this.#card_words[id] = words;
|
|
1527
|
+
this.#card_state[id] = CARDS_COMPACTING;
|
|
1528
|
+
this.#compact_queue.push(id);
|
|
1529
|
+
}
|
|
1530
|
+
|
|
1531
|
+
/**
|
|
1532
|
+
* @param {number} id
|
|
1533
|
+
* @param {number} offset the layout's first word in the arena
|
|
1534
|
+
*/
|
|
1535
|
+
#write_header_cards(id, offset) {
|
|
1536
|
+
this.#word_scratch[0] = offset;
|
|
1537
|
+
this.#device.queue.writeBuffer(this.#headers, id * HEADER_BYTES + HEADER_CARDS, this.#word_scratch, 0, 1);
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
/**
|
|
1541
|
+
* Give back a geometry's cards: its ranges once the passes reading them are submitted, its card
|
|
1542
|
+
* sets back to waiting.
|
|
1543
|
+
*
|
|
1544
|
+
* @param {number} id
|
|
1545
|
+
*/
|
|
1546
|
+
#drop_cards(id) {
|
|
1547
|
+
if (this.#card_state[id] === CARDS_NONE) {
|
|
1548
|
+
return;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
this.#card_state[id] = CARDS_NONE;
|
|
1552
|
+
|
|
1553
|
+
for (const ranges of [this.#card_scratch, this.#card_ranges]) {
|
|
1554
|
+
const range = ranges[id];
|
|
1555
|
+
|
|
1556
|
+
if (range !== null && range !== undefined) {
|
|
1557
|
+
this.#release_next.push(range);
|
|
1558
|
+
ranges[id] = null;
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
this.#cards.drop_layout(id);
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
/**
|
|
1566
|
+
* Drop whatever the id holds: a place in the queue, a bake, a resident cache, an alias.
|
|
1567
|
+
*
|
|
1568
|
+
* @param {number} id
|
|
1569
|
+
*/
|
|
1570
|
+
#drop(id) {
|
|
1571
|
+
const state = this.#state[id];
|
|
1572
|
+
|
|
1573
|
+
if (state === HOST_NONE) {
|
|
1574
|
+
return;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
this.#state[id] = HOST_NONE;
|
|
1578
|
+
|
|
1579
|
+
if (state === HOST_QUEUED) {
|
|
1580
|
+
return;
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
if (state === HOST_ALIAS) {
|
|
1584
|
+
this.#aliases.delete(id);
|
|
1585
|
+
} else {
|
|
1586
|
+
if (state === HOST_BAKING) {
|
|
1587
|
+
this.#baking--;
|
|
1588
|
+
} else {
|
|
1589
|
+
this.#resident_count--;
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
const range = this.#ranges[id];
|
|
1593
|
+
|
|
1594
|
+
this.#freed.push(range.offset + 1, this.#brick_count[id]);
|
|
1595
|
+
this.#freeing.push(range);
|
|
1596
|
+
this.#ranges[id] = null;
|
|
1597
|
+
|
|
1598
|
+
this.#drop_cards(id);
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
// bricks of this id still on the ring are stale from here on, by the state
|
|
1602
|
+
if (this.#headers !== null) {
|
|
1603
|
+
this.#word_scratch[0] = MeshSDFState.None;
|
|
1604
|
+
this.#device.queue.writeBuffer(this.#headers, id * HEADER_BYTES + HEADER_STATE, this.#word_scratch, 0, 1);
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
/**
|
|
1609
|
+
* @param {number} id
|
|
1610
|
+
* @param {MeshSDFLayout} layout
|
|
1611
|
+
* @param {number} indirection
|
|
1612
|
+
*/
|
|
1613
|
+
#write_header_baking(id, layout, indirection) {
|
|
1614
|
+
const view = this.#header_scratch;
|
|
1615
|
+
|
|
1616
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
1617
|
+
view.setFloat32(HEADER_ORIGIN + 4 * axis, layout.origin[axis], true);
|
|
1618
|
+
view.setUint32(HEADER_BRICKS + 4 * axis, layout.bricks[axis], true);
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
view.setFloat32(HEADER_VOXEL, layout.voxel, true);
|
|
1622
|
+
view.setUint32(HEADER_LEVEL_COUNT, layout.level_count, true);
|
|
1623
|
+
view.setUint32(HEADER_INDIRECTION, indirection, true);
|
|
1624
|
+
view.setUint32(HEADER_CARDS, GPU_DATABASE_NULL, true);
|
|
1625
|
+
view.setUint32(HEADER_STATE, MeshSDFState.Baking, true);
|
|
1626
|
+
view.setUint32(HEADER_SOURCE, GPU_DATABASE_NULL, true);
|
|
1627
|
+
view.setUint32(HEADER_GENERATION, this.#generation[id], true);
|
|
1628
|
+
view.setUint32(HEADER_TWO_SIDED, this.#two_sided[id], true);
|
|
1629
|
+
|
|
1630
|
+
this.#device.queue.writeBuffer(this.#headers, id * HEADER_BYTES, view.buffer, 0, HEADER_BYTES);
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1633
|
+
/**
|
|
1634
|
+
* @param {number} id
|
|
1635
|
+
* @param {number} source
|
|
1636
|
+
*/
|
|
1637
|
+
#write_header_alias(id, source) {
|
|
1638
|
+
const view = this.#header_scratch;
|
|
1639
|
+
|
|
1640
|
+
new Uint8Array(view.buffer).fill(0);
|
|
1641
|
+
|
|
1642
|
+
view.setUint32(HEADER_CARDS, GPU_DATABASE_NULL, true);
|
|
1643
|
+
view.setUint32(HEADER_STATE, MeshSDFState.Alias, true);
|
|
1644
|
+
view.setUint32(HEADER_SOURCE, source, true);
|
|
1645
|
+
view.setUint32(HEADER_GENERATION, this.#generation[id], true);
|
|
1646
|
+
|
|
1647
|
+
this.#device.queue.writeBuffer(this.#headers, id * HEADER_BYTES, view.buffer, 0, HEADER_BYTES);
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1650
|
+
/**
|
|
1651
|
+
* @param {number} id
|
|
1652
|
+
*/
|
|
1653
|
+
#ensure_id(id) {
|
|
1654
|
+
const length = id + 1;
|
|
1655
|
+
|
|
1656
|
+
this.#references = grow_typed(this.#references, length);
|
|
1657
|
+
this.#two_sided_references = grow_typed(this.#two_sided_references, length);
|
|
1658
|
+
this.#two_sided = grow_typed(this.#two_sided, length);
|
|
1659
|
+
this.#state = grow_typed(this.#state, length);
|
|
1660
|
+
this.#generation = grow_typed(this.#generation, length);
|
|
1661
|
+
this.#brick_count = grow_typed(this.#brick_count, length);
|
|
1662
|
+
this.#card_state = grow_typed(this.#card_state, length);
|
|
1663
|
+
this.#placement_words = grow_typed(this.#placement_words, length);
|
|
1664
|
+
this.#placement_scratch = grow_typed(this.#placement_scratch, length);
|
|
1665
|
+
this.#placement_columns = grow_typed(this.#placement_columns, length);
|
|
1666
|
+
this.#card_pages = grow_typed(this.#card_pages, length);
|
|
1667
|
+
this.#card_words = grow_typed(this.#card_words, length);
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
#ensure_device() {
|
|
1671
|
+
if (this.#headers !== null) {
|
|
1672
|
+
return;
|
|
1673
|
+
}
|
|
1674
|
+
|
|
1675
|
+
const device = this.#device;
|
|
1676
|
+
|
|
1677
|
+
this.#headers = this.#create_buffer("headers", HEADER_BYTES * 64, GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC);
|
|
1678
|
+
this.#header_capacity = 64;
|
|
1679
|
+
|
|
1680
|
+
this.#indirection_capacity = INITIAL_ARENA_WORDS;
|
|
1681
|
+
this.#indirection = this.#create_buffer("indirection", 4 * this.#indirection_capacity, GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST);
|
|
1682
|
+
this.#indirection_allocator = new OffsetAllocator(this.#indirection_capacity);
|
|
1683
|
+
|
|
1684
|
+
// the counters are the arena's first words, where every pass finds them
|
|
1685
|
+
const counters = this.#indirection_allocator.allocate(MESH_SDF_COUNTER_WORDS);
|
|
1686
|
+
|
|
1687
|
+
assert.equal(counters.offset, 0, 'the counters are the arena\'s first allocation');
|
|
1688
|
+
|
|
1689
|
+
this.#atlas = new GPUTileAtlas3D({
|
|
1690
|
+
device,
|
|
1691
|
+
formats: ["r8unorm"],
|
|
1692
|
+
content_size: [MESH_SDF_BRICK_TEXELS, MESH_SDF_BRICK_TEXELS, MESH_SDF_BRICK_TEXELS],
|
|
1693
|
+
border: 0,
|
|
1694
|
+
slots_x: ATLAS_SLOTS_XY,
|
|
1695
|
+
slots_y: ATLAS_SLOTS_XY,
|
|
1696
|
+
capacity: INITIAL_SLOT_CAPACITY,
|
|
1697
|
+
// sampled by the readers, stored into by the bake's store pass
|
|
1698
|
+
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING,
|
|
1699
|
+
label: "GPUGeometrySDFManager/bricks",
|
|
1700
|
+
});
|
|
1701
|
+
|
|
1702
|
+
this.#atlas.reserve(INITIAL_SLOT_CAPACITY);
|
|
1703
|
+
|
|
1704
|
+
this.#slot_capacity = INITIAL_SLOT_CAPACITY;
|
|
1705
|
+
this.#slots = this.#create_buffer("slots", 4 * this.#slot_capacity, GPUBufferUsage.COPY_SRC);
|
|
1706
|
+
this.#fill_pending = true;
|
|
1707
|
+
|
|
1708
|
+
this.#take = this.#create_buffer("take", 4 * MESH_SDF_TAKE_WORDS, GPUBufferUsage.INDIRECT);
|
|
1709
|
+
|
|
1710
|
+
this.#word_scratch[0] = this.#slot_capacity;
|
|
1711
|
+
this.#word_scratch[1] = 0;
|
|
1712
|
+
this.#word_scratch[2] = 0;
|
|
1713
|
+
this.#word_scratch[3] = 0;
|
|
1714
|
+
device.queue.writeBuffer(this.#indirection, 0, this.#word_scratch, 0, MESH_SDF_COUNTER_WORDS);
|
|
1715
|
+
|
|
1716
|
+
this.#reset_ring();
|
|
1717
|
+
|
|
1718
|
+
this.#ensure_frame(INITIAL_LOG_CAPACITY, 1);
|
|
1719
|
+
|
|
1720
|
+
// aliases made before there was a header to write them into
|
|
1721
|
+
for (const [id, source] of this.#aliases) {
|
|
1722
|
+
this.#ensure_headers(id + 1);
|
|
1723
|
+
this.#write_header_alias(id, source);
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
/**
|
|
1728
|
+
* A ring for twice the bricks of the largest geometry the cap allows, emptied.
|
|
1729
|
+
*/
|
|
1730
|
+
#reset_ring() {
|
|
1731
|
+
const capacity = 2 ** Math.ceil(Math.log2(2 * max_bricks_of_a_geometry(this.#max_bricks)));
|
|
1732
|
+
|
|
1733
|
+
if (this.#ring === null || this.#ring_capacity !== capacity) {
|
|
1734
|
+
this.#ring?.destroy();
|
|
1735
|
+
this.#ring_capacity = capacity;
|
|
1736
|
+
// copied from when the staging grows
|
|
1737
|
+
this.#ring = this.#create_buffer("ring", 16 * (capacity + MESH_SDF_STAGING_VEC4S * this.#staging_bricks), GPUBufferUsage.COPY_SRC);
|
|
1738
|
+
}
|
|
1739
|
+
|
|
1740
|
+
// head and tail
|
|
1741
|
+
this.#word_scratch[0] = 0;
|
|
1742
|
+
this.#word_scratch[1] = 0;
|
|
1743
|
+
this.#device.queue.writeBuffer(this.#indirection, 4, this.#word_scratch, 0, 2);
|
|
1744
|
+
|
|
1745
|
+
this.#ring_epoch++;
|
|
1746
|
+
this.#read_queued = 0;
|
|
1747
|
+
this.#read_admitted = this.#admitted_total;
|
|
1748
|
+
}
|
|
1749
|
+
|
|
1750
|
+
/**
|
|
1751
|
+
* @param {number} id_count
|
|
1752
|
+
*/
|
|
1753
|
+
#ensure_headers(id_count) {
|
|
1754
|
+
if (id_count > this.#header_capacity) {
|
|
1755
|
+
let capacity = this.#header_capacity;
|
|
1756
|
+
|
|
1757
|
+
while (capacity < id_count) {
|
|
1758
|
+
capacity *= 2;
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
this.#headers = this.#regrow(this.#headers, "headers", HEADER_BYTES * capacity, GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC);
|
|
1762
|
+
this.#header_capacity = capacity;
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1766
|
+
/**
|
|
1767
|
+
* Room for a frame: a log for `records` completions and a tally for each of `bricks` bricks taken,
|
|
1768
|
+
* in one range of the arena, and staging for the bricks in the ring. Neither shrinks. A larger range
|
|
1769
|
+
* is a new one and nothing is copied, since the frame's words are written afresh every frame; the
|
|
1770
|
+
* ring's entries are copied when its staging grows.
|
|
1771
|
+
*
|
|
1772
|
+
* @param {number} records
|
|
1773
|
+
* @param {number} bricks
|
|
1774
|
+
*/
|
|
1775
|
+
#ensure_frame(records, bricks) {
|
|
1776
|
+
if (this.#frame_range !== null && records <= this.#log_capacity && bricks <= this.#staging_bricks) {
|
|
1777
|
+
return;
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
let log_capacity = Math.max(1, this.#log_capacity);
|
|
1781
|
+
|
|
1782
|
+
while (log_capacity < records) {
|
|
1783
|
+
log_capacity *= 2;
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
const staging = Math.max(bricks, this.#staging_bricks);
|
|
1787
|
+
|
|
1788
|
+
if (this.#frame_range !== null) {
|
|
1789
|
+
this.#indirection_allocator.free(this.#frame_range);
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
const words = MESH_SDF_LOG_HEADER_WORDS + MESH_SDF_LOG_RECORD_WORDS * log_capacity + staging;
|
|
1793
|
+
|
|
1794
|
+
this.#ensure_indirection(words);
|
|
1795
|
+
|
|
1796
|
+
this.#frame_range = this.#indirection_allocator.allocate(words);
|
|
1797
|
+
this.#log_capacity = log_capacity;
|
|
1798
|
+
|
|
1799
|
+
if (staging > this.#staging_bricks) {
|
|
1800
|
+
this.#staging_bricks = staging;
|
|
1801
|
+
this.#ring = this.#regrow(this.#ring, "ring", 16 * (this.#ring_capacity + MESH_SDF_STAGING_VEC4S * staging), 0);
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
/**
|
|
1806
|
+
* Room in the indirection for an allocation of `count` entries.
|
|
1807
|
+
*
|
|
1808
|
+
* @param {number} count
|
|
1809
|
+
*/
|
|
1810
|
+
#ensure_indirection(count) {
|
|
1811
|
+
const allocator = this.#indirection_allocator;
|
|
1812
|
+
|
|
1813
|
+
if (allocator.can_allocate(count)) {
|
|
1814
|
+
return;
|
|
1815
|
+
}
|
|
1816
|
+
|
|
1817
|
+
// exactly what the allocation needs, rounded up to a doubling
|
|
1818
|
+
const target = allocator.grow_target_for(count);
|
|
1819
|
+
|
|
1820
|
+
let capacity = this.#indirection_capacity;
|
|
1821
|
+
|
|
1822
|
+
while (capacity < target) {
|
|
1823
|
+
capacity *= 2;
|
|
1824
|
+
}
|
|
1825
|
+
|
|
1826
|
+
// the new buffer first: grow() appends to the arena, and nothing moves
|
|
1827
|
+
this.#indirection = this.#regrow(this.#indirection, "indirection", 4 * capacity, 0);
|
|
1828
|
+
allocator.grow(capacity);
|
|
1829
|
+
this.#indirection_capacity = capacity;
|
|
1830
|
+
}
|
|
1831
|
+
|
|
1832
|
+
/**
|
|
1833
|
+
* Double the atlas and its slot stack, the new slots pushed by the next bake.
|
|
1834
|
+
*/
|
|
1835
|
+
#grow_slots() {
|
|
1836
|
+
const atlas = this.#atlas;
|
|
1837
|
+
const old_capacity = this.#slot_capacity;
|
|
1838
|
+
const capacity = Math.min(2 * old_capacity, atlas.capacity_limit);
|
|
1839
|
+
|
|
1840
|
+
if (capacity <= old_capacity) {
|
|
1841
|
+
return;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
atlas.reserve(capacity);
|
|
1845
|
+
|
|
1846
|
+
this.#slots = this.#regrow(this.#slots, "slots", 4 * capacity, GPUBufferUsage.COPY_SRC);
|
|
1847
|
+
this.#slot_capacity = capacity;
|
|
1848
|
+
this.#pushes.push(old_capacity, capacity - old_capacity);
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
/**
|
|
1852
|
+
* A runs buffer of at least `runs` entries.
|
|
1853
|
+
*
|
|
1854
|
+
* @param {GPUBuffer|null} buffer
|
|
1855
|
+
* @param {number} runs
|
|
1856
|
+
* @param {string} name
|
|
1857
|
+
* @returns {GPUBuffer}
|
|
1858
|
+
*/
|
|
1859
|
+
#ensure_runs_buffer(buffer, runs, name) {
|
|
1860
|
+
const size = 8 * runs;
|
|
1861
|
+
|
|
1862
|
+
if (buffer !== null && buffer.size >= size) {
|
|
1863
|
+
return buffer;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
buffer?.destroy();
|
|
1867
|
+
|
|
1868
|
+
let capacity = 64;
|
|
1869
|
+
|
|
1870
|
+
while (8 * capacity < size) {
|
|
1871
|
+
capacity *= 2;
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
return this.#create_buffer(name, 8 * capacity, GPUBufferUsage.COPY_DST);
|
|
1875
|
+
}
|
|
1876
|
+
|
|
1877
|
+
/**
|
|
1878
|
+
* @param {string} name
|
|
1879
|
+
* @param {number} size
|
|
1880
|
+
* @param {GPUBufferUsageFlags} usage beside STORAGE
|
|
1881
|
+
* @returns {GPUBuffer}
|
|
1882
|
+
*/
|
|
1883
|
+
#create_buffer(name, size, usage) {
|
|
1884
|
+
return this.#device.createBuffer(BufferDescriptor.fromJSON({
|
|
1885
|
+
label: `GPUGeometrySDFManager/${name}`,
|
|
1886
|
+
size,
|
|
1887
|
+
usage: GPUBufferUsage.STORAGE | usage,
|
|
1888
|
+
}));
|
|
1889
|
+
}
|
|
1890
|
+
|
|
1891
|
+
/**
|
|
1892
|
+
* A larger buffer with the old one's bytes, copied ahead of the frame's commands; the old one is
|
|
1893
|
+
* destroyed after the copy is submitted.
|
|
1894
|
+
*
|
|
1895
|
+
* @param {GPUBuffer} old
|
|
1896
|
+
* @param {string} name
|
|
1897
|
+
* @param {number} size
|
|
1898
|
+
* @param {GPUBufferUsageFlags} usage beside STORAGE; COPY_SRC and COPY_DST are added
|
|
1899
|
+
* @returns {GPUBuffer}
|
|
1900
|
+
*/
|
|
1901
|
+
#regrow(old, name, size, usage) {
|
|
1902
|
+
const device = this.#device;
|
|
1903
|
+
const buffer = this.#create_buffer(name, size, usage | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST);
|
|
1904
|
+
|
|
1905
|
+
const encoder = device.createCommandEncoder({ label: `GPUGeometrySDFManager/${name} growth` });
|
|
1906
|
+
|
|
1907
|
+
encoder.copyBufferToBuffer(old, 0, buffer, 0, old.size);
|
|
1908
|
+
device.queue.submit([encoder.finish()]);
|
|
1909
|
+
|
|
1910
|
+
old.destroy();
|
|
1911
|
+
|
|
1912
|
+
return buffer;
|
|
1913
|
+
}
|
|
1914
|
+
|
|
1915
|
+
destroy() {
|
|
1916
|
+
if (this.#destroyed) {
|
|
1917
|
+
return;
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
this.#destroyed = true;
|
|
1921
|
+
|
|
1922
|
+
for (const buffer of [this.#headers, this.#indirection, this.#slots, this.#take, this.#ring, this.#classify_ranges, this.#free_ranges]) {
|
|
1923
|
+
buffer?.destroy();
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
this.#atlas?.destroy();
|
|
1927
|
+
this.#cards.destroy();
|
|
1928
|
+
|
|
1929
|
+
this.#headers = null;
|
|
1930
|
+
this.#indirection = null;
|
|
1931
|
+
this.#slots = null;
|
|
1932
|
+
this.#take = null;
|
|
1933
|
+
this.#ring = null;
|
|
1934
|
+
this.#classify_ranges = null;
|
|
1935
|
+
this.#free_ranges = null;
|
|
1936
|
+
this.#atlas = null;
|
|
228
1937
|
}
|
|
229
1938
|
}
|