@woosh/meep-engine 3.27.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/mat4/m4_linear_determinant.d.ts +15 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
- 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/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +38 -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/GraphicsEngine.d.ts +5 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +834 -830
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
- package/src/shade/RENDERER_CONTRACT.md +31 -17
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
- 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 +32 -16
- package/src/shade/playground/vgeo_runtime/main.js +21 -7
- package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.d.ts +3 -3
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
- package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +12 -11
- package/src/shade/playground/vgeo_scene/README.md +487 -0
- package/src/shade/playground/vgeo_scene/index.html +144 -0
- package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
- package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_scene/main.js +2217 -0
- 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 +6 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +28 -2
- 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 +70 -35
- 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/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +159 -66
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +40 -21
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +15 -14
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +58 -8
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +64 -10
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -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/VGeoLevel.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.d.ts → level/VGeoLevelOptions.d.ts} +19 -6
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +20 -7
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
- 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 +11 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +308 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.d.ts → level/vgeo_build_root_group.d.ts} +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
- 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/{VirtualGeometryMesh.d.ts → mesh/VirtualGeometryMesh.d.ts} +13 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +40 -18
- 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 +45 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +300 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.d.ts → 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 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +151 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.d.ts → mesh/vgeo_normalize_source.d.ts} +8 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +27 -12
- 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/{vgeo_assemble_pages.d.ts → page/vgeo_assemble_pages.d.ts} +1 -1
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +9 -9
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.d.ts → page/vgeo_build_page_nodes.d.ts} +1 -1
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.d.ts → partition/VGeoFaceGraph.d.ts} +23 -5
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +28 -21
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +13 -56
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +371 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +42 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +37 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +39 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +135 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +95 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
- 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 +37 -16
- 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_attributes_read.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
- 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_GROUP_OFFSET.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
- 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 +32 -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 +15 -7
- 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 +120 -37
- 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 +130 -47
- 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 +60 -22
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +21 -2
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +52 -2
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +97 -1
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +4 -4
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +10 -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/VGeoResidency.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +59 -34
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
- 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 +45 -88
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +116 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +7 -63
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +13 -30
- 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 +53 -71
- 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/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
- package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
- 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/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
- 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/rasterization_opaque_buckets.d.ts +22 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
- 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/chunk_triangle_winding_is_reversed.d.ts +15 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
- 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/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
- 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/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
- 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/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
- 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 +3 -2
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
- 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 +2 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -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 +81 -95
- 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 +26 -39
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +2 -0
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
- package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
- package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
- 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/README.md +0 -150
- 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/cut_geometry.js +0 -460
- package/src/shade/playground/vgeo_viewer/index.html +0 -77
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/main.js +0 -1343
- 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/playground/vgeo_viewer/select_cut.js +0 -481
- 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/VGeoGatheredFaces.js +0 -25
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
- 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/VGeoSubmesh.js +0 -20
- 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.map +0 -1
- 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_levels.js +0 -1786
- 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.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_normals.js +0 -75
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.js +0 -143
- 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_extract_submesh.js +0 -41
- 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_gather_faces.js +0 -71
- 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.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.js +0 -207
- 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/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.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/loader/gltf/fix_up_material_sides.js +0 -109
- 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/graph_triangles_filter_by_material_side.js +0 -78
- 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/expand/shader_filter_triangle_by_material_side.js +0 -100
- 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/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.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
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.d.ts → level/VGeoLevel.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.d.ts → level/VGeoLevelSummary.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.d.ts → page/vgeo_page_node_count.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.d.ts → partition/vgeo_graph_components.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.d.ts → partition/vgeo_partition_graph.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.d.ts → partition/vgeo_split_face_set.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.d.ts → partition/vgeo_split_face_set_packed.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.d.ts → sphere/vgeo_bounding_sphere.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.d.ts → sphere/vgeo_containing_sphere.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.d.ts → sphere/vgeo_sphere_inflate_to_contain.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.d.ts → submesh/vgeo_narrow_indices.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_CODEC_LZ4.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"VGEO_CODEC_LZ4.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,6BAFU,MAAM,CAEgB"}
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
* its identity-seeded `checksum` covers the stored bytes. So the blob is the bare block, and the
|
|
7
7
|
* frame header is what tells a decoder how much to expect out of it.
|
|
8
8
|
*
|
|
9
|
+
* Not the builder's default — {@link VGEO_CODEC_DEFLATE} is, because it stores a container in fewer
|
|
10
|
+
* bytes and a build happens once where a fetch happens forever. This is what to set for a container
|
|
11
|
+
* whose pages arrive during play: it decodes at 562 MB/s against deflate's 126, and that decode is
|
|
12
|
+
* a page's arrival cost on the residency path.
|
|
13
|
+
*
|
|
9
14
|
* @type {number}
|
|
10
15
|
*/
|
|
11
16
|
export const VGEO_CODEC_LZ4 = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_codec_name.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_codec_name.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,uCANW,MAAM,GACJ,MAAM,CAmBlB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { VGEO_CODEC_DEFLATE } from "./VGEO_CODEC_DEFLATE.js";
|
|
1
2
|
import { VGEO_CODEC_LZ4 } from "./VGEO_CODEC_LZ4.js";
|
|
2
3
|
import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
3
4
|
|
|
@@ -23,5 +24,9 @@ export function vgeo_codec_name(codec) {
|
|
|
23
24
|
return 'lz4';
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
if (codec === VGEO_CODEC_DEFLATE) {
|
|
28
|
+
return 'deflate';
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
return `codec ${codec}`;
|
|
27
32
|
}
|
|
@@ -9,18 +9,25 @@
|
|
|
9
9
|
*
|
|
10
10
|
* A blob that does not decode to exactly `decoded_size` bytes is refused rather than accepted short
|
|
11
11
|
* — a page truncated to a plausible prefix is the one corruption that reads as a valid page with
|
|
12
|
-
* missing geometry, and there is no later check that would notice.
|
|
12
|
+
* missing geometry, and there is no later check that would notice. Neither decoder is allowed to
|
|
13
|
+
* *overrun* it either: the LZ4 one is handed the end of the page as its limit, and the deflate one
|
|
14
|
+
* is stopped at the first chunk that would pass it, so a blob that expands further than its header
|
|
15
|
+
* admits costs one chunk rather than the whole expansion.
|
|
16
|
+
*
|
|
17
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `DecompressionStream` is the
|
|
18
|
+
* platform's zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish
|
|
19
|
+
* in the caller's turn, so awaiting them costs a microtask and nothing else.
|
|
13
20
|
*
|
|
14
21
|
* @param {Uint8Array} destination at least `decoded_size` bytes free at `destination_offset`
|
|
15
22
|
* @param {number} destination_offset where the decoded page starts
|
|
16
23
|
* @param {Uint8Array} source the file, indexed from its first byte — the offsets on `frame` are
|
|
17
24
|
* absolute
|
|
18
25
|
* @param {VGeoFrameExtent} frame
|
|
19
|
-
* @returns {number} the offset just past the last byte written
|
|
26
|
+
* @returns {Promise<number>} the offset just past the last byte written
|
|
20
27
|
* @throws {Error} on a codec with no decoder here, or a blob that does not decode as its header says
|
|
21
28
|
*
|
|
22
29
|
* @author Alex Goldring
|
|
23
30
|
* @copyright Company Named Limited (c) 2026
|
|
24
31
|
*/
|
|
25
|
-
export function vgeo_decode_frame_blob(destination: Uint8Array, destination_offset: number, source: Uint8Array, frame: VGeoFrameExtent): number
|
|
32
|
+
export function vgeo_decode_frame_blob(destination: Uint8Array, destination_offset: number, source: Uint8Array, frame: VGeoFrameExtent): Promise<number>;
|
|
26
33
|
//# sourceMappingURL=vgeo_decode_frame_blob.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_decode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_decode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,oDAXW,UAAU,sBACV,MAAM,UACN,UAAU,2BAGR,QAAQ,MAAM,CAAC,CAmF3B"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { decompress_bytes_into } from "../../../../../../core/binary/compression/decompress_bytes_into.js";
|
|
2
3
|
import { lz4_decompress_block } from "../../../../../../core/binary/lz4/lz4_decompress_block.js";
|
|
3
4
|
import { VGEO_CHILD_TABLE_ENTRY_SIZE } from "./VGEO_CHILD_TABLE_ENTRY_SIZE.js";
|
|
5
|
+
import { VGEO_CODEC_DEFLATE } from "./VGEO_CODEC_DEFLATE.js";
|
|
4
6
|
import { VGEO_CODEC_LZ4 } from "./VGEO_CODEC_LZ4.js";
|
|
5
7
|
import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
6
8
|
import { VGEO_FRAME_HEADER_SIZE } from "./VGEO_FRAME_HEADER_SIZE.js";
|
|
@@ -16,20 +18,27 @@ import { VGEO_FRAME_HEADER_SIZE } from "./VGEO_FRAME_HEADER_SIZE.js";
|
|
|
16
18
|
*
|
|
17
19
|
* A blob that does not decode to exactly `decoded_size` bytes is refused rather than accepted short
|
|
18
20
|
* — a page truncated to a plausible prefix is the one corruption that reads as a valid page with
|
|
19
|
-
* missing geometry, and there is no later check that would notice.
|
|
21
|
+
* missing geometry, and there is no later check that would notice. Neither decoder is allowed to
|
|
22
|
+
* *overrun* it either: the LZ4 one is handed the end of the page as its limit, and the deflate one
|
|
23
|
+
* is stopped at the first chunk that would pass it, so a blob that expands further than its header
|
|
24
|
+
* admits costs one chunk rather than the whole expansion.
|
|
25
|
+
*
|
|
26
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `DecompressionStream` is the
|
|
27
|
+
* platform's zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish
|
|
28
|
+
* in the caller's turn, so awaiting them costs a microtask and nothing else.
|
|
20
29
|
*
|
|
21
30
|
* @param {Uint8Array} destination at least `decoded_size` bytes free at `destination_offset`
|
|
22
31
|
* @param {number} destination_offset where the decoded page starts
|
|
23
32
|
* @param {Uint8Array} source the file, indexed from its first byte — the offsets on `frame` are
|
|
24
33
|
* absolute
|
|
25
34
|
* @param {VGeoFrameExtent} frame
|
|
26
|
-
* @returns {number} the offset just past the last byte written
|
|
35
|
+
* @returns {Promise<number>} the offset just past the last byte written
|
|
27
36
|
* @throws {Error} on a codec with no decoder here, or a blob that does not decode as its header says
|
|
28
37
|
*
|
|
29
38
|
* @author Alex Goldring
|
|
30
39
|
* @copyright Company Named Limited (c) 2026
|
|
31
40
|
*/
|
|
32
|
-
export function vgeo_decode_frame_blob(destination, destination_offset, source, frame) {
|
|
41
|
+
export async function vgeo_decode_frame_blob(destination, destination_offset, source, frame) {
|
|
33
42
|
assert.isNonNegativeInteger(destination_offset, 'destination_offset');
|
|
34
43
|
assert.lessThanOrEqual(
|
|
35
44
|
destination_offset + frame.decoded_size, destination.length,
|
|
@@ -80,5 +89,30 @@ export function vgeo_decode_frame_blob(destination, destination_offset, source,
|
|
|
80
89
|
return end;
|
|
81
90
|
}
|
|
82
91
|
|
|
92
|
+
if (frame.codec === VGEO_CODEC_DEFLATE) {
|
|
93
|
+
let written;
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
written = await decompress_bytes_into(
|
|
97
|
+
destination, destination_offset, frame.decoded_size,
|
|
98
|
+
[source.subarray(blob, blob + frame.stored_size)], 'deflate-raw'
|
|
99
|
+
);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
// The platform's own words for a malformed stream vary by host and say nothing about
|
|
102
|
+
// which page it was, which is the one thing a reader reporting this needs. The original
|
|
103
|
+
// is kept as the cause, because which host said what is the next question after that.
|
|
104
|
+
throw new Error(`page ${frame.page_index}: ${error.message}`, { cause: error });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (written !== frame.decoded_size) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`page ${frame.page_index}: the deflate stream decoded to ${written}`
|
|
110
|
+
+ ` bytes, its frame header says ${frame.decoded_size}`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return end;
|
|
115
|
+
}
|
|
116
|
+
|
|
83
117
|
throw new Error(`page ${frame.page_index}: codec ${frame.codec} has no decoder here`);
|
|
84
118
|
}
|
|
@@ -3,29 +3,37 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A compressing codec is a *request*, not a promise: what comes back is whichever of the two is
|
|
5
5
|
* smaller, with the codec that describes it. That is what makes turning compression on safe to do
|
|
6
|
-
* unconditionally — a page of incompressible bytes costs the
|
|
7
|
-
* plus a token
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* unconditionally — a page of incompressible bytes costs the compressor's worst case, about one
|
|
7
|
+
* byte in 255 plus a token for LZ4 and five bytes per 64 KB stored block for deflate, and paying
|
|
8
|
+
* that to store bytes verbatim is a straight loss. Declining is per page, because `codec` is a
|
|
9
|
+
* frame field: one asset can carry a mixture, and a reader that handles the codecs handles any
|
|
10
|
+
* mixture of them without knowing there was a decision.
|
|
10
11
|
*
|
|
11
|
-
* The blob is the bare LZ4 block.
|
|
12
|
-
* header's `decoded_size` is what {@link vgeo_decode_frame_blob}
|
|
13
|
-
* checksum is what proves the stored bytes arrived intact.
|
|
12
|
+
* The blob is the bare LZ4 block or the bare DEFLATE stream. Neither carries a length of its own
|
|
13
|
+
* and neither needs to — the frame header's `decoded_size` is what {@link vgeo_decode_frame_blob}
|
|
14
|
+
* decodes against, and the frame's checksum is what proves the stored bytes arrived intact.
|
|
14
15
|
*
|
|
15
|
-
*
|
|
16
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `CompressionStream` is the platform's
|
|
17
|
+
* zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish in the
|
|
18
|
+
* caller's turn, so awaiting them costs a microtask and nothing else.
|
|
19
|
+
*
|
|
20
|
+
* The LZ4 level is how hard the encoder looks for matches, and nothing else: every level writes the
|
|
16
21
|
* same LZ4 block format, so it is a build-time decision with no reader consequence at all. What it
|
|
17
22
|
* buys on a page of encoded geometry is about 2.5% over the fast encoder, almost all of which is
|
|
18
23
|
* already there at level 3; what it costs is roughly an order of magnitude of encoder throughput,
|
|
19
|
-
* which over a whole conversion comes to a couple of percent of the build.
|
|
24
|
+
* which over a whole conversion comes to a couple of percent of the build. **Deflate ignores it** —
|
|
25
|
+
* `CompressionStream` exposes no level, so the host's zlib default is the only setting there is.
|
|
20
26
|
*
|
|
21
27
|
* @param {Uint8Array} bytes the decoded page
|
|
22
|
-
* @param {number} codec the codec to attempt, one of {@link VGEO_CODEC_RAW}
|
|
23
|
-
*
|
|
24
|
-
* @
|
|
28
|
+
* @param {number} codec the codec to attempt, one of {@link VGEO_CODEC_RAW},
|
|
29
|
+
* {@link VGEO_CODEC_LZ4} or {@link VGEO_CODEC_DEFLATE}
|
|
30
|
+
* @param {number} [level] how hard to look, one of {@link LZ4_LEVEL}'s; the raw and deflate codecs
|
|
31
|
+
* ignore it
|
|
32
|
+
* @returns {Promise<VGeoFrameBlob>}
|
|
25
33
|
*
|
|
26
34
|
* @author Alex Goldring
|
|
27
35
|
* @copyright Company Named Limited (c) 2026
|
|
28
36
|
*/
|
|
29
|
-
export function vgeo_encode_frame_blob(bytes: Uint8Array, codec: number, level?: number): VGeoFrameBlob
|
|
37
|
+
export function vgeo_encode_frame_blob(bytes: Uint8Array, codec: number, level?: number): Promise<VGeoFrameBlob>;
|
|
30
38
|
import { VGeoFrameBlob } from "./VGeoFrameBlob.js";
|
|
31
39
|
//# sourceMappingURL=vgeo_encode_frame_blob.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_encode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_encode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8CAVW,UAAU,SACV,MAAM,UAEN,MAAM,GAEJ,QAAQ,aAAa,CAAC,CA8ClC;8BA/E6B,oBAAoB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { compress_bytes } from "../../../../../../core/binary/compression/compress_bytes.js";
|
|
2
3
|
import { LZ4_LEVEL } from "../../../../../../core/binary/lz4/LZ4_LEVEL.js";
|
|
3
4
|
import { lz4_compress_block_at_level } from "../../../../../../core/binary/lz4/lz4_compress_block_at_level.js";
|
|
4
5
|
import { lz4_compress_bound } from "../../../../../../core/binary/lz4/lz4_compress_bound.js";
|
|
6
|
+
import { VGEO_CODEC_DEFLATE } from "./VGEO_CODEC_DEFLATE.js";
|
|
5
7
|
import { VGEO_CODEC_LZ4 } from "./VGEO_CODEC_LZ4.js";
|
|
6
8
|
import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
7
9
|
import { VGeoFrameBlob } from "./VGeoFrameBlob.js";
|
|
@@ -11,30 +13,38 @@ import { VGeoFrameBlob } from "./VGeoFrameBlob.js";
|
|
|
11
13
|
*
|
|
12
14
|
* A compressing codec is a *request*, not a promise: what comes back is whichever of the two is
|
|
13
15
|
* smaller, with the codec that describes it. That is what makes turning compression on safe to do
|
|
14
|
-
* unconditionally — a page of incompressible bytes costs the
|
|
15
|
-
* plus a token
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* unconditionally — a page of incompressible bytes costs the compressor's worst case, about one
|
|
17
|
+
* byte in 255 plus a token for LZ4 and five bytes per 64 KB stored block for deflate, and paying
|
|
18
|
+
* that to store bytes verbatim is a straight loss. Declining is per page, because `codec` is a
|
|
19
|
+
* frame field: one asset can carry a mixture, and a reader that handles the codecs handles any
|
|
20
|
+
* mixture of them without knowing there was a decision.
|
|
18
21
|
*
|
|
19
|
-
* The blob is the bare LZ4 block.
|
|
20
|
-
* header's `decoded_size` is what {@link vgeo_decode_frame_blob}
|
|
21
|
-
* checksum is what proves the stored bytes arrived intact.
|
|
22
|
+
* The blob is the bare LZ4 block or the bare DEFLATE stream. Neither carries a length of its own
|
|
23
|
+
* and neither needs to — the frame header's `decoded_size` is what {@link vgeo_decode_frame_blob}
|
|
24
|
+
* decodes against, and the frame's checksum is what proves the stored bytes arrived intact.
|
|
22
25
|
*
|
|
23
|
-
*
|
|
26
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `CompressionStream` is the platform's
|
|
27
|
+
* zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish in the
|
|
28
|
+
* caller's turn, so awaiting them costs a microtask and nothing else.
|
|
29
|
+
*
|
|
30
|
+
* The LZ4 level is how hard the encoder looks for matches, and nothing else: every level writes the
|
|
24
31
|
* same LZ4 block format, so it is a build-time decision with no reader consequence at all. What it
|
|
25
32
|
* buys on a page of encoded geometry is about 2.5% over the fast encoder, almost all of which is
|
|
26
33
|
* already there at level 3; what it costs is roughly an order of magnitude of encoder throughput,
|
|
27
|
-
* which over a whole conversion comes to a couple of percent of the build.
|
|
34
|
+
* which over a whole conversion comes to a couple of percent of the build. **Deflate ignores it** —
|
|
35
|
+
* `CompressionStream` exposes no level, so the host's zlib default is the only setting there is.
|
|
28
36
|
*
|
|
29
37
|
* @param {Uint8Array} bytes the decoded page
|
|
30
|
-
* @param {number} codec the codec to attempt, one of {@link VGEO_CODEC_RAW}
|
|
31
|
-
*
|
|
32
|
-
* @
|
|
38
|
+
* @param {number} codec the codec to attempt, one of {@link VGEO_CODEC_RAW},
|
|
39
|
+
* {@link VGEO_CODEC_LZ4} or {@link VGEO_CODEC_DEFLATE}
|
|
40
|
+
* @param {number} [level] how hard to look, one of {@link LZ4_LEVEL}'s; the raw and deflate codecs
|
|
41
|
+
* ignore it
|
|
42
|
+
* @returns {Promise<VGeoFrameBlob>}
|
|
33
43
|
*
|
|
34
44
|
* @author Alex Goldring
|
|
35
45
|
* @copyright Company Named Limited (c) 2026
|
|
36
46
|
*/
|
|
37
|
-
export function vgeo_encode_frame_blob(bytes, codec, level = LZ4_LEVEL.HC_DEFAULT) {
|
|
47
|
+
export async function vgeo_encode_frame_blob(bytes, codec, level = LZ4_LEVEL.HC_DEFAULT) {
|
|
38
48
|
assert.defined(bytes, 'bytes');
|
|
39
49
|
|
|
40
50
|
const result = new VGeoFrameBlob();
|
|
@@ -46,6 +56,20 @@ export function vgeo_encode_frame_blob(bytes, codec, level = LZ4_LEVEL.HC_DEFAUL
|
|
|
46
56
|
return result;
|
|
47
57
|
}
|
|
48
58
|
|
|
59
|
+
if (codec === VGEO_CODEC_DEFLATE) {
|
|
60
|
+
const stream = await compress_bytes([bytes], 'deflate-raw');
|
|
61
|
+
|
|
62
|
+
if (stream.length < bytes.length) {
|
|
63
|
+
result.codec = VGEO_CODEC_DEFLATE;
|
|
64
|
+
result.bytes = stream;
|
|
65
|
+
} else {
|
|
66
|
+
result.codec = VGEO_CODEC_RAW;
|
|
67
|
+
result.bytes = bytes;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
|
|
49
73
|
assert.equal(codec, VGEO_CODEC_LZ4, 'codec must be one of the codecs this encoder writes');
|
|
50
74
|
|
|
51
75
|
const scratch = new Uint8Array(lz4_compress_bound(bytes.length));
|
|
@@ -9,8 +9,14 @@
|
|
|
9
9
|
* So it is checked against what the stored bytes could physically produce first. The stored size is
|
|
10
10
|
* itself bounded by the file, so this is a bound a reader has before it trusts anything.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* The bound loosens sharply with the codec — 255x for LZ4, 1032x for deflate — because both numbers
|
|
13
|
+
* are what the *format* allows and neither is what a page looks like. That is as far as a length
|
|
14
|
+
* field alone can be checked, and it is why the decoders bound their own output as well rather than
|
|
15
|
+
* comparing lengths once the decode is over.
|
|
16
|
+
*
|
|
17
|
+
* @param {number} codec one of {@link VGEO_CODEC_RAW}, {@link VGEO_CODEC_LZ4} or
|
|
18
|
+
* {@link VGEO_CODEC_DEFLATE}; anything else has no decoder and must be refused before this is
|
|
19
|
+
* asked
|
|
14
20
|
* @param {number} stored_size bytes of blob
|
|
15
21
|
* @returns {number}
|
|
16
22
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_frame_decode_bound.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_frame_decode_bound.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,+CATW,MAAM,eAGN,MAAM,GACJ,MAAM,CAmBlB"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { deflate_decompress_bound } from "../../../../../../core/binary/compression/deflate_decompress_bound.js";
|
|
2
3
|
import { lz4_decompress_bound } from "../../../../../../core/binary/lz4/lz4_decompress_bound.js";
|
|
4
|
+
import { VGEO_CODEC_DEFLATE } from "./VGEO_CODEC_DEFLATE.js";
|
|
3
5
|
import { VGEO_CODEC_LZ4 } from "./VGEO_CODEC_LZ4.js";
|
|
4
6
|
import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
5
7
|
|
|
@@ -14,8 +16,14 @@ import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
|
14
16
|
* So it is checked against what the stored bytes could physically produce first. The stored size is
|
|
15
17
|
* itself bounded by the file, so this is a bound a reader has before it trusts anything.
|
|
16
18
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
+
* The bound loosens sharply with the codec — 255x for LZ4, 1032x for deflate — because both numbers
|
|
20
|
+
* are what the *format* allows and neither is what a page looks like. That is as far as a length
|
|
21
|
+
* field alone can be checked, and it is why the decoders bound their own output as well rather than
|
|
22
|
+
* comparing lengths once the decode is over.
|
|
23
|
+
*
|
|
24
|
+
* @param {number} codec one of {@link VGEO_CODEC_RAW}, {@link VGEO_CODEC_LZ4} or
|
|
25
|
+
* {@link VGEO_CODEC_DEFLATE}; anything else has no decoder and must be refused before this is
|
|
26
|
+
* asked
|
|
19
27
|
* @param {number} stored_size bytes of blob
|
|
20
28
|
* @returns {number}
|
|
21
29
|
*
|
|
@@ -29,6 +37,10 @@ export function vgeo_frame_decode_bound(codec, stored_size) {
|
|
|
29
37
|
return stored_size;
|
|
30
38
|
}
|
|
31
39
|
|
|
40
|
+
if (codec === VGEO_CODEC_DEFLATE) {
|
|
41
|
+
return deflate_decompress_bound(stored_size);
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
assert.equal(codec, VGEO_CODEC_LZ4, 'codec must be one this reader has a decoder for');
|
|
33
45
|
|
|
34
46
|
return lz4_decompress_bound(stored_size);
|
|
@@ -10,6 +10,24 @@
|
|
|
10
10
|
* `parent_table_offset` zero and takes the same absence as "this container has no upward edge",
|
|
11
11
|
* which is true.
|
|
12
12
|
*
|
|
13
|
+
* **5 put `subtree_aabb` in the cluster record and moved `min_reader_version` with it**, which is
|
|
14
|
+
* the pair working the other way. The box took the bytes of `bounds_sphere` and `cone_reserved`
|
|
15
|
+
* (§7), so every field from offset 40 on shifted and there is no reading of a version-5 record by
|
|
16
|
+
* version-4 offsets that is merely incomplete — it is wrong. This reader keeps both layouts and
|
|
17
|
+
* branches on the container's own version ({@link VGEO_CLUSTER_OFFSET_V4}); an older reader is
|
|
18
|
+
* refused by `min_reader_version`, which is what that field is for.
|
|
19
|
+
*
|
|
20
|
+
* **6 widened the level ordinal to `u16`** — `level_count` in the header (§4), the page band in
|
|
21
|
+
* the page header (§6.1) and in the directory record (§9) — because 255 was a ceiling a real asset
|
|
22
|
+
* reached ({@link VGEO_MAX_LEVEL_COUNT}). Two of the three cost nothing: both the header and the
|
|
23
|
+
* directory record had reserved bytes beside the fields. The page header had none, and rather than
|
|
24
|
+
* grow it the change spends `node_table_offset`, which was `VGEO_PAGE_HEADER_SIZE + 8 *
|
|
25
|
+
* group_count` written down — so a page is the same 56 bytes and every other field of it, in every
|
|
26
|
+
* container ever written, is still at the offset it was. `min_reader_version` moved with this one:
|
|
27
|
+
* a version-5 reader would take `max_level` for `node_count` and `node_count` for an offset, which
|
|
28
|
+
* is not a partial reading of the page but a wrong one. The reader keeps the old layout ({@link
|
|
29
|
+
* VGEO_PAGE_OFFSET_V5}), so nothing has to be rebuilt to stay readable.
|
|
30
|
+
*
|
|
13
31
|
* @type {number}
|
|
14
32
|
*/
|
|
15
33
|
export const VGEO_FORMAT_VERSION: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_FORMAT_VERSION.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"VGEO_FORMAT_VERSION.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,kCAFU,MAAM,CAEqB"}
|
|
@@ -10,6 +10,24 @@
|
|
|
10
10
|
* `parent_table_offset` zero and takes the same absence as "this container has no upward edge",
|
|
11
11
|
* which is true.
|
|
12
12
|
*
|
|
13
|
+
* **5 put `subtree_aabb` in the cluster record and moved `min_reader_version` with it**, which is
|
|
14
|
+
* the pair working the other way. The box took the bytes of `bounds_sphere` and `cone_reserved`
|
|
15
|
+
* (§7), so every field from offset 40 on shifted and there is no reading of a version-5 record by
|
|
16
|
+
* version-4 offsets that is merely incomplete — it is wrong. This reader keeps both layouts and
|
|
17
|
+
* branches on the container's own version ({@link VGEO_CLUSTER_OFFSET_V4}); an older reader is
|
|
18
|
+
* refused by `min_reader_version`, which is what that field is for.
|
|
19
|
+
*
|
|
20
|
+
* **6 widened the level ordinal to `u16`** — `level_count` in the header (§4), the page band in
|
|
21
|
+
* the page header (§6.1) and in the directory record (§9) — because 255 was a ceiling a real asset
|
|
22
|
+
* reached ({@link VGEO_MAX_LEVEL_COUNT}). Two of the three cost nothing: both the header and the
|
|
23
|
+
* directory record had reserved bytes beside the fields. The page header had none, and rather than
|
|
24
|
+
* grow it the change spends `node_table_offset`, which was `VGEO_PAGE_HEADER_SIZE + 8 *
|
|
25
|
+
* group_count` written down — so a page is the same 56 bytes and every other field of it, in every
|
|
26
|
+
* container ever written, is still at the offset it was. `min_reader_version` moved with this one:
|
|
27
|
+
* a version-5 reader would take `max_level` for `node_count` and `node_count` for an offset, which
|
|
28
|
+
* is not a partial reading of the page but a wrong one. The reader keeps the old layout ({@link
|
|
29
|
+
* VGEO_PAGE_OFFSET_V5}), so nothing has to be rebuilt to stay readable.
|
|
30
|
+
*
|
|
13
31
|
* @type {number}
|
|
14
32
|
*/
|
|
15
|
-
export const VGEO_FORMAT_VERSION =
|
|
33
|
+
export const VGEO_FORMAT_VERSION = 6;
|
|
@@ -22,6 +22,12 @@ export const VGEO_HEADER_OFFSET = {
|
|
|
22
22
|
DIRECTORY_OFFSET: 80,
|
|
23
23
|
DIR_BLOCK_CHECKSUMS_OFFSET: 88,
|
|
24
24
|
NOMINAL_PAGE_SIZE: 96,
|
|
25
|
+
/**
|
|
26
|
+
* `u16` since `format_version` 6, over the byte that followed it and was written as zero.
|
|
27
|
+
* Little-endian puts the low byte first, so this field reads the same through a version-5
|
|
28
|
+
* reader's `u8` for every container that has 255 levels or fewer — which is every container
|
|
29
|
+
* written before 6 and almost every one written after.
|
|
30
|
+
*/
|
|
25
31
|
LEVEL_COUNT: 102,
|
|
26
32
|
SOURCE_VERTEX_COUNT: 104,
|
|
27
33
|
SOURCE_FACE_COUNT: 112,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Levels a container can name — the format's ceiling, not a build's.
|
|
3
|
+
*
|
|
4
|
+
* `level_count` is a `u16` in the header and a page band is a pair of them, so this is what those
|
|
5
|
+
* fields can say and nothing about it is a judgement on what a build should produce. The number a
|
|
6
|
+
* build refuses to go past is {@link VGeoLevelOptions.max_levels}, which is a sanity bound set an
|
|
7
|
+
* order of magnitude below this.
|
|
8
|
+
*
|
|
9
|
+
* It was a `u8` through `format_version` 5, and the byte was reachable: the 2026-09-14 Zorah
|
|
10
|
+
* conversion put one geometry — three million triangles of foliage, whose leaf cards are thousands
|
|
11
|
+
* of disconnected components — at 255 levels with 39 clusters still unmerged, while the other 2,974
|
|
12
|
+
* geometries of the same scene converged by 149. A ceiling a real asset can touch is a ceiling in
|
|
13
|
+
* the wrong place.
|
|
14
|
+
*
|
|
15
|
+
* @type {number}
|
|
16
|
+
*
|
|
17
|
+
* @author Alex Goldring
|
|
18
|
+
* @copyright Company Named Limited (c) 2026
|
|
19
|
+
*/
|
|
20
|
+
export const VGEO_MAX_LEVEL_COUNT: number;
|
|
21
|
+
//# sourceMappingURL=VGEO_MAX_LEVEL_COUNT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_MAX_LEVEL_COUNT.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,mCALU,MAAM,CAK0B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Levels a container can name — the format's ceiling, not a build's.
|
|
3
|
+
*
|
|
4
|
+
* `level_count` is a `u16` in the header and a page band is a pair of them, so this is what those
|
|
5
|
+
* fields can say and nothing about it is a judgement on what a build should produce. The number a
|
|
6
|
+
* build refuses to go past is {@link VGeoLevelOptions.max_levels}, which is a sanity bound set an
|
|
7
|
+
* order of magnitude below this.
|
|
8
|
+
*
|
|
9
|
+
* It was a `u8` through `format_version` 5, and the byte was reachable: the 2026-09-14 Zorah
|
|
10
|
+
* conversion put one geometry — three million triangles of foliage, whose leaf cards are thousands
|
|
11
|
+
* of disconnected components — at 255 levels with 39 clusters still unmerged, while the other 2,974
|
|
12
|
+
* geometries of the same scene converged by 149. A ceiling a real asset can touch is a ceiling in
|
|
13
|
+
* the wrong place.
|
|
14
|
+
*
|
|
15
|
+
* @type {number}
|
|
16
|
+
*
|
|
17
|
+
* @author Alex Goldring
|
|
18
|
+
* @copyright Company Named Limited (c) 2026
|
|
19
|
+
*/
|
|
20
|
+
export const VGEO_MAX_LEVEL_COUNT = 65535;
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A reader older than this must refuse the file.
|
|
3
|
+
*
|
|
4
|
+
* 6 since the page header's level ordinals widened to `u16` ({@link VGEO_FORMAT_VERSION}): four
|
|
5
|
+
* bytes at offset 4 and four at offset 20 changed meaning, so a version-5 reader would take
|
|
6
|
+
* `max_level` for `node_count`, believe a page holds tens of thousands of nodes, and read its node
|
|
7
|
+
* table out of an offset that is now two reserved bytes. There is no partial reading of that.
|
|
8
|
+
*
|
|
9
|
+
* It also doubles as the version this reader *is*, which is what lets it keep reading version-4 and
|
|
10
|
+
* version-5 containers while writing version-6 ones.
|
|
11
|
+
*
|
|
3
12
|
* @type {number}
|
|
4
13
|
*/
|
|
5
14
|
export const VGEO_MIN_READER_VERSION: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_MIN_READER_VERSION.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"VGEO_MIN_READER_VERSION.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,sCAFU,MAAM,CAEyB"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A reader older than this must refuse the file.
|
|
3
|
+
*
|
|
4
|
+
* 6 since the page header's level ordinals widened to `u16` ({@link VGEO_FORMAT_VERSION}): four
|
|
5
|
+
* bytes at offset 4 and four at offset 20 changed meaning, so a version-5 reader would take
|
|
6
|
+
* `max_level` for `node_count`, believe a page holds tens of thousands of nodes, and read its node
|
|
7
|
+
* table out of an offset that is now two reserved bytes. There is no partial reading of that.
|
|
8
|
+
*
|
|
9
|
+
* It also doubles as the version this reader *is*, which is what lets it keep reading version-4 and
|
|
10
|
+
* version-5 containers while writing version-6 ones.
|
|
11
|
+
*
|
|
3
12
|
* @type {number}
|
|
4
13
|
*/
|
|
5
|
-
export const VGEO_MIN_READER_VERSION =
|
|
14
|
+
export const VGEO_MIN_READER_VERSION = 6;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group record field offsets, relative to the record's own start.
|
|
3
|
+
*
|
|
4
|
+
* The record is `VGEO_GROUP_RECORD_SIZE` bytes and `VGEO_FORMAT.md` §6.2 is where the layout is
|
|
5
|
+
* stated; this is that statement in code, so the writer, the reader and the audit address the same
|
|
6
|
+
* bytes by the same names rather than each counting them out again.
|
|
7
|
+
*/
|
|
8
|
+
export type VGEO_GROUP_OFFSET = number;
|
|
9
|
+
export namespace VGEO_GROUP_OFFSET {
|
|
10
|
+
let CLUSTER_FIRST: number;
|
|
11
|
+
let CLUSTER_COUNT: number;
|
|
12
|
+
let PARENT_CLUSTER_COUNT: number;
|
|
13
|
+
let PARENT_FIRST: number;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=VGEO_GROUP_OFFSET.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_GROUP_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js"],"names":[],"mappings":";;;;;;;gCAOU,MAAM"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group record field offsets, relative to the record's own start.
|
|
3
|
+
*
|
|
4
|
+
* The record is `VGEO_GROUP_RECORD_SIZE` bytes and `VGEO_FORMAT.md` §6.2 is where the layout is
|
|
5
|
+
* stated; this is that statement in code, so the writer, the reader and the audit address the same
|
|
6
|
+
* bytes by the same names rather than each counting them out again.
|
|
7
|
+
*
|
|
8
|
+
* @enum {number}
|
|
9
|
+
*/
|
|
10
|
+
export const VGEO_GROUP_OFFSET = {
|
|
11
|
+
CLUSTER_FIRST: 0,
|
|
12
|
+
CLUSTER_COUNT: 2,
|
|
13
|
+
PARENT_CLUSTER_COUNT: 4,
|
|
14
|
+
PARENT_FIRST: 6,
|
|
15
|
+
};
|
|
@@ -7,11 +7,10 @@ export namespace VGEO_PAGE_OFFSET {
|
|
|
7
7
|
let CLUSTER_COUNT: number;
|
|
8
8
|
let MIN_LEVEL: number;
|
|
9
9
|
let MAX_LEVEL: number;
|
|
10
|
-
let NODE_COUNT: number;
|
|
11
10
|
let CLUSTER_TABLE_OFFSET: number;
|
|
12
11
|
let PAYLOAD_OFFSET: number;
|
|
13
12
|
let PAYLOAD_SIZE: number;
|
|
14
|
-
let
|
|
13
|
+
let NODE_COUNT: number;
|
|
15
14
|
let PARENT_TABLE_OFFSET: number;
|
|
16
15
|
let PARENT_ENTRY_COUNT: number;
|
|
17
16
|
let PARENT_PAGE_COUNT: number;
|
|
@@ -5,13 +5,20 @@
|
|
|
5
5
|
export const VGEO_PAGE_OFFSET = {
|
|
6
6
|
GROUP_COUNT: 0,
|
|
7
7
|
CLUSTER_COUNT: 2,
|
|
8
|
+
/**
|
|
9
|
+
* The page's band, `u16` since `format_version` 6 ({@link VGEO_PAGE_OFFSET_V5} is where they
|
|
10
|
+
* were a byte each). The four bytes come from `node_table_offset`, which said only what
|
|
11
|
+
* `VGEO_PAGE_HEADER_SIZE + 8 * group_count` says: the group table follows the header and the
|
|
12
|
+
* node table follows the group table, both by construction, and the reader derives it. What the
|
|
13
|
+
* stored copy was really cross-checking — that `group_count` agrees with the layout — is still
|
|
14
|
+
* checked, because `cluster_table_offset` is stored and must equal the derived node table's end.
|
|
15
|
+
*/
|
|
8
16
|
MIN_LEVEL: 4,
|
|
9
|
-
MAX_LEVEL:
|
|
10
|
-
NODE_COUNT: 6,
|
|
17
|
+
MAX_LEVEL: 6,
|
|
11
18
|
CLUSTER_TABLE_OFFSET: 8,
|
|
12
19
|
PAYLOAD_OFFSET: 12,
|
|
13
20
|
PAYLOAD_SIZE: 16,
|
|
14
|
-
|
|
21
|
+
NODE_COUNT: 20,
|
|
15
22
|
/**
|
|
16
23
|
* Start of this page's parent section, which is the parent-page table immediately followed by
|
|
17
24
|
* the group-parent table. Zero means the page carries neither, which is what every container
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* *
|
|
3
|
+
*/
|
|
4
|
+
export type VGEO_PAGE_OFFSET_V5 = number;
|
|
5
|
+
export namespace VGEO_PAGE_OFFSET_V5 {
|
|
6
|
+
let GROUP_COUNT: number;
|
|
7
|
+
let CLUSTER_COUNT: number;
|
|
8
|
+
let MIN_LEVEL: number;
|
|
9
|
+
let MAX_LEVEL: number;
|
|
10
|
+
let NODE_COUNT: number;
|
|
11
|
+
let CLUSTER_TABLE_OFFSET: number;
|
|
12
|
+
let PAYLOAD_OFFSET: number;
|
|
13
|
+
let PAYLOAD_SIZE: number;
|
|
14
|
+
let NODE_TABLE_OFFSET: number;
|
|
15
|
+
let PARENT_TABLE_OFFSET: number;
|
|
16
|
+
let PARENT_ENTRY_COUNT: number;
|
|
17
|
+
let PARENT_PAGE_COUNT: number;
|
|
18
|
+
let METRIC: number;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=VGEO_PAGE_OFFSET_V5.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_PAGE_OFFSET_V5.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.js"],"names":[],"mappings":";;;kCAmBU,MAAM"}
|