@woosh/meep-engine 3.28.0 → 3.29.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/package.json +1 -1
- package/src/core/binary/BitSet.d.ts +16 -0
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +159 -49
- package/src/core/binary/allocator/OffsetAllocator.d.ts +48 -0
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +208 -9
- package/src/core/binary/compression/compress_bytes.d.ts +20 -0
- package/src/core/binary/compression/compress_bytes.d.ts.map +1 -0
- package/src/core/binary/compression/compress_bytes.js +35 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts +30 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -0
- package/src/core/binary/compression/decompress_bytes_into.js +87 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts +27 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts.map +1 -0
- package/src/core/binary/compression/deflate_decompress_bound.js +32 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.js +31 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts +46 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.js +104 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts +62 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.js +158 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts +21 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.js +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts +34 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.js +55 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts +28 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts +15 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts +93 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.js +128 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts +38 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +113 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +47 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +677 -8
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.js +46 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts +19 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.js +49 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts +63 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts.map +1 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.js +80 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.d.ts +35 -0
- package/src/core/graph/layout/layered/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.js +53 -1
- package/src/core/graph/layout/layered/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.js +72 -68
- package/src/core/graph/layout/layered/layout_assign_layers.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.js +4 -2
- package/src/core/graph/layout/layered/layout_break_cycles.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_order_layers.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +7 -51
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +8 -69
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +6 -6
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +1 -1
- package/src/engine/graphics3/DebugDrawSystem.d.ts +7 -5
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +206 -203
- package/src/engine/graphics3/DecalSystem.d.ts +4 -5
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +5 -5
- package/src/engine/graphics3/FogOfWarSystem.d.ts +7 -12
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem.js +8 -12
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
- package/src/shade/RENDERER_CONTRACT.md +12 -7
- package/src/shade/playground/caldera/README.md +529 -0
- package/src/shade/playground/caldera/caldera_format.d.ts +151 -0
- package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -0
- package/src/shade/playground/caldera/caldera_format.js +241 -0
- package/src/shade/playground/caldera/index.html +126 -0
- package/src/shade/playground/caldera/main.d.ts.map +1 -0
- package/src/shade/playground/caldera/main.js +1565 -0
- package/src/shade/playground/mesh_row_ceiling/README.md +85 -0
- package/src/shade/playground/mesh_row_ceiling/index.html +31 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts +2 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts.map +1 -0
- package/src/shade/playground/mesh_row_ceiling/main.js +389 -0
- package/src/shade/playground/vgeo_runtime/README.md +5 -3
- package/src/shade/playground/vgeo_runtime/main.js +3 -2
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +3 -3
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -1
- package/src/shade/playground/vgeo_runtime/sample_asset.js +3 -3
- package/src/shade/playground/vgeo_scene/README.md +103 -24
- package/src/shade/playground/vgeo_scene/main.js +525 -24
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +6 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +23 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +100 -8
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +69 -33
- package/src/shade/renderer/extension/RenderExtension.d.ts +15 -18
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +15 -19
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +5 -5
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +29 -166
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +73 -16
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -3
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +663 -0
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +100 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +688 -81
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +155 -64
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +30 -13
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +3 -3
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +57 -7
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +63 -9
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.js +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.js +25 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +77 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +84 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +19 -6
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.js +20 -7
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.js +58 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.js +116 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +545 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +110 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +2 -27
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +120 -1564
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.js +123 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.js +78 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +337 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +147 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts +37 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +117 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +46 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.js +45 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts +64 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +12 -7
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.js +33 -11
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts +58 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.js +79 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts +53 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +24 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +250 -25
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +12 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +58 -50
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js +18 -3
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts +38 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.js +81 -0
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +23 -5
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js +28 -21
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.js +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +224 -60
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +19 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +10 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +103 -9
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +14 -2
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +38 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +28 -5
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.js +93 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +20 -6
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +22 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/{vgeo_layers_copy_vertex.js → vgeo_layers_copy_corner.js} +8 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts +18 -7
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.js +19 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.d.ts +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.js +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts +27 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.js +97 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts +7 -3
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js +21 -11
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.js +41 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +19 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +20 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts +25 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts +10 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js +37 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +21 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +37 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js +14 -2
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +19 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_OFFSET.js +6 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.js +20 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +1 -2
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +10 -3
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.js +43 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +4 -2
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +8 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +5 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +14 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +4 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +53 -11
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +7 -3
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +12 -2
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +111 -33
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +112 -42
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +51 -21
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +34 -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 +18 -0
- 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 +47 -19
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +22 -4
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +4 -0
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -4
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +6 -2
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +90 -12
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +22 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +21 -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 +13 -8
- 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 -6
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +4 -12
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +4 -5
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +5 -3
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +11 -4
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -3
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +3 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +94 -90
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +13 -5
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +96 -89
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +3 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.js +4 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +100 -89
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +31 -7
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +1 -7
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +161 -153
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +2 -7
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +4 -8
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +5 -8
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +25 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +24 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +10 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +30 -21
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +0 -61
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +0 -18
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +0 -173
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts +0 -52
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts +0 -24
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts +0 -32
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts +0 -59
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts +0 -44
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts +0 -20
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts +0 -73
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts +0 -36
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts +0 -19
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts +0 -31
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts +0 -18
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts +0 -11
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts +0 -46
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +0 -22
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts +0 -9
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts +0 -10
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts +0 -15
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts +0 -16
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts.map +0 -1
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts +0 -10
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts +0 -17
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts +0 -3
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts +0 -8
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +0 -1
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.js +0 -0
- /package/src/shade/playground/{vgeo_viewer → caldera}/main.d.ts +0 -0
|
@@ -44,13 +44,17 @@ export class VGeoPageFetcherCore {
|
|
|
44
44
|
* @param {bigint|function(): bigint} options.asset_id_low64 what frames are checksummed against;
|
|
45
45
|
* a function when the header is read after construction
|
|
46
46
|
* @param {boolean} [options.verify_frames]
|
|
47
|
+
* @param {number|function(): number} [options.format_version] the container's, which decides
|
|
48
|
+
* how a cluster record is laid out (§7); a function when the header is read after
|
|
49
|
+
* construction, as with `asset_id_low64`. A worker is told it with the descriptor.
|
|
47
50
|
* @param {number} [options.fetch_retries] attempts after the first
|
|
48
51
|
* @param {number} [options.fetch_retry_backoff_ms] doubled per attempt
|
|
49
52
|
*/
|
|
50
|
-
constructor({ read, asset_id_low64, verify_frames, fetch_retries, fetch_retry_backoff_ms, }: {
|
|
53
|
+
constructor({ read, asset_id_low64, verify_frames, format_version, fetch_retries, fetch_retry_backoff_ms, }: {
|
|
51
54
|
read: (arg0: number, arg1: number, arg2: AbortSignal | undefined) => Promise<Uint8Array>;
|
|
52
55
|
asset_id_low64: bigint | (() => bigint);
|
|
53
56
|
verify_frames?: boolean;
|
|
57
|
+
format_version?: number | (() => number);
|
|
54
58
|
fetch_retries?: number;
|
|
55
59
|
fetch_retry_backoff_ms?: number;
|
|
56
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGeoPageFetcherCore.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VGeoPageFetcherCore.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js"],"names":[],"mappings":"AAcA;;;;;;GAMG;AACH;IAYI;;;;OAIG;IACH,qBAJW,MAAM,cACN,OAAO,UACP,MAAM,EAQhB;IAtBD;;OAEG;IACH,YAFU,OAAO,CAEN;IAEX;;;OAGG;IACH,QAFU,MAAM,CAET;CAcV;AAED;;;;;;;;;;;;;GAaG;AACH;IA+BI;;;;;;;;;;;;OAYG;IACH;QAXgF,IAAI,SAAhE,MAAM,QAAE,MAAM,QAAE,WAAW,iBAAI,QAAQ,UAAU,CAAC;QAExB,cAAc,EAAjD,MAAM,UAAa,MAAM,CAAA;QAEP,aAAa,GAA/B,OAAO;QAC6B,cAAc,GAAlD,MAAM,UAAa,MAAM,CAAA;QAGR,aAAa,GAA9B,MAAM;QACW,sBAAsB,GAAvC,MAAM;OAoBhB;IAED;;;;;;;OAOG;IACH,kBAPW,MAAM,gBACN,MAAM,cACN,MAAM,WACN,WAAW,GACT,QAAQ,QAAQ,CAAC,CA4B7B;;CAyDJ;uBA9MY,OAAO,eAAe,EAAE,QAAQ"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
2
|
import { BinaryBuffer } from "../../../../../../core/binary/BinaryBuffer.js";
|
|
3
3
|
import { vgeo_compute_frame_checksum } from "../checksum/vgeo_compute_frame_checksum.js";
|
|
4
|
+
import { VGEO_FORMAT_VERSION } from "../header/VGEO_FORMAT_VERSION.js";
|
|
4
5
|
import { VGEO_FRAME_OFFSET } from "../frame/VGEO_FRAME_OFFSET.js";
|
|
5
6
|
import { vgeo_read_frame_extent } from "../frame/vgeo_read_frame_extent.js";
|
|
6
7
|
import { vgeo_read_page } from "./vgeo_read_page.js";
|
|
@@ -74,6 +75,11 @@ export class VGeoPageFetcherCore {
|
|
|
74
75
|
*/
|
|
75
76
|
#verify_frames;
|
|
76
77
|
|
|
78
|
+
/**
|
|
79
|
+
* @type {number|function(): number}
|
|
80
|
+
*/
|
|
81
|
+
#format_version;
|
|
82
|
+
|
|
77
83
|
/**
|
|
78
84
|
* @type {number}
|
|
79
85
|
*/
|
|
@@ -91,6 +97,9 @@ export class VGeoPageFetcherCore {
|
|
|
91
97
|
* @param {bigint|function(): bigint} options.asset_id_low64 what frames are checksummed against;
|
|
92
98
|
* a function when the header is read after construction
|
|
93
99
|
* @param {boolean} [options.verify_frames]
|
|
100
|
+
* @param {number|function(): number} [options.format_version] the container's, which decides
|
|
101
|
+
* how a cluster record is laid out (§7); a function when the header is read after
|
|
102
|
+
* construction, as with `asset_id_low64`. A worker is told it with the descriptor.
|
|
94
103
|
* @param {number} [options.fetch_retries] attempts after the first
|
|
95
104
|
* @param {number} [options.fetch_retry_backoff_ms] doubled per attempt
|
|
96
105
|
*/
|
|
@@ -98,6 +107,7 @@ export class VGeoPageFetcherCore {
|
|
|
98
107
|
read,
|
|
99
108
|
asset_id_low64,
|
|
100
109
|
verify_frames = false,
|
|
110
|
+
format_version = VGEO_FORMAT_VERSION,
|
|
101
111
|
fetch_retries = 2,
|
|
102
112
|
fetch_retry_backoff_ms = 50,
|
|
103
113
|
}) {
|
|
@@ -108,6 +118,7 @@ export class VGeoPageFetcherCore {
|
|
|
108
118
|
this.#read = read;
|
|
109
119
|
this.#asset_id_low64 = asset_id_low64;
|
|
110
120
|
this.#verify_frames = verify_frames;
|
|
121
|
+
this.#format_version = format_version;
|
|
111
122
|
this.#fetch_retries = fetch_retries;
|
|
112
123
|
this.#fetch_retry_backoff_ms = fetch_retry_backoff_ms;
|
|
113
124
|
}
|
|
@@ -161,7 +172,9 @@ export class VGeoPageFetcherCore {
|
|
|
161
172
|
this.#verify_frame(bytes, page_index);
|
|
162
173
|
}
|
|
163
174
|
|
|
164
|
-
const page = vgeo_read_page(bytes, page_index
|
|
175
|
+
const page = await vgeo_read_page(bytes, page_index, typeof this.#format_version === 'function'
|
|
176
|
+
? this.#format_version()
|
|
177
|
+
: this.#format_version);
|
|
165
178
|
|
|
166
179
|
page.frame_offset = frame_offset;
|
|
167
180
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_page_worker_serve.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AACH,6CANW;IAAC,SAAS,EAAE,WAAS,IAAI,CAAC;IAAC,WAAW,SAAW,MAAM,QAAE,WAAW,EAAE,iBAAI,IAAI,CAAA;CAAC,GAC7E,IAAI,
|
|
1
|
+
{"version":3,"file":"vgeo_page_worker_serve.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AACH,6CANW;IAAC,SAAS,EAAE,WAAS,IAAI,CAAC;IAAC,WAAW,SAAW,MAAM,QAAE,WAAW,EAAE,iBAAI,IAAI,CAAA;CAAC,GAC7E,IAAI,CAgFhB"}
|
|
@@ -62,6 +62,7 @@ export function vgeo_page_worker_serve(port) {
|
|
|
62
62
|
core = new VGeoPageFetcherCore({
|
|
63
63
|
read: (offset, length, signal) => source.read(offset, length, signal),
|
|
64
64
|
asset_id_low64: data.asset_id_low64,
|
|
65
|
+
format_version: data.format_version,
|
|
65
66
|
verify_frames: data.verify_frames,
|
|
66
67
|
fetch_retries: data.fetch_retries,
|
|
67
68
|
fetch_retry_backoff_ms: data.fetch_retry_backoff_ms,
|
|
@@ -12,12 +12,15 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @param {Uint8Array} bytes the directory region, from its first byte
|
|
14
14
|
* @param {number} page_count `total_pages` from the header
|
|
15
|
+
* @param {number} [format_version] the container header's, which decides where a record keeps
|
|
16
|
+
* everything from `min_level` on (§9). Defaults to the current version, which is what a caller
|
|
17
|
+
* holding no header should assume.
|
|
15
18
|
* @returns {VGeoDirectory}
|
|
16
19
|
* @throws {Error} when the bytes are shorter than the records the header says are there
|
|
17
20
|
*
|
|
18
21
|
* @author Alex Goldring
|
|
19
22
|
* @copyright Company Named Limited (c) 2026
|
|
20
23
|
*/
|
|
21
|
-
export function vgeo_read_directory(bytes: Uint8Array, page_count: number): VGeoDirectory;
|
|
24
|
+
export function vgeo_read_directory(bytes: Uint8Array, page_count: number, format_version?: number): VGeoDirectory;
|
|
22
25
|
import { VGeoDirectory } from "./VGeoDirectory.js";
|
|
23
26
|
//# sourceMappingURL=vgeo_read_directory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_read_directory.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_read_directory.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js"],"names":[],"mappings":"AAoDA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,2CAXW,UAAU,cACV,MAAM,mBACN,MAAM,GAGJ,aAAa,CAuDzB;8BA1H6B,oBAAoB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { VGEO_DIRECTORY_RECORD_SIZE } from "../directory/VGEO_DIRECTORY_RECORD_SIZE.js";
|
|
2
|
+
import { VGEO_FORMAT_VERSION } from "../header/VGEO_FORMAT_VERSION.js";
|
|
2
3
|
import { VGeoDirectory } from "./VGeoDirectory.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -12,6 +13,33 @@ const LE = true;
|
|
|
12
13
|
* @enum {number}
|
|
13
14
|
*/
|
|
14
15
|
const RECORD = {
|
|
16
|
+
FRAME_OFFSET: 0,
|
|
17
|
+
FETCH_SIZE: 8,
|
|
18
|
+
DECODED_SIZE: 12,
|
|
19
|
+
/**
|
|
20
|
+
* A byte each through `format_version` 5, a `u16` each from 6 on — which is what moved
|
|
21
|
+
* everything below them by two, into the eight bytes this record has always kept reserved. The
|
|
22
|
+
* record is still 32 bytes and the directory is still `32 * page_count`.
|
|
23
|
+
*/
|
|
24
|
+
MIN_LEVEL: 16,
|
|
25
|
+
MAX_LEVEL: 18,
|
|
26
|
+
FLAGS: 20,
|
|
27
|
+
GROUP_COUNT: 22,
|
|
28
|
+
CLUSTER_COUNT: 24,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The same record as `format_version` 5 and earlier laid it out.
|
|
33
|
+
*
|
|
34
|
+
* The first three fields did not move, which is why a reader can size and place every fetch in the
|
|
35
|
+
* file from an old directory without knowing the version. Everything from `min_level` on did, so
|
|
36
|
+
* reading one of those records by the current offsets hands back a `min_level` with `max_level` in
|
|
37
|
+
* its high byte and a `cluster_count` taken out of reserved bytes — wrong, quietly, in derived data
|
|
38
|
+
* that nothing else cross-checks at read time.
|
|
39
|
+
*
|
|
40
|
+
* @enum {number}
|
|
41
|
+
*/
|
|
42
|
+
const RECORD_V5 = {
|
|
15
43
|
FRAME_OFFSET: 0,
|
|
16
44
|
FETCH_SIZE: 8,
|
|
17
45
|
DECODED_SIZE: 12,
|
|
@@ -36,13 +64,16 @@ const RECORD = {
|
|
|
36
64
|
*
|
|
37
65
|
* @param {Uint8Array} bytes the directory region, from its first byte
|
|
38
66
|
* @param {number} page_count `total_pages` from the header
|
|
67
|
+
* @param {number} [format_version] the container header's, which decides where a record keeps
|
|
68
|
+
* everything from `min_level` on (§9). Defaults to the current version, which is what a caller
|
|
69
|
+
* holding no header should assume.
|
|
39
70
|
* @returns {VGeoDirectory}
|
|
40
71
|
* @throws {Error} when the bytes are shorter than the records the header says are there
|
|
41
72
|
*
|
|
42
73
|
* @author Alex Goldring
|
|
43
74
|
* @copyright Company Named Limited (c) 2026
|
|
44
75
|
*/
|
|
45
|
-
export function vgeo_read_directory(bytes, page_count) {
|
|
76
|
+
export function vgeo_read_directory(bytes, page_count, format_version = VGEO_FORMAT_VERSION) {
|
|
46
77
|
const needed = page_count * VGEO_DIRECTORY_RECORD_SIZE;
|
|
47
78
|
|
|
48
79
|
if (bytes.byteLength < needed) {
|
|
@@ -54,14 +85,18 @@ export function vgeo_read_directory(bytes, page_count) {
|
|
|
54
85
|
|
|
55
86
|
const data = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
56
87
|
|
|
88
|
+
const legacy = format_version < 6;
|
|
89
|
+
|
|
90
|
+
const offsets = legacy ? RECORD_V5 : RECORD;
|
|
91
|
+
|
|
57
92
|
const result = new VGeoDirectory();
|
|
58
93
|
|
|
59
94
|
result.page_count = page_count;
|
|
60
95
|
result.frame_offset = new Float64Array(page_count);
|
|
61
96
|
result.fetch_size = new Uint32Array(page_count);
|
|
62
97
|
result.decoded_size = new Uint32Array(page_count);
|
|
63
|
-
result.min_level = new
|
|
64
|
-
result.max_level = new
|
|
98
|
+
result.min_level = new Uint16Array(page_count);
|
|
99
|
+
result.max_level = new Uint16Array(page_count);
|
|
65
100
|
result.flags = new Uint16Array(page_count);
|
|
66
101
|
result.group_count = new Uint16Array(page_count);
|
|
67
102
|
result.cluster_count = new Uint16Array(page_count);
|
|
@@ -69,14 +104,21 @@ export function vgeo_read_directory(bytes, page_count) {
|
|
|
69
104
|
for (let i = 0; i < page_count; i++) {
|
|
70
105
|
const record = i * VGEO_DIRECTORY_RECORD_SIZE;
|
|
71
106
|
|
|
72
|
-
result.frame_offset[i] = Number(data.getBigUint64(record +
|
|
73
|
-
result.fetch_size[i] = data.getUint32(record +
|
|
74
|
-
result.decoded_size[i] = data.getUint32(record +
|
|
75
|
-
|
|
76
|
-
result.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
107
|
+
result.frame_offset[i] = Number(data.getBigUint64(record + offsets.FRAME_OFFSET, LE));
|
|
108
|
+
result.fetch_size[i] = data.getUint32(record + offsets.FETCH_SIZE, LE);
|
|
109
|
+
result.decoded_size[i] = data.getUint32(record + offsets.DECODED_SIZE, LE);
|
|
110
|
+
|
|
111
|
+
result.min_level[i] = legacy
|
|
112
|
+
? data.getUint8(record + offsets.MIN_LEVEL)
|
|
113
|
+
: data.getUint16(record + offsets.MIN_LEVEL, LE);
|
|
114
|
+
|
|
115
|
+
result.max_level[i] = legacy
|
|
116
|
+
? data.getUint8(record + offsets.MAX_LEVEL)
|
|
117
|
+
: data.getUint16(record + offsets.MAX_LEVEL, LE);
|
|
118
|
+
|
|
119
|
+
result.flags[i] = data.getUint16(record + offsets.FLAGS, LE);
|
|
120
|
+
result.group_count[i] = data.getUint16(record + offsets.GROUP_COUNT, LE);
|
|
121
|
+
result.cluster_count[i] = data.getUint16(record + offsets.CLUSTER_COUNT, LE);
|
|
80
122
|
}
|
|
81
123
|
|
|
82
124
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_read_header.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wCATW,UAAU,GAER,mBAAmB,
|
|
1
|
+
{"version":3,"file":"vgeo_read_header.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wCATW,UAAU,GAER,mBAAmB,CAqH/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,+CAJW,UAAU,GACR,MAAM,CA4BlB;AA3LD;;;;;;;GAOG;AACH,kCAFU,MAAM,CAEoC;oCAjBhB,0BAA0B"}
|
|
@@ -128,7 +128,11 @@ export function vgeo_read_header(bytes) {
|
|
|
128
128
|
result.object_bounds[i] = view.getFloat32(VGEO_HEADER_OFFSET.OBJECT_BOUNDS + i * 4, LE);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
/*
|
|
132
|
+
A `u16` since `format_version` 6, over a byte that was reserved and written as zero — so this
|
|
133
|
+
reads every earlier container correctly as well, and no version test is needed for it.
|
|
134
|
+
*/
|
|
135
|
+
const level_count = view.getUint16(VGEO_HEADER_OFFSET.LEVEL_COUNT, LE);
|
|
132
136
|
|
|
133
137
|
const table_end = VGEO_HEADER_SIZE + level_count * VGEO_LEVEL_RECORD_SIZE;
|
|
134
138
|
|
|
@@ -188,8 +192,8 @@ export function vgeo_resident_head_size(bytes) {
|
|
|
188
192
|
);
|
|
189
193
|
}
|
|
190
194
|
|
|
191
|
-
const table_end =
|
|
192
|
-
|
|
195
|
+
const table_end = VGEO_HEADER_SIZE
|
|
196
|
+
+ view.getUint16(VGEO_HEADER_OFFSET.LEVEL_COUNT, LE) * VGEO_LEVEL_RECORD_SIZE;
|
|
193
197
|
|
|
194
198
|
const root_end = Number(view.getBigUint64(VGEO_HEADER_OFFSET.ROOT_PAGE_OFFSET, LE))
|
|
195
199
|
+ view.getUint32(VGEO_HEADER_OFFSET.ROOT_PAGE_FETCH_SIZE, LE);
|
|
@@ -11,16 +11,26 @@
|
|
|
11
11
|
* `decoded_size` is four bytes of untrusted file, and honouring one that no block of that length
|
|
12
12
|
* could produce turns corruption into an out-of-memory throw rather than a rejected file.
|
|
13
13
|
*
|
|
14
|
+
* It is asynchronous because {@link VGEO_CODEC_DEFLATE} is — the platform only offers its zlib as a
|
|
15
|
+
* stream — and a reader that could not read a deflate page would be refusing assets over an
|
|
16
|
+
* implementation detail. Everything after the decode is the same synchronous walk of the page's own
|
|
17
|
+
* tables it has always been, and a raw or LZ4 page never leaves the caller's turn.
|
|
18
|
+
*
|
|
14
19
|
* @param {Uint8Array} frame_bytes the frame's exact range, from its first byte
|
|
15
20
|
* @param {number} page_index the frame ordinal this range was fetched as — the caller knows it from
|
|
16
21
|
* the child-table entry or the directory record that named the range
|
|
17
|
-
* @
|
|
22
|
+
* @param {number} [format_version] the container header's, which decides how a cluster record
|
|
23
|
+
* (§7) and a page header (§6.1) are laid out: version 5 put `subtree_aabb` at offset 40 and
|
|
24
|
+
* moved everything after it, and version 6 widened the page band to `u16` over
|
|
25
|
+
* `node_table_offset`. Defaults to the current version, which is what a caller holding no
|
|
26
|
+
* header should assume — the frame itself does not carry one.
|
|
27
|
+
* @returns {Promise<VGeoPage>}
|
|
18
28
|
* @throws {Error} when the range is not a frame, uses a codec with no decoder here, or does not
|
|
19
29
|
* decode as its own header says
|
|
20
30
|
*
|
|
21
31
|
* @author Alex Goldring
|
|
22
32
|
* @copyright Company Named Limited (c) 2026
|
|
23
33
|
*/
|
|
24
|
-
export function vgeo_read_page(frame_bytes: Uint8Array, page_index: number): VGeoPage
|
|
34
|
+
export function vgeo_read_page(frame_bytes: Uint8Array, page_index: number, format_version?: number): Promise<VGeoPage>;
|
|
25
35
|
import { VGeoPage } from "./VGeoPage.js";
|
|
26
36
|
//# sourceMappingURL=vgeo_read_page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_read_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_read_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,4CAfW,UAAU,cACV,MAAM,mBAEN,MAAM,GAKJ,QAAQ,QAAQ,CAAC,CA+F7B;yBAxIwB,eAAe"}
|
|
@@ -3,10 +3,13 @@ import { VGEO_ATTRIBUTES } from "../attribute/VGEO_ATTRIBUTES.js";
|
|
|
3
3
|
import { VGEO_CHILD_OFFSET } from "../frame/VGEO_CHILD_OFFSET.js";
|
|
4
4
|
import { VGEO_CHILD_TABLE_ENTRY_SIZE } from "../frame/VGEO_CHILD_TABLE_ENTRY_SIZE.js";
|
|
5
5
|
import { VGEO_CLUSTER_OFFSET } from "../cluster/VGEO_CLUSTER_OFFSET.js";
|
|
6
|
+
import { VGEO_CLUSTER_OFFSET_V4 } from "../cluster/VGEO_CLUSTER_OFFSET_V4.js";
|
|
6
7
|
import { VGEO_CLUSTER_RECORD_SIZE } from "../cluster/VGEO_CLUSTER_RECORD_SIZE.js";
|
|
8
|
+
import { VGEO_CODEC_DEFLATE } from "../frame/VGEO_CODEC_DEFLATE.js";
|
|
7
9
|
import { VGEO_CODEC_LZ4 } from "../frame/VGEO_CODEC_LZ4.js";
|
|
8
10
|
import { VGEO_CODEC_RAW } from "../frame/VGEO_CODEC_RAW.js";
|
|
9
11
|
import { vgeo_decode_frame_blob } from "../frame/vgeo_decode_frame_blob.js";
|
|
12
|
+
import { VGEO_FORMAT_VERSION } from "../header/VGEO_FORMAT_VERSION.js";
|
|
10
13
|
import { VGEO_FRAME_HEADER_SIZE } from "../frame/VGEO_FRAME_HEADER_SIZE.js";
|
|
11
14
|
import { VGEO_FRAME_OFFSET } from "../frame/VGEO_FRAME_OFFSET.js";
|
|
12
15
|
import { vgeo_frame_decode_bound } from "../frame/vgeo_frame_decode_bound.js";
|
|
@@ -18,6 +21,7 @@ import { VGEO_NODE_RECORD_SIZE } from "../page/VGEO_NODE_RECORD_SIZE.js";
|
|
|
18
21
|
import { VGEO_PAGE_HEADER_SIZE } from "../page/VGEO_PAGE_HEADER_SIZE.js";
|
|
19
22
|
import { VGEO_PAGE_MAGIC } from "../frame/VGEO_PAGE_MAGIC.js";
|
|
20
23
|
import { VGEO_PAGE_OFFSET } from "../page/VGEO_PAGE_OFFSET.js";
|
|
24
|
+
import { VGEO_PAGE_OFFSET_V5 } from "../page/VGEO_PAGE_OFFSET_V5.js";
|
|
21
25
|
import { VGEO_PARENT_ENTRY_SIZE } from "../page/VGEO_PARENT_ENTRY_SIZE.js";
|
|
22
26
|
import { VGEO_PARENT_PAGE_ENTRY_SIZE } from "../page/VGEO_PARENT_PAGE_ENTRY_SIZE.js";
|
|
23
27
|
import { vgeo_read_frame_extent } from "../frame/vgeo_read_frame_extent.js";
|
|
@@ -49,17 +53,27 @@ const NORMAL_COMPRESSION_FLAG = VGEO_ATTRIBUTES[VGEO_ATTRIBUTE.NORMAL].compressi
|
|
|
49
53
|
* `decoded_size` is four bytes of untrusted file, and honouring one that no block of that length
|
|
50
54
|
* could produce turns corruption into an out-of-memory throw rather than a rejected file.
|
|
51
55
|
*
|
|
56
|
+
* It is asynchronous because {@link VGEO_CODEC_DEFLATE} is — the platform only offers its zlib as a
|
|
57
|
+
* stream — and a reader that could not read a deflate page would be refusing assets over an
|
|
58
|
+
* implementation detail. Everything after the decode is the same synchronous walk of the page's own
|
|
59
|
+
* tables it has always been, and a raw or LZ4 page never leaves the caller's turn.
|
|
60
|
+
*
|
|
52
61
|
* @param {Uint8Array} frame_bytes the frame's exact range, from its first byte
|
|
53
62
|
* @param {number} page_index the frame ordinal this range was fetched as — the caller knows it from
|
|
54
63
|
* the child-table entry or the directory record that named the range
|
|
55
|
-
* @
|
|
64
|
+
* @param {number} [format_version] the container header's, which decides how a cluster record
|
|
65
|
+
* (§7) and a page header (§6.1) are laid out: version 5 put `subtree_aabb` at offset 40 and
|
|
66
|
+
* moved everything after it, and version 6 widened the page band to `u16` over
|
|
67
|
+
* `node_table_offset`. Defaults to the current version, which is what a caller holding no
|
|
68
|
+
* header should assume — the frame itself does not carry one.
|
|
69
|
+
* @returns {Promise<VGeoPage>}
|
|
56
70
|
* @throws {Error} when the range is not a frame, uses a codec with no decoder here, or does not
|
|
57
71
|
* decode as its own header says
|
|
58
72
|
*
|
|
59
73
|
* @author Alex Goldring
|
|
60
74
|
* @copyright Company Named Limited (c) 2026
|
|
61
75
|
*/
|
|
62
|
-
export function vgeo_read_page(frame_bytes, page_index) {
|
|
76
|
+
export async function vgeo_read_page(frame_bytes, page_index, format_version = VGEO_FORMAT_VERSION) {
|
|
63
77
|
const frame_view = new DataView(
|
|
64
78
|
frame_bytes.buffer, frame_bytes.byteOffset, frame_bytes.byteLength
|
|
65
79
|
);
|
|
@@ -89,10 +103,15 @@ export function vgeo_read_page(frame_bytes, page_index) {
|
|
|
89
103
|
// decoder indexes `frame_bytes` with, and the caller keeps the absolute one.
|
|
90
104
|
const frame = vgeo_read_frame_extent(frame_view, 0, page_index);
|
|
91
105
|
|
|
92
|
-
if (
|
|
106
|
+
if (
|
|
107
|
+
frame.codec !== VGEO_CODEC_RAW
|
|
108
|
+
&& frame.codec !== VGEO_CODEC_LZ4
|
|
109
|
+
&& frame.codec !== VGEO_CODEC_DEFLATE
|
|
110
|
+
) {
|
|
93
111
|
throw new Error(
|
|
94
112
|
`page ${page_index} uses codec ${frame.codec};`
|
|
95
|
-
+ ` this reader decodes ${VGEO_CODEC_RAW} (raw)
|
|
113
|
+
+ ` this reader decodes ${VGEO_CODEC_RAW} (raw), ${VGEO_CODEC_LZ4} (lz4)`
|
|
114
|
+
+ ` and ${VGEO_CODEC_DEFLATE} (deflate)`
|
|
96
115
|
);
|
|
97
116
|
}
|
|
98
117
|
|
|
@@ -120,16 +139,25 @@ export function vgeo_read_page(frame_bytes, page_index) {
|
|
|
120
139
|
|
|
121
140
|
const bytes = new Uint8Array(frame.decoded_size);
|
|
122
141
|
|
|
123
|
-
vgeo_decode_frame_blob(bytes, 0, frame_bytes, frame);
|
|
142
|
+
await vgeo_decode_frame_blob(bytes, 0, frame_bytes, frame);
|
|
124
143
|
|
|
125
144
|
result.bytes = bytes;
|
|
126
145
|
result.data = new DataView(bytes.buffer);
|
|
127
146
|
|
|
147
|
+
/*
|
|
148
|
+
Version 6 widened `min_level` and `max_level` to `u16` and spent `node_table_offset` on the
|
|
149
|
+
four bytes, so the page header's fields at offsets 4..8 and 20..24 mean different things either
|
|
150
|
+
side of it. Everything else in a page — the group table's base, the other table offsets, the
|
|
151
|
+
parent section, the metric — is where it always was, which is why only these two readers take
|
|
152
|
+
the flag.
|
|
153
|
+
*/
|
|
154
|
+
const legacy_page = format_version < 6;
|
|
155
|
+
|
|
128
156
|
read_child_table(result, frame_view, frame);
|
|
129
|
-
read_page_header(result);
|
|
157
|
+
read_page_header(result, legacy_page);
|
|
130
158
|
read_group_table(result);
|
|
131
|
-
read_node_table(result);
|
|
132
|
-
read_cluster_table(result);
|
|
159
|
+
read_node_table(result, legacy_page);
|
|
160
|
+
read_cluster_table(result, format_version);
|
|
133
161
|
read_parent_tables(result);
|
|
134
162
|
|
|
135
163
|
return result;
|
|
@@ -211,13 +239,23 @@ function read_child_table(page, frame_view, frame) {
|
|
|
211
239
|
* past.
|
|
212
240
|
*
|
|
213
241
|
* @param {VGeoPage} page
|
|
242
|
+
* @param {boolean} legacy the container is `format_version` 5 or older
|
|
214
243
|
*/
|
|
215
|
-
function read_node_table(page) {
|
|
244
|
+
function read_node_table(page, legacy) {
|
|
216
245
|
const data = page.data;
|
|
217
246
|
|
|
218
247
|
const count = page.node_count;
|
|
219
248
|
|
|
220
|
-
|
|
249
|
+
/*
|
|
250
|
+
Stored through version 5, derived from 6 on, and the same number either way: the group table
|
|
251
|
+
follows the page header and the node table follows the group table, both by construction
|
|
252
|
+
(§6.1). What stands between a `group_count` that is wrong and a read past the page is the
|
|
253
|
+
extent check below, and that stood there when the offset was stored too.
|
|
254
|
+
*/
|
|
255
|
+
const table = legacy
|
|
256
|
+
? data.getUint32(VGEO_PAGE_OFFSET_V5.NODE_TABLE_OFFSET, LE)
|
|
257
|
+
: VGEO_PAGE_HEADER_SIZE
|
|
258
|
+
+ data.getUint16(VGEO_PAGE_OFFSET.GROUP_COUNT, LE) * VGEO_GROUP_RECORD_SIZE;
|
|
221
259
|
|
|
222
260
|
const end = table + count * VGEO_NODE_RECORD_SIZE;
|
|
223
261
|
|
|
@@ -264,8 +302,9 @@ function read_node_table(page) {
|
|
|
264
302
|
|
|
265
303
|
/**
|
|
266
304
|
* @param {VGeoPage} page
|
|
305
|
+
* @param {boolean} legacy the container is `format_version` 5 or older
|
|
267
306
|
*/
|
|
268
|
-
function read_page_header(page) {
|
|
307
|
+
function read_page_header(page, legacy) {
|
|
269
308
|
const data = page.data;
|
|
270
309
|
|
|
271
310
|
if (page.bytes.byteLength < VGEO_PAGE_HEADER_SIZE) {
|
|
@@ -276,9 +315,17 @@ function read_page_header(page) {
|
|
|
276
315
|
}
|
|
277
316
|
|
|
278
317
|
page.cluster_count = data.getUint16(VGEO_PAGE_OFFSET.CLUSTER_COUNT, LE);
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
318
|
+
|
|
319
|
+
if (legacy) {
|
|
320
|
+
page.min_level = data.getUint8(VGEO_PAGE_OFFSET_V5.MIN_LEVEL);
|
|
321
|
+
page.max_level = data.getUint8(VGEO_PAGE_OFFSET_V5.MAX_LEVEL);
|
|
322
|
+
page.node_count = data.getUint16(VGEO_PAGE_OFFSET_V5.NODE_COUNT, LE);
|
|
323
|
+
} else {
|
|
324
|
+
page.min_level = data.getUint16(VGEO_PAGE_OFFSET.MIN_LEVEL, LE);
|
|
325
|
+
page.max_level = data.getUint16(VGEO_PAGE_OFFSET.MAX_LEVEL, LE);
|
|
326
|
+
page.node_count = data.getUint16(VGEO_PAGE_OFFSET.NODE_COUNT, LE);
|
|
327
|
+
}
|
|
328
|
+
|
|
282
329
|
page.payload_offset = data.getUint32(VGEO_PAGE_OFFSET.PAYLOAD_OFFSET, LE);
|
|
283
330
|
page.payload_size = data.getUint32(VGEO_PAGE_OFFSET.PAYLOAD_SIZE, LE);
|
|
284
331
|
}
|
|
@@ -362,10 +409,21 @@ function read_parent_tables(page) {
|
|
|
362
409
|
|
|
363
410
|
/**
|
|
364
411
|
* @param {VGeoPage} page
|
|
412
|
+
* @param {number} format_version of the container this page came out of
|
|
365
413
|
*/
|
|
366
|
-
function read_cluster_table(page) {
|
|
414
|
+
function read_cluster_table(page, format_version) {
|
|
367
415
|
const data = page.data;
|
|
368
416
|
|
|
417
|
+
/*
|
|
418
|
+
Version 5 replaced `bounds_sphere` and `cone_reserved` with `subtree_aabb`, which moved every
|
|
419
|
+
field from offset 40 on, so reading an older record by the current offsets does not lose a
|
|
420
|
+
field — it takes `child_ref` out of the middle of a box. The fifty gigabytes of converted
|
|
421
|
+
version-4 containers are why this branch exists rather than a refusal.
|
|
422
|
+
*/
|
|
423
|
+
const legacy = format_version < 5;
|
|
424
|
+
|
|
425
|
+
const offsets = legacy ? VGEO_CLUSTER_OFFSET_V4 : VGEO_CLUSTER_OFFSET;
|
|
426
|
+
|
|
369
427
|
const count = page.cluster_count;
|
|
370
428
|
|
|
371
429
|
const table = data.getUint32(VGEO_PAGE_OFFSET.CLUSTER_TABLE_OFFSET, LE);
|
|
@@ -381,7 +439,7 @@ function read_cluster_table(page) {
|
|
|
381
439
|
|
|
382
440
|
page.self_sphere = new Float32Array(count * 4);
|
|
383
441
|
page.parent_sphere = new Float32Array(count * 4);
|
|
384
|
-
page.
|
|
442
|
+
page.subtree_aabb = new Float32Array(count * 6);
|
|
385
443
|
page.aabb = new Float32Array(count * 6);
|
|
386
444
|
page.self_error = new Float32Array(count);
|
|
387
445
|
page.parent_error = new Float32Array(count);
|
|
@@ -399,29 +457,49 @@ function read_cluster_table(page) {
|
|
|
399
457
|
|
|
400
458
|
for (let c = 0; c < 4; c++) {
|
|
401
459
|
page.self_sphere[i * 4 + c] =
|
|
402
|
-
data.getFloat32(record +
|
|
460
|
+
data.getFloat32(record + offsets.SELF_SPHERE + c * 4, LE);
|
|
403
461
|
page.parent_sphere[i * 4 + c] =
|
|
404
|
-
data.getFloat32(record +
|
|
405
|
-
page.bounds_sphere[i * 4 + c] =
|
|
406
|
-
data.getFloat32(record + VGEO_CLUSTER_OFFSET.BOUNDS_SPHERE + c * 4, LE);
|
|
462
|
+
data.getFloat32(record + offsets.PARENT_SPHERE + c * 4, LE);
|
|
407
463
|
}
|
|
408
464
|
|
|
409
465
|
for (let c = 0; c < 6; c++) {
|
|
410
|
-
page.aabb[i * 6 + c] =
|
|
411
|
-
|
|
466
|
+
page.aabb[i * 6 + c] = data.getFloat32(record + offsets.AABB + c * 4, LE);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if (legacy) {
|
|
470
|
+
/*
|
|
471
|
+
The cube around `self_sphere`, which format §11.7 makes contain every vertex below the
|
|
472
|
+
cluster — so it is a conservative subtree bound, which is the whole of what the cut's
|
|
473
|
+
test asks of this column. It is looser than the box a version-5 build computes, and
|
|
474
|
+
looser in exactly the way the sphere the kernel also tests already is.
|
|
475
|
+
*/
|
|
476
|
+
const cx = page.self_sphere[i * 4];
|
|
477
|
+
const cy = page.self_sphere[i * 4 + 1];
|
|
478
|
+
const cz = page.self_sphere[i * 4 + 2];
|
|
479
|
+
const r = page.self_sphere[i * 4 + 3];
|
|
480
|
+
|
|
481
|
+
page.subtree_aabb[i * 6] = cx - r;
|
|
482
|
+
page.subtree_aabb[i * 6 + 1] = cy - r;
|
|
483
|
+
page.subtree_aabb[i * 6 + 2] = cz - r;
|
|
484
|
+
page.subtree_aabb[i * 6 + 3] = cx + r;
|
|
485
|
+
page.subtree_aabb[i * 6 + 4] = cy + r;
|
|
486
|
+
page.subtree_aabb[i * 6 + 5] = cz + r;
|
|
487
|
+
} else {
|
|
488
|
+
for (let c = 0; c < 6; c++) {
|
|
489
|
+
page.subtree_aabb[i * 6 + c] =
|
|
490
|
+
data.getFloat32(record + offsets.SUBTREE_AABB + c * 4, LE);
|
|
491
|
+
}
|
|
412
492
|
}
|
|
413
493
|
|
|
414
|
-
page.self_error[i] = data.getFloat32(record +
|
|
415
|
-
page.parent_error[i] = data.getFloat32(record +
|
|
416
|
-
page.child_ref[i] = data.getUint16(record +
|
|
417
|
-
page.child_group[i] = data.getUint16(record +
|
|
418
|
-
page.encoding_flags[i] = data.getUint32(record +
|
|
419
|
-
page.cluster_payload_offset[i] =
|
|
420
|
-
|
|
421
|
-
page.
|
|
422
|
-
|
|
423
|
-
page.vertex_count[i] = data.getUint8(record + VGEO_CLUSTER_OFFSET.VERTEX_COUNT);
|
|
424
|
-
page.triangle_count[i] = data.getUint8(record + VGEO_CLUSTER_OFFSET.TRIANGLE_COUNT);
|
|
494
|
+
page.self_error[i] = data.getFloat32(record + offsets.SELF_ERROR, LE);
|
|
495
|
+
page.parent_error[i] = data.getFloat32(record + offsets.PARENT_ERROR, LE);
|
|
496
|
+
page.child_ref[i] = data.getUint16(record + offsets.CHILD_REF, LE);
|
|
497
|
+
page.child_group[i] = data.getUint16(record + offsets.CHILD_GROUP, LE);
|
|
498
|
+
page.encoding_flags[i] = data.getUint32(record + offsets.ENCODING_FLAGS, LE);
|
|
499
|
+
page.cluster_payload_offset[i] = data.getUint32(record + offsets.PAYLOAD_OFFSET, LE);
|
|
500
|
+
page.cluster_payload_size[i] = data.getUint32(record + offsets.PAYLOAD_SIZE, LE);
|
|
501
|
+
page.vertex_count[i] = data.getUint8(record + offsets.VERTEX_COUNT);
|
|
502
|
+
page.triangle_count[i] = data.getUint8(record + offsets.TRIANGLE_COUNT);
|
|
425
503
|
|
|
426
504
|
if ((page.encoding_flags[i] & NORMAL_COMPRESSION_FLAG) === 0) {
|
|
427
505
|
page.per_vertex_normal_cluster_count++;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Audit a `.vgeo` file.
|
|
3
3
|
*
|
|
4
|
+
* It is asynchronous for the one reason the reader is: {@link VGEO_CODEC_DEFLATE} decodes through
|
|
5
|
+
* the platform's streaming zlib, and a validator that could not decode a deflate page would pass
|
|
6
|
+
* every file it could not read.
|
|
7
|
+
*
|
|
4
8
|
* @param {BinaryBuffer} buffer the whole file, with `capacity` equal to its length
|
|
5
|
-
* @returns {VGeoDefect[]} in discovery order; empty when the file satisfies every invariant
|
|
9
|
+
* @returns {Promise<VGeoDefect[]>} in discovery order; empty when the file satisfies every invariant
|
|
6
10
|
*/
|
|
7
|
-
export function vgeo_validate_container(buffer: BinaryBuffer): VGeoDefect[]
|
|
11
|
+
export function vgeo_validate_container(buffer: BinaryBuffer): Promise<VGeoDefect[]>;
|
|
8
12
|
import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
|
|
9
13
|
import { VGeoDefect } from "./VGeoDefect.js";
|
|
10
14
|
//# sourceMappingURL=vgeo_validate_container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_validate_container.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_validate_container.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js"],"names":[],"mappings":"AA+xDA;;;;;;;;;GASG;AACH,gDAHW,YAAY,GACV,QAAQ,UAAU,EAAE,CAAC,CAqFjC;6BA53D4B,4CAA4C;2BAoD9C,iBAAiB"}
|