@woosh/meep-engine 3.19.0 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/Editor.d.ts.map +1 -1
- package/editor/enableEditor.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/templates/entity_templates.d.ts.map +1 -1
- package/editor/tools/v2/GizmoNode.d.ts +1 -1
- package/editor/tools/v2/GizmoNode.d.ts.map +1 -1
- package/editor/view/ecs/HierarchicalEntityListView.d.ts +3 -3
- package/editor/view/ecs/HierarchicalEntityListView.d.ts.map +1 -1
- package/editor/view/makeEntityDecorators.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +2 -2
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +7 -48
- package/editor/view/tools/ToolSettingsView.d.ts +1 -1
- package/editor/view/tools/ToolSettingsView.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/core/IdPool.d.ts.map +1 -1
- package/src/core/binary/32BitEncoder.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.d.ts +1 -1
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts +1 -1
- package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.d.ts +3 -3
- package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.js +1 -2
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts.map +1 -1
- package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.d.ts.map +1 -1
- package/src/core/cache/Cache.d.ts +1 -1
- package/src/core/cache/Cache.d.ts.map +1 -1
- package/src/core/cache/wtinylfu/CacheWTinylfu.d.ts.map +1 -1
- package/src/core/collection/array/array_group_by.d.ts.map +1 -1
- package/src/core/collection/array/array_group_by.js +2 -11
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/ListForwarder.d.ts +1 -1
- package/src/core/collection/list/ListForwarder.d.ts.map +1 -1
- package/src/core/collection/map/HashMap.d.ts.map +1 -1
- package/src/core/collection/set/ArraySet.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.d.ts +1 -1
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/bind/TableRecord.d.ts +1 -1
- package/src/core/collection/table/bind/TableRecord.d.ts.map +1 -1
- package/src/core/color/Color.d.ts +8 -8
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts.map +1 -1
- package/src/core/color/hsv/rgb_to_hsv.d.ts.map +1 -1
- package/src/core/events/signal/Signal.d.ts +1 -1
- package/src/core/events/signal/Signal.d.ts.map +1 -1
- package/src/core/events/signal/signal_aggregate_by_time_window.d.ts.map +1 -1
- package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts.map +1 -1
- package/src/core/geom/2d/aabb/AABB2.d.ts +4 -4
- package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
- package/src/core/geom/2d/bvh/BVH2D.d.ts +1 -1
- package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/AABB3.d.ts +6 -6
- package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/atlas_bench_lib.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/atlas_compute_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/atlas_generate.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/pack/atlas_pack_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_param_validity.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_compute_planar_regions.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_decompose.d.ts +7 -1
- package/src/core/geom/3d/mat4/m4_decompose.d.ts.map +1 -1
- package/src/core/geom/3d/quadric/Quadric3.d.ts +11 -11
- package/src/core/geom/3d/quadric/Quadric3.d.ts.map +1 -1
- package/src/core/geom/3d/ray/Ray3.d.ts +3 -3
- package/src/core/geom/3d/ray/Ray3.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +4 -9
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_to_indexed_geometry.d.ts.map +1 -1
- package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts.map +1 -1
- package/src/core/geom/Quaternion.d.ts +4 -4
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Vector1.d.ts +1 -1
- package/src/core/geom/Vector1.d.ts.map +1 -1
- package/src/core/geom/Vector2.d.ts +2 -2
- package/src/core/geom/Vector2.d.ts.map +1 -1
- package/src/core/geom/Vector3.d.ts +3 -3
- package/src/core/geom/Vector3.d.ts.map +1 -1
- package/src/core/geom/Vector4.d.ts +4 -4
- package/src/core/geom/Vector4.d.ts.map +1 -1
- package/src/core/geom/packing/max-rect/find_best_container.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_hash.d.ts +12 -0
- package/src/core/geom/vec3/v3_hash.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_hash.js +19 -0
- package/src/core/geom/vec3/v3_lerp.d.ts +3 -1
- package/src/core/geom/vec3/v3_lerp.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_set.d.ts +14 -0
- package/src/core/geom/vec3/v3_set.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_set.js +17 -0
- package/src/core/geom/vec3/v3_slerp.d.ts +3 -1
- package/src/core/geom/vec3/v3_slerp.d.ts.map +1 -1
- package/src/core/geom/vec4/v4_equals_array.d.ts +11 -0
- package/src/core/geom/vec4/v4_equals_array.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_equals_array.js +16 -0
- package/src/core/geom/vec4/v4_hash.d.ts +12 -0
- package/src/core/geom/vec4/v4_hash.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_hash.js +18 -0
- package/src/core/geom/vec4/v4_set.d.ts +15 -0
- package/src/core/geom/vec4/v4_set.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_set.js +19 -0
- package/src/core/graph/convert_graph_to_dot_string.d.ts +1 -1
- package/src/core/graph/convert_graph_to_dot_string.d.ts.map +1 -1
- package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -1
- package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -1
- package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -1
- package/src/core/json/abstractJSONSerializer.d.ts.map +1 -1
- package/src/core/lang/reactive/AbstractCachingParser.d.ts.map +1 -1
- package/src/core/localization/Localization.d.ts.map +1 -1
- package/src/core/math/linalg/cg/cg_solve.d.ts.map +1 -1
- package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
- package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
- package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts.map +1 -1
- package/src/core/math/random/seededRandom_Mulberry32.d.ts +1 -1
- package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
- package/src/core/model/ModuleRegistry.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
- package/src/core/model/object/optional_clone.d.ts.map +1 -0
- package/src/{shade/descriptor/util → core/model/object}/optional_equality.d.ts +2 -2
- package/src/core/model/object/optional_equality.d.ts.map +1 -0
- package/src/{shade/descriptor/util → core/model/object}/optional_equality.js +2 -2
- package/src/{shade/descriptor/util → core/model/object}/optional_hash.d.ts +1 -1
- package/src/core/model/object/optional_hash.d.ts.map +1 -0
- package/src/{shade/descriptor/util → core/model/object}/optional_hash.js +3 -3
- package/src/core/model/reactive/model/ReactiveExpression.d.ts.map +1 -1
- package/src/core/model/validate_enum_schema.d.ts.map +1 -1
- package/src/core/process/Future.d.ts.map +1 -1
- package/src/core/process/task/Task.d.ts.map +1 -1
- package/src/core/process/task/util/countTask.d.ts.map +1 -1
- package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/engine/Clock.d.ts +1 -1
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/animation/Animations.d.ts.map +1 -1
- package/src/engine/animation/EntityAnimation.d.ts.map +1 -1
- package/src/engine/animation/TransitionFunctions.d.ts.map +1 -1
- package/src/engine/animation/Tween.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/uploadViaElement.d.ts.map +1 -1
- package/src/engine/animation/curve/view/AnimationCurveView.d.ts +1 -1
- package/src/engine/animation/curve/view/AnimationCurveView.d.ts.map +1 -1
- package/src/engine/asset/Asset.d.ts +1 -1
- package/src/engine/asset/Asset.d.ts.map +1 -1
- package/src/engine/asset/Asset.js +3 -1
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetRequest.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/avif/encode_image_source.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.d.ts.map +1 -1
- package/src/engine/browserInfo.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +9 -9
- package/src/engine/control/first-person/abilities/Mantle.js +8 -8
- package/src/engine/control/first-person/abilities/ScrambleUp.js +2 -2
- package/src/engine/control/first-person/abilities/WallJump.js +2 -2
- package/src/engine/control/first-person/abilities/WallRun.js +3 -3
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +19 -46
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +17 -5
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensors.js +20 -7
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +9 -8
- package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/animation/Animation.d.ts +1 -1
- package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
- package/src/engine/ecs/async/SystemWorkerLoopback.d.ts +3 -3
- package/src/engine/ecs/async/SystemWorkerLoopback.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts.map +1 -1
- package/src/engine/ecs/grid/pick.d.ts.map +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts.map +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +9 -10
- package/src/engine/ecs/guid/UUID.d.ts +1 -1
- package/src/engine/ecs/guid/UUID.d.ts.map +1 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +26 -9
- package/src/engine/ecs/parent/EntityNode.d.ts +1 -1
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/FaceEditor.d.ts +7 -7
- package/src/engine/ecs/parent/FaceEditor.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.d.ts +2 -2
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.d.ts.map +1 -1
- package/src/engine/ecs/terrain/TerrainClouds.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.d.ts +1 -1
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/util/obtainTerrain.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.d.ts +6 -6
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
- package/src/engine/graphics/FrameRunner.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/camera_traverse_active.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
- package/src/engine/graphics/ecs/highlight/HighlightDefinition.d.ts +1 -1
- package/src/engine/graphics/ecs/highlight/HighlightDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/make_bvh_depth_range_computer.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts +4 -4
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +6 -22
- package/src/engine/graphics/ecs/path/tube/TubePathStyle.d.ts +1 -1
- package/src/engine/graphics/ecs/path/tube/TubePathStyle.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/tube/build/computeFrenetFrames.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +3 -3
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.d.ts +1 -1
- package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.d.ts.map +1 -1
- package/src/engine/graphics/make_ray_from_viewport_position.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +3 -3
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
- package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.d.ts +1 -1
- package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.d.ts.map +1 -1
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +3 -3
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +1 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +1 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +2 -2
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +5 -1
- package/src/engine/graphics/texture/3d/SingleChannelSampler3D.d.ts +1 -1
- package/src/engine/graphics/texture/3d/SingleChannelSampler3D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/filter/sampler2d_scale_down_generic.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/filter/sampler2d_scale_down_generic.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_combine.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_compute_texel_value_conversion_scale_to_uint8.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/search/make_edge_condition_channel_threshold.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/search/sampler2d_find_pixels.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.d.ts +3 -3
- package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureUsage.d.ts +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureUsage.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/debug/UsageDebugView.d.ts +2 -2
- package/src/engine/graphics/texture/virtual/debug/UsageDebugView.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/debug/UsagePyramidDebugView.d.ts +1 -1
- package/src/engine/graphics/texture/virtual/debug/UsagePyramidDebugView.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/tile/decompose_finger_print.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts +1 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMap.d.ts +1 -1
- package/src/engine/graphics3/VolumetricLightMap.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
- package/src/engine/grid/obstacle/GridObstacle.d.ts.map +1 -1
- package/src/engine/input/devices/GamepadDevice.d.ts +1 -1
- package/src/engine/input/devices/GamepadDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.d.ts +1 -1
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +11 -2
- package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts +1 -1
- package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/SendEventBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/primitive/ActionBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/RotationBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/RotationBehavior.js +14 -2
- package/src/engine/intelligence/blackboard/Blackboard.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts +1 -1
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts +1 -1
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDatabase.d.ts +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDatabase.d.ts.map +1 -1
- package/src/engine/navigation/ecs/path_following/PathFollower.d.ts +2 -2
- package/src/engine/navigation/ecs/path_following/PathFollower.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/PriorityFetch.d.ts +2 -2
- package/src/engine/network/PriorityFetch.d.ts.map +1 -1
- package/src/engine/network/diagnostics/BandwidthMeter.d.ts.map +1 -1
- package/src/engine/network/ecs/owner_authorization.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.d.ts +1 -1
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/sim/SimActionExecutor.d.ts +1 -1
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
- package/src/engine/network/time/RenderPlayout.d.ts.map +1 -1
- package/src/engine/network/transport/Channel.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.d.ts +11 -11
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +13 -13
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +4 -4
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +2 -2
- package/src/engine/physics/broadphase/generate_pairs.d.ts +3 -3
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
- package/src/engine/physics/broadphase/generate_pairs.js +1 -1
- package/src/engine/physics/ccd/linear_sweep.d.ts +2 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +4 -5
- package/src/engine/physics/constraint/solve_constraints.js +3 -3
- package/src/engine/physics/ecs/BodyKind.d.ts +1 -1
- package/src/engine/physics/ecs/BodyKind.js +1 -1
- package/src/engine/physics/ecs/Collider.d.ts +1 -1
- package/src/engine/physics/ecs/Collider.js +1 -1
- package/src/engine/physics/ecs/Joint.d.ts +15 -10
- package/src/engine/physics/ecs/Joint.d.ts.map +1 -1
- package/src/engine/physics/ecs/Joint.js +27 -18
- package/src/engine/physics/ecs/JointSerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/JointSerializationAdapter.js +8 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +40 -77
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +113 -75
- package/src/engine/physics/ecs/RigidBody.d.ts +17 -12
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBody.js +58 -24
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +13 -12
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts +1 -1
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +1 -1
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +4 -4
- package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +10 -10
- package/src/engine/physics/fluid/ecs/FluidComponent.js +10 -10
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +2 -2
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +3 -3
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +3 -3
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +4 -4
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/FluidSystem.js +3 -3
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +2 -2
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts +3 -3
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +3 -3
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.d.ts +3 -3
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.js +2 -2
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +3 -3
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +2 -2
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +4 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +8 -8
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +8 -17
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +11 -11
- package/src/engine/physics/integration/integrate_position.d.ts +6 -7
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +5 -6
- package/src/engine/physics/integration/integrate_velocity.d.ts +4 -4
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +7 -7
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts +4 -4
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +3 -3
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +1 -2
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +1 -2
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +7 -6
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +8 -8
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +10 -5
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +10 -6
- package/src/engine/physics/queries/overlap_shape.d.ts +5 -14
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +4 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.d.ts +9 -1
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +2 -2
- package/src/engine/physics/solver/solve_contacts.d.ts +2 -2
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +2 -2
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts +4 -8
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +16 -12
- package/src/engine/save/Storage.d.ts.map +1 -1
- package/src/engine/sound/SoundEngine.d.ts +1 -1
- package/src/engine/sound/SoundEngine.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +27 -2
- package/src/engine/sound/simulation/AcousticSimulator.d.ts +2 -2
- package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/VolumeField.d.ts +1 -1
- package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_delaunay_edges.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_densify_portals.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_detect_portals.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_place_sdf_cover.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +1 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/foaReverbImpulseResponse.d.ts.map +1 -1
- package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts +3 -3
- package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts +3 -3
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -1
- package/src/engine/ui/notification/NotificationManager.d.ts.map +1 -1
- package/src/engine/ui/notification/ViewEmitter.d.ts +1 -1
- package/src/engine/ui/notification/ViewEmitter.d.ts.map +1 -1
- package/src/engine/ui/tiles2d/TileGrid.d.ts.map +1 -1
- package/src/extractName.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/av1/encode/encode_av1_still.d.ts.map +1 -1
- package/src/format/image/avif/heif/write_avif_file.d.ts +2 -2
- package/src/format/image/avif/heif/write_avif_file.d.ts.map +1 -1
- package/src/format/image/jpeg/JpegImage.d.ts.map +1 -1
- package/src/format/image/png/PNG.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_zTXt.d.ts.map +1 -1
- package/src/format/scene/gltf/ext/GltfBufferViewExtensionSet.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_node_world_matrices.d.ts.map +1 -1
- package/src/format/scene/usd/unpack_usdz.d.ts.map +1 -1
- package/src/format/scene/usd/usd_triangulate.d.ts.map +1 -1
- package/src/format/texture/basis/astc_integer_sequence.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +22 -3
- package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.d.ts.map +1 -1
- package/src/generation/theme/ThemeEngine.d.ts +2 -2
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/shade/descriptor/ObjectDescriptorBase.d.ts +1 -1
- package/src/shade/descriptor/ObjectDescriptorBase.d.ts.map +1 -1
- package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +1 -1
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +3 -3
- package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +1 -1
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +1 -1
- package/src/shade/descriptor/pipeline/render/ColorTargetState.js +3 -3
- package/src/shade/descriptor/pipeline/render/FragmentState.js +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +3 -3
- package/src/shade/descriptor/texture/TextureDescriptor.d.ts +1 -1
- package/src/shade/device/ShadeGPUCommandContext.d.ts +1 -1
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +1 -1
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -1
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +1 -1
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerStats.d.ts +1 -1
- package/src/shade/device/timing/GPUTimerStats.d.ts.map +1 -1
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +894 -894
- package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
- package/src/shade/playground/bvh_repro/bvh_repro_device.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/capture_scene_color.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/measure_flicker.d.ts.map +1 -1
- package/src/shade/playground/particle_editor/README.md +1 -1
- package/src/shade/playground/particle_system/index.html +0 -1
- package/src/shade/playground/particle_system/main.js +1 -2
- package/src/shade/playground/particle_system/particle_prototype.d.ts +7 -9
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +7 -9
- package/src/shade/playground/particle_system/particle_scene.d.ts +5 -6
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +6 -7
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +1 -1
- package/src/shade/playground/ssr_motion/README.md +22 -0
- package/src/shade/playground/ssr_motion/index.html +18 -0
- package/src/shade/playground/ssr_motion/main.d.ts +2 -0
- package/src/shade/playground/ssr_motion/main.d.ts.map +1 -0
- package/src/shade/playground/ssr_motion/main.js +149 -0
- package/src/shade/playground/ssr_variance/index.html +1 -0
- package/src/shade/playground/vgeo_viewer/README.md +123 -0
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +61 -0
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/cut_geometry.js +497 -0
- package/src/shade/playground/vgeo_viewer/index.html +77 -0
- package/src/shade/playground/vgeo_viewer/main.d.ts +2 -0
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/main.js +1288 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +18 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.js +117 -0
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +154 -0
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/select_cut.js +437 -0
- package/src/shade/renderer/DynamicResolutionScaling.d.ts +1 -1
- package/src/shade/renderer/DynamicResolutionScaling.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.d.ts +5 -5
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts.map +1 -1
- package/src/shade/renderer/camera/Camera.d.ts +3 -3
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.d.ts +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/OrthographicCamera.d.ts +4 -4
- package/src/shade/renderer/camera/OrthographicCamera.d.ts.map +1 -1
- package/src/shade/renderer/camera/PerspectiveCamera.d.ts +2 -2
- package/src/shade/renderer/camera/PerspectiveCamera.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +11 -3
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +25 -5
- package/src/shade/renderer/extension/FrameContext.d.ts +1 -1
- package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
- package/src/shade/renderer/extension/GBufferTextures.d.ts +4 -4
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/PresentTarget.d.ts +1 -1
- package/src/shade/renderer/extension/PresentTarget.d.ts.map +1 -1
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/extension/SceneColor.d.ts +1 -1
- package/src/shade/renderer/extension/SceneColor.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts +4 -4
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/geometry/Attribute.d.ts +1 -1
- package/src/shade/renderer/geometry/Attribute.d.ts.map +1 -1
- package/src/shade/renderer/geometry/Geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/Geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/Geometry.js +4 -7
- package/src/shade/renderer/geometry/bvh/bvh2_check_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +3 -3
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_collect_geometries.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/VGEO_ATTRIBUTES.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_read_frame_extent.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_read_frame_extent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_read_frame_extent.js +59 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.d.ts +0 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.js +2 -23
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +94 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +170 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +122 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +143 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +185 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +572 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +64 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +80 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +198 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +232 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageWant.d.ts +51 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageWant.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageWant.js +55 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +68 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +72 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +28 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +108 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +83 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts +53 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +211 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +271 -0
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/clipmap/GPUClipMap3D.d.ts +2 -2
- package/src/shade/renderer/global_illumination/clipmap/GPUClipMap3D.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts +1 -1
- package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/check_bvh_structure.d.ts.map +1 -1
- package/src/shade/renderer/light/LightCollection.d.ts +2 -2
- package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/model/PointLight.d.ts +1 -1
- package/src/shade/renderer/light/model/PointLight.d.ts.map +1 -1
- package/src/shade/renderer/light/model/SpotLight.d.ts +1 -1
- package/src/shade/renderer/light/model/SpotLight.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/gltf_create_material.d.ts +1 -1
- package/src/shade/renderer/loader/gltf/gltf_create_material.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +2 -2
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_decode_image.d.ts +1 -1
- package/src/shade/renderer/loader/usd/usd_decode_image.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +2 -2
- package/src/shade/renderer/material/util/material_convert_metallic_roughness_to_specular_glossiness.d.ts.map +1 -1
- package/src/shade/renderer/material/util/material_convert_specular_glossiness_to_metallic_roughness.d.ts.map +1 -1
- package/src/shade/renderer/particles/DESIGN.md +27 -18
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +24 -10
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +80 -73
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +17 -16
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +35 -22
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +7 -7
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +9 -15
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_group_library.js +8 -3
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +0 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +0 -9
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +0 -10
- package/src/shade/renderer/particles/graph/particle_ramp.d.ts +2 -8
- package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_ramp.js +2 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +0 -6
- package/src/shade/renderer/particles/graph_particles.d.ts +11 -0
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +55 -37
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +13 -4
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +1 -12
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +1 -12
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +54 -60
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +9 -17
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +0 -1
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +2 -16
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +0 -14
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +3 -17
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +15 -36
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +1 -5
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +1 -8
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +2 -11
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +2 -11
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +13 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts +3 -6
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +49 -17
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +0 -2
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +0 -2
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +1 -5
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +0 -2
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +17 -13
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/graph_particle_sort.js +43 -33
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +1 -3
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +4 -20
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +2 -5
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +0 -2
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +0 -2
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/graph_pass_composit_red_as_rgba.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +4 -4
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +3 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js +21 -0
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +4 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +2 -1
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +2 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/scene/InstanceBatch.d.ts +1 -1
- package/src/shade/renderer/scene/InstanceBatch.d.ts.map +1 -1
- package/src/shade/renderer/scene/Mesh.js +1 -1
- package/src/shade/renderer/scene/Node3D.d.ts +3 -3
- package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +11 -0
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts +1 -1
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
- package/src/shade/renderer/texture/GPUTextureContext.d.ts +1 -1
- package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
- package/src/shade/renderer/texture/ShadeTexture.js +1 -1
- package/src/shade/renderer/texture/format/sampler_descriptor_unpack.d.ts.map +1 -1
- package/src/shade/renderer/texture/source/ShadeImage.d.ts +7 -7
- package/src/shade/renderer/texture/source/ShadeImage.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VTPageTable.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewContext.d.ts +2 -2
- package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts +1 -1
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +2 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/view/View.d.ts +1 -1
- package/src/view/View.d.ts.map +1 -1
- package/src/view/elements/button/ButtonView.d.ts +1 -1
- package/src/view/elements/button/ButtonView.d.ts.map +1 -1
- package/src/view/elements/progress/SmoothProgressBar.d.ts +2 -2
- package/src/view/elements/progress/SmoothProgressBar.d.ts.map +1 -1
- package/src/view/elements/radial/RadialMenuElement.d.ts +3 -3
- package/src/view/elements/radial/RadialMenuElement.d.ts.map +1 -1
- package/src/view/elements/windrose/WindRoseDiagram.d.ts.map +1 -1
- package/src/view/layout/DockLayoutView.d.ts.map +1 -1
- package/src/view/layout/DrawerView.d.ts +2 -2
- package/src/view/layout/DrawerView.d.ts.map +1 -1
- package/src/view/layout/SplitView.d.ts +9 -9
- package/src/view/layout/SplitView.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.d.ts +3 -2
- package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.js +28 -5
- package/src/view/minimap/dom/MinimapMarkerView.js +65 -34
- package/src/view/minimap/gl/MarkerGL.d.ts +15 -3
- package/src/view/minimap/gl/MarkerGL.d.ts.map +1 -1
- package/src/view/minimap/gl/MarkerGL.js +31 -4
- package/src/engine/physics/BULLET_REVIEW.md +0 -945
- package/src/engine/physics/CANNON_REVIEW.md +0 -1300
- package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +0 -208
- package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +0 -364
- package/src/engine/physics/INTEPOLATION_SYSTEM_PLAN.md +0 -287
- package/src/engine/physics/JOLT_REVIEW.md +0 -913
- package/src/engine/physics/PLAN.md +0 -1120
- package/src/engine/physics/RAPIER_REVIEW.md +0 -934
- package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +0 -642
- package/src/engine/physics/REVIEW_002.md +0 -151
- package/src/engine/physics/REVIEW_003.md +0 -166
- package/src/shade/descriptor/util/optional_clone.d.ts.map +0 -1
- package/src/shade/descriptor/util/optional_equality.d.ts.map +0 -1
- package/src/shade/descriptor/util/optional_hash.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +0 -2063
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +0 -19
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +0 -30
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +0 -11
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +0 -13
- /package/src/{shade/descriptor/util → core/model/object}/optional_clone.d.ts +0 -0
- /package/src/{shade/descriptor/util → core/model/object}/optional_clone.js +0 -0
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { BinaryBuffer } from "../../../../../../core/binary/BinaryBuffer.js";
|
|
3
|
+
import { vgeo_compute_frame_checksum } from "../checksum/vgeo_compute_frame_checksum.js";
|
|
4
|
+
import { VGEO_FRAME_OFFSET } from "../frame/VGEO_FRAME_OFFSET.js";
|
|
5
|
+
import { vgeo_read_frame_extent } from "../frame/vgeo_read_frame_extent.js";
|
|
6
|
+
import { vgeo_validate_container } from "../vgeo_validate_container.js";
|
|
7
|
+
import { VGeoReadOptions } from "./VGeoReadOptions.js";
|
|
8
|
+
import { vgeo_read_directory } from "./vgeo_read_directory.js";
|
|
9
|
+
import { vgeo_read_header, vgeo_resident_head_size, VGEO_MIN_HEAD_BYTES } from "./vgeo_read_header.js";
|
|
10
|
+
import { vgeo_read_page } from "./vgeo_read_page.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Everything in the container is little-endian (`VGEO_FORMAT.md` §2).
|
|
14
|
+
* @type {boolean}
|
|
15
|
+
*/
|
|
16
|
+
const LE = true;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A `.vgeo` container, read a page at a time.
|
|
20
|
+
*
|
|
21
|
+
* **Nothing here ever holds the whole file.** Opening it reads a head prefix — the header, the level
|
|
22
|
+
* table, and the root frame, which §10 calls the always-resident set — and after that a page arrives
|
|
23
|
+
* only when something asks for it, from exactly the byte range the page pointing at it wrote down.
|
|
24
|
+
* That is not an optimization bolted onto a whole-file reader; it is the shape the format was
|
|
25
|
+
* designed for, and a reader built the other way cannot be made into this one.
|
|
26
|
+
*
|
|
27
|
+
* What that buys, concretely: a 27-million-triangle asset opens in the bytes of its root page, and a
|
|
28
|
+
* view of it costs the pages that view actually selects. What it costs is that a traversal has to
|
|
29
|
+
* cope with a page it wants and does not have — which the format also already answers, because the
|
|
30
|
+
* clamped cut is watertight and correct at every arrival order (§10, activation).
|
|
31
|
+
*
|
|
32
|
+
* Residency is this object. {@link page} answers for what is here, {@link install_want} brings one
|
|
33
|
+
* more, {@link evict} drops one, and a {@link VGeoPage} owns its own bytes and tables so that
|
|
34
|
+
* dropping it drops everything it cost.
|
|
35
|
+
*
|
|
36
|
+
* **Validation is not on this path.** The mandatory reject rules of §4 and §10 are applied
|
|
37
|
+
* unconditionally by {@link vgeo_read_header} and {@link vgeo_read_page} — a file whose magic,
|
|
38
|
+
* versions, encoding or codec this build does not understand is refused rather than misread. The
|
|
39
|
+
* whole-file audit is {@link validate}, it reads every byte of the file, and it is off by default;
|
|
40
|
+
* see {@link VGeoReadOptions.validate}.
|
|
41
|
+
*
|
|
42
|
+
* @author Alex Goldring
|
|
43
|
+
* @copyright Company Named Limited (c) 2026
|
|
44
|
+
*/
|
|
45
|
+
export class VGeoContainerReader {
|
|
46
|
+
/**
|
|
47
|
+
* @type {VGeoContainerHeader}
|
|
48
|
+
*/
|
|
49
|
+
header = undefined;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The page directory, once {@link read_directory} has been asked for it. A traversal never needs
|
|
53
|
+
* it; a tool looking at every page does.
|
|
54
|
+
* @type {VGeoDirectory|undefined}
|
|
55
|
+
*/
|
|
56
|
+
directory = undefined;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @type {VGeoByteSource}
|
|
60
|
+
*/
|
|
61
|
+
#source;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @type {VGeoReadOptions}
|
|
65
|
+
*/
|
|
66
|
+
#options;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Resident pages, by page index.
|
|
70
|
+
* @type {Map<number, VGeoPage>}
|
|
71
|
+
*/
|
|
72
|
+
#pages = new Map();
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Fetches in flight, by page index — so that two clusters wanting the same page produce one
|
|
76
|
+
* request. Wants dedup on page index across clusters, groups and instances (§10), and this is
|
|
77
|
+
* where that happens for the ones already on the wire.
|
|
78
|
+
* @type {Map<number, Promise<VGeoPage>>}
|
|
79
|
+
*/
|
|
80
|
+
#pending = new Map();
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* The speculative head prefix, kept.
|
|
84
|
+
*
|
|
85
|
+
* Coarse-first layout is what makes this worth keeping rather than parsing and dropping: a
|
|
86
|
+
* prefix that overshot the root frame overshot into the pages the traversal is most likely to
|
|
87
|
+
* want next, and serving those from here costs no request at all.
|
|
88
|
+
*
|
|
89
|
+
* @type {Uint8Array}
|
|
90
|
+
*/
|
|
91
|
+
#head = new Uint8Array(0);
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @type {number}
|
|
95
|
+
*/
|
|
96
|
+
#resident_bytes = 0;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {VGeoByteSource} source
|
|
100
|
+
* @param {VGeoReadOptions} [options]
|
|
101
|
+
*/
|
|
102
|
+
constructor(source, options = new VGeoReadOptions()) {
|
|
103
|
+
assert.defined(source, 'source');
|
|
104
|
+
|
|
105
|
+
this.#source = source;
|
|
106
|
+
this.#options = options;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @returns {VGeoByteSource}
|
|
111
|
+
*/
|
|
112
|
+
get source() {
|
|
113
|
+
return this.#source;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @returns {VGeoReadOptions}
|
|
118
|
+
*/
|
|
119
|
+
get options() {
|
|
120
|
+
return this.#options;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @returns {number}
|
|
125
|
+
*/
|
|
126
|
+
get resident_page_count() {
|
|
127
|
+
return this.#pages.size;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Decoded bytes currently held. The number a residency budget is spent against.
|
|
132
|
+
* @returns {number}
|
|
133
|
+
*/
|
|
134
|
+
get resident_bytes() {
|
|
135
|
+
return this.#resident_bytes;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @returns {number}
|
|
140
|
+
*/
|
|
141
|
+
get pending_page_count() {
|
|
142
|
+
return this.#pending.size;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* The root page, which is pinned for the life of the reader — §10 makes it the one page that is
|
|
147
|
+
* never evictable, because every traversal starts by walking its parentless groups.
|
|
148
|
+
* @returns {VGeoPage}
|
|
149
|
+
*/
|
|
150
|
+
get root() {
|
|
151
|
+
return this.#pages.get(0);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Every resident page, in page-index order.
|
|
156
|
+
* @returns {VGeoPage[]}
|
|
157
|
+
*/
|
|
158
|
+
get pages() {
|
|
159
|
+
return Array.from(this.#pages.values()).sort((a, b) => a.index - b.index);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Open a container: header, level table, root page.
|
|
164
|
+
*
|
|
165
|
+
* @param {VGeoByteSource} source
|
|
166
|
+
* @param {VGeoReadOptions} [options]
|
|
167
|
+
* @returns {Promise<VGeoContainerReader>}
|
|
168
|
+
* @throws {Error} when the bytes are not a `.vgeo` this build reads, or the root frame does not
|
|
169
|
+
* match what the header says about it
|
|
170
|
+
*/
|
|
171
|
+
static async open(source, options = new VGeoReadOptions()) {
|
|
172
|
+
const reader = new VGeoContainerReader(source, options);
|
|
173
|
+
|
|
174
|
+
await reader.#open();
|
|
175
|
+
|
|
176
|
+
return reader;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @returns {Promise<void>}
|
|
181
|
+
*/
|
|
182
|
+
async #open() {
|
|
183
|
+
const source = this.#source;
|
|
184
|
+
|
|
185
|
+
if (source.byte_length < VGEO_MIN_HEAD_BYTES) {
|
|
186
|
+
throw new Error(
|
|
187
|
+
`${source.name} is ${source.byte_length} bytes, shorter than a .vgeo header`
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const prefix = Math.min(
|
|
192
|
+
source.byte_length,
|
|
193
|
+
Math.max(this.#options.head_prefix_bytes, VGEO_MIN_HEAD_BYTES)
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
this.#head = await source.read(0, prefix);
|
|
197
|
+
|
|
198
|
+
/*
|
|
199
|
+
§10's always-resident set: the header, the level table, and the root frame — in that order,
|
|
200
|
+
contiguously, and bounded by two fields of the fixed header. Whatever the prefix already
|
|
201
|
+
covered, one range brings the rest, so a cold start is two requests at worst and one
|
|
202
|
+
whenever the prefix was generous. Nothing is fetched twice: the head only grows at its tail.
|
|
203
|
+
*/
|
|
204
|
+
await this.#grow_head(vgeo_resident_head_size(this.#head));
|
|
205
|
+
|
|
206
|
+
this.header = vgeo_read_header(this.#head);
|
|
207
|
+
|
|
208
|
+
await this.#install_root();
|
|
209
|
+
|
|
210
|
+
if (this.#options.validate) {
|
|
211
|
+
await this.validate();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Install page 0, checking it against what the header promised — §10's cold-start rule.
|
|
217
|
+
*
|
|
218
|
+
* @returns {Promise<void>}
|
|
219
|
+
*/
|
|
220
|
+
async #install_root() {
|
|
221
|
+
const header = this.header;
|
|
222
|
+
|
|
223
|
+
const root = await this.install(
|
|
224
|
+
0, header.root_page_offset, header.root_page_fetch_size
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
/*
|
|
228
|
+
Both of these are §10 reject rules rather than validation: the header states the root's
|
|
229
|
+
extent and decoded size so that a reader can admit RAM and size a fetch before it has seen
|
|
230
|
+
the frame, and a root frame that disagrees means one of the two numbers is wrong. Which one
|
|
231
|
+
is unknowable from here, and reading on under either is how a reader ends up trusting a
|
|
232
|
+
number it has already caught lying.
|
|
233
|
+
*/
|
|
234
|
+
if (root.decoded_size !== header.root_page_decoded_size) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
`the root frame decodes to ${root.decoded_size} bytes and the header says`
|
|
237
|
+
+ ` ${header.root_page_decoded_size}`
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (root.fetch_size !== header.root_page_fetch_size) {
|
|
242
|
+
throw new Error(
|
|
243
|
+
`the root frame occupies ${root.fetch_size} bytes and the header says`
|
|
244
|
+
+ ` ${header.root_page_fetch_size}`
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* The page, if it is here.
|
|
251
|
+
*
|
|
252
|
+
* Synchronous and total: a traversal asks this per cluster and must not await inside itself, so
|
|
253
|
+
* `undefined` is an answer it acts on — clamp, and record a want — rather than a case to handle.
|
|
254
|
+
*
|
|
255
|
+
* @param {number} page_index
|
|
256
|
+
* @returns {VGeoPage|undefined}
|
|
257
|
+
*/
|
|
258
|
+
page(page_index) {
|
|
259
|
+
return this.#pages.get(page_index);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* @param {number} page_index
|
|
264
|
+
* @returns {boolean}
|
|
265
|
+
*/
|
|
266
|
+
is_resident(page_index) {
|
|
267
|
+
return this.#pages.has(page_index);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Fetch and install one page, from the exact range something already resident named.
|
|
272
|
+
*
|
|
273
|
+
* Concurrent calls for the same page share one fetch; a page already resident is returned
|
|
274
|
+
* without one.
|
|
275
|
+
*
|
|
276
|
+
* @param {number} page_index
|
|
277
|
+
* @param {number} frame_offset absolute
|
|
278
|
+
* @param {number} fetch_size
|
|
279
|
+
* @returns {Promise<VGeoPage>}
|
|
280
|
+
*/
|
|
281
|
+
install(page_index, frame_offset, fetch_size) {
|
|
282
|
+
const resident = this.#pages.get(page_index);
|
|
283
|
+
|
|
284
|
+
if (resident !== undefined) {
|
|
285
|
+
return Promise.resolve(resident);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const in_flight = this.#pending.get(page_index);
|
|
289
|
+
|
|
290
|
+
if (in_flight !== undefined) {
|
|
291
|
+
return in_flight;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
const fetch = this.#fetch_page(page_index, frame_offset, fetch_size)
|
|
295
|
+
.finally(() => this.#pending.delete(page_index));
|
|
296
|
+
|
|
297
|
+
this.#pending.set(page_index, fetch);
|
|
298
|
+
|
|
299
|
+
return fetch;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @param {number} page_index
|
|
304
|
+
* @param {number} frame_offset
|
|
305
|
+
* @param {number} fetch_size
|
|
306
|
+
* @returns {Promise<VGeoPage>}
|
|
307
|
+
*/
|
|
308
|
+
async #fetch_page(page_index, frame_offset, fetch_size) {
|
|
309
|
+
const bytes = await this.#read(frame_offset, fetch_size);
|
|
310
|
+
|
|
311
|
+
if (this.#options.verify_frames) {
|
|
312
|
+
this.#verify_frame(bytes, page_index);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const page = vgeo_read_page(bytes, page_index);
|
|
316
|
+
|
|
317
|
+
page.frame_offset = frame_offset;
|
|
318
|
+
|
|
319
|
+
// Two callers can reach here for one page only if the second started before the first
|
|
320
|
+
// resolved, which `#pending` already prevents — but residency is the accounting, so it is
|
|
321
|
+
// read here rather than assumed.
|
|
322
|
+
if (!this.#pages.has(page_index)) {
|
|
323
|
+
this.#pages.set(page_index, page);
|
|
324
|
+
|
|
325
|
+
this.#resident_bytes += page.decoded_size;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
return this.#pages.get(page_index);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Install the page a want names.
|
|
333
|
+
*
|
|
334
|
+
* @param {VGeoPageWant} want
|
|
335
|
+
* @returns {Promise<VGeoPage>}
|
|
336
|
+
*/
|
|
337
|
+
install_want(want) {
|
|
338
|
+
return this.install(want.page_index, want.frame_offset, want.fetch_size);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Install a batch of wants, most wanted first, with a bounded number of fetches in flight.
|
|
343
|
+
*
|
|
344
|
+
* Ordered by {@link VGeoPageWant.priority}, which is how far past the pixel threshold the
|
|
345
|
+
* clamped cluster projected — so a caller that stops early has fetched the pages that would fix
|
|
346
|
+
* the most visible coarseness, not an arbitrary prefix of the list.
|
|
347
|
+
*
|
|
348
|
+
* @param {VGeoPageWant[]} wants
|
|
349
|
+
* @param {number} [limit] most pages to install; the rest are left for the next traversal to
|
|
350
|
+
* want again, which it will, from a cut taken with everything this call did install
|
|
351
|
+
* @returns {Promise<VGeoPage[]>} the pages installed, in completion order
|
|
352
|
+
*/
|
|
353
|
+
async install_wants(wants, limit = wants.length) {
|
|
354
|
+
// Sorted before it is cut, not after: a limit applied to the caller's order would install an
|
|
355
|
+
// arbitrary prefix and the ranking would have bought nothing.
|
|
356
|
+
const queue = wants.slice().sort((a, b) => b.priority - a.priority).slice(0, limit);
|
|
357
|
+
|
|
358
|
+
const installed = [];
|
|
359
|
+
|
|
360
|
+
let next = 0;
|
|
361
|
+
|
|
362
|
+
const worker = async () => {
|
|
363
|
+
while (next < queue.length) {
|
|
364
|
+
const want = queue[next++];
|
|
365
|
+
|
|
366
|
+
installed.push(await this.install_want(want));
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
const workers = [];
|
|
371
|
+
|
|
372
|
+
const width = Math.min(this.#options.max_concurrent_fetches, queue.length);
|
|
373
|
+
|
|
374
|
+
for (let i = 0; i < width; i++) {
|
|
375
|
+
workers.push(worker());
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
await Promise.all(workers);
|
|
379
|
+
|
|
380
|
+
return installed;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Drop a page.
|
|
385
|
+
*
|
|
386
|
+
* The eviction *rule* — a page is evictable only while it has no resident child pages, and the
|
|
387
|
+
* root is pinned (§10) — is a residency policy and belongs to whatever is managing the budget,
|
|
388
|
+
* not here. What this does is the dropping.
|
|
389
|
+
*
|
|
390
|
+
* @param {number} page_index
|
|
391
|
+
* @returns {boolean} whether a page was there to drop
|
|
392
|
+
*/
|
|
393
|
+
evict(page_index) {
|
|
394
|
+
const page = this.#pages.get(page_index);
|
|
395
|
+
|
|
396
|
+
if (page === undefined) {
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
this.#pages.delete(page_index);
|
|
401
|
+
|
|
402
|
+
this.#resident_bytes -= page.decoded_size;
|
|
403
|
+
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Drop every page but the root, which is pinned.
|
|
409
|
+
*
|
|
410
|
+
* @returns {number} pages dropped
|
|
411
|
+
*/
|
|
412
|
+
evict_all() {
|
|
413
|
+
let dropped = 0;
|
|
414
|
+
|
|
415
|
+
for (const index of Array.from(this.#pages.keys())) {
|
|
416
|
+
if (index !== 0 && this.evict(index)) {
|
|
417
|
+
dropped++;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return dropped;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Read the page directory, and keep it on {@link directory}.
|
|
426
|
+
*
|
|
427
|
+
* One fetch of a region that is 32 bytes per page — a hundred kilobytes for a file with three
|
|
428
|
+
* thousand pages. Auxiliary by design: nothing a traversal does needs it, and asking for it says
|
|
429
|
+
* the caller wants to reach pages the DAG does not lead it to.
|
|
430
|
+
*
|
|
431
|
+
* @returns {Promise<VGeoDirectory>}
|
|
432
|
+
*/
|
|
433
|
+
async read_directory() {
|
|
434
|
+
if (this.directory !== undefined) {
|
|
435
|
+
return this.directory;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const header = this.header;
|
|
439
|
+
|
|
440
|
+
const end = header.dir_block_checksums_offset > header.directory_offset
|
|
441
|
+
? header.dir_block_checksums_offset
|
|
442
|
+
: this.#source.byte_length;
|
|
443
|
+
|
|
444
|
+
const bytes = await this.#read(header.directory_offset, end - header.directory_offset);
|
|
445
|
+
|
|
446
|
+
this.directory = vgeo_read_directory(bytes, header.total_pages);
|
|
447
|
+
|
|
448
|
+
return this.directory;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Install every page the directory lists.
|
|
453
|
+
*
|
|
454
|
+
* The opposite of what this reader is for, and exactly what a tool wants when the question is
|
|
455
|
+
* about the file rather than about a view of it — the pages no cut reaches are the ones a bug
|
|
456
|
+
* hides in.
|
|
457
|
+
*
|
|
458
|
+
* @param {function(number, number): void} [on_progress] called with pages installed and total
|
|
459
|
+
* @returns {Promise<void>}
|
|
460
|
+
*/
|
|
461
|
+
async install_all_pages(on_progress = undefined) {
|
|
462
|
+
const directory = await this.read_directory();
|
|
463
|
+
|
|
464
|
+
let done = 0;
|
|
465
|
+
|
|
466
|
+
for (let index = 0; index < directory.page_count; index++) {
|
|
467
|
+
await this.install(index, directory.frame_offset[index], directory.fetch_size[index]);
|
|
468
|
+
|
|
469
|
+
done++;
|
|
470
|
+
|
|
471
|
+
if (on_progress !== undefined) {
|
|
472
|
+
on_progress(done, directory.page_count);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* The whole-file audit — every build invariant of §11, every checksum, and the directory against
|
|
479
|
+
* what a frame scan reconstructs.
|
|
480
|
+
*
|
|
481
|
+
* **This reads the entire file**, which is the one thing the rest of this class exists to avoid,
|
|
482
|
+
* and it is why it is a separate call and off by default. It answers a question about whoever
|
|
483
|
+
* produced the file; nothing about reading one depends on it having been asked.
|
|
484
|
+
*
|
|
485
|
+
* @returns {Promise<VGeoDefect[]>} empty is the only good answer
|
|
486
|
+
*/
|
|
487
|
+
async validate() {
|
|
488
|
+
const bytes = await this.#source.read(0, this.#source.byte_length);
|
|
489
|
+
|
|
490
|
+
const whole = bytes.byteOffset === 0 && bytes.byteLength === bytes.buffer.byteLength
|
|
491
|
+
? bytes.buffer
|
|
492
|
+
: bytes.slice().buffer;
|
|
493
|
+
|
|
494
|
+
return vgeo_validate_container(BinaryBuffer.fromArrayBuffer(whole));
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* A byte range, from the kept head prefix where it lies inside it and from the source otherwise.
|
|
499
|
+
*
|
|
500
|
+
* @param {number} offset
|
|
501
|
+
* @param {number} length
|
|
502
|
+
* @returns {Promise<Uint8Array>}
|
|
503
|
+
*/
|
|
504
|
+
#read(offset, length) {
|
|
505
|
+
if (offset + length <= this.#head.byteLength) {
|
|
506
|
+
return Promise.resolve(this.#head.subarray(offset, offset + length));
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
return this.#source.read(offset, length);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Extend the kept head prefix to `to` bytes, fetching only the part that is missing.
|
|
514
|
+
*
|
|
515
|
+
* Only ever at the tail, which is what keeps a cold start from paying for the same bytes twice:
|
|
516
|
+
* the header is read once even when the prefix that carried it stopped short of the level table.
|
|
517
|
+
*
|
|
518
|
+
* @param {number} to
|
|
519
|
+
* @returns {Promise<void>}
|
|
520
|
+
*/
|
|
521
|
+
async #grow_head(to) {
|
|
522
|
+
const target = Math.min(to, this.#source.byte_length);
|
|
523
|
+
|
|
524
|
+
const have = this.#head.byteLength;
|
|
525
|
+
|
|
526
|
+
if (target <= have) {
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
const tail = await this.#source.read(have, target - have);
|
|
531
|
+
|
|
532
|
+
const grown = new Uint8Array(target);
|
|
533
|
+
|
|
534
|
+
grown.set(this.#head, 0);
|
|
535
|
+
grown.set(tail, have);
|
|
536
|
+
|
|
537
|
+
this.#head = grown;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Check a frame against its identity-seeded checksum before anything decodes it.
|
|
542
|
+
*
|
|
543
|
+
* The seed is `asset_id_low64 XOR page_index`, so this catches a well-formed frame of the wrong
|
|
544
|
+
* page or the wrong asset as well as corruption — which is the case a traversal can actually
|
|
545
|
+
* produce, by following a child-table entry whose offset is wrong.
|
|
546
|
+
*
|
|
547
|
+
* @param {Uint8Array} bytes the fetched frame
|
|
548
|
+
* @param {number} page_index
|
|
549
|
+
*/
|
|
550
|
+
#verify_frame(bytes, page_index) {
|
|
551
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
552
|
+
|
|
553
|
+
const frame = vgeo_read_frame_extent(view, 0, page_index);
|
|
554
|
+
|
|
555
|
+
const stored = view.getBigUint64(VGEO_FRAME_OFFSET.CHECKSUM, LE);
|
|
556
|
+
|
|
557
|
+
const copy = bytes.byteOffset === 0 && bytes.byteLength === bytes.buffer.byteLength
|
|
558
|
+
? bytes.buffer
|
|
559
|
+
: bytes.slice().buffer;
|
|
560
|
+
|
|
561
|
+
const computed = vgeo_compute_frame_checksum(
|
|
562
|
+
BinaryBuffer.fromArrayBuffer(copy), frame, this.header.asset_id_low64
|
|
563
|
+
);
|
|
564
|
+
|
|
565
|
+
if (computed !== stored) {
|
|
566
|
+
throw new Error(
|
|
567
|
+
`page ${page_index}: its frame checksums to 0x${computed.toString(16)}`
|
|
568
|
+
+ ` and stores 0x${stored.toString(16)}`
|
|
569
|
+
);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The page directory, decoded — one row per page, in page-index order.
|
|
3
|
+
*
|
|
4
|
+
* Auxiliary and fully derivable from the frames (`VGEO_FORMAT.md` §3, §9): a traversal never touches
|
|
5
|
+
* it, because every range it needs is already in the child table of a page it holds. What it is for
|
|
6
|
+
* is the tasks that are not a traversal — RAM budgeting before a fetch, resuming from a disk cache,
|
|
7
|
+
* and reaching a page the DAG does not lead to, which is exactly what a tool looking at a file wants
|
|
8
|
+
* and a runtime never does.
|
|
9
|
+
*
|
|
10
|
+
* A structure of arrays because a large asset has tens of thousands of pages and every use of this
|
|
11
|
+
* is a scan or a single indexed lookup.
|
|
12
|
+
*
|
|
13
|
+
* @author Alex Goldring
|
|
14
|
+
* @copyright Company Named Limited (c) 2026
|
|
15
|
+
*/
|
|
16
|
+
export class VGeoDirectory {
|
|
17
|
+
/**
|
|
18
|
+
* @type {number}
|
|
19
|
+
*/
|
|
20
|
+
page_count: number;
|
|
21
|
+
/**
|
|
22
|
+
* Absolute frame offsets. A double rather than a BigInt: every offset past 2^53 names a file
|
|
23
|
+
* nothing here could hold, and the ones below it are exact.
|
|
24
|
+
* @type {Float64Array}
|
|
25
|
+
*/
|
|
26
|
+
frame_offset: Float64Array;
|
|
27
|
+
/**
|
|
28
|
+
* The exact byte range to fetch each page: `[frame_offset, frame_offset + fetch_size)`.
|
|
29
|
+
* @type {Uint32Array}
|
|
30
|
+
*/
|
|
31
|
+
fetch_size: Uint32Array;
|
|
32
|
+
/**
|
|
33
|
+
* @type {Uint32Array}
|
|
34
|
+
*/
|
|
35
|
+
decoded_size: Uint32Array;
|
|
36
|
+
/**
|
|
37
|
+
* @type {Uint8Array}
|
|
38
|
+
*/
|
|
39
|
+
min_level: Uint8Array;
|
|
40
|
+
/**
|
|
41
|
+
* @type {Uint8Array}
|
|
42
|
+
*/
|
|
43
|
+
max_level: Uint8Array;
|
|
44
|
+
/**
|
|
45
|
+
* Bit 0 is `VGEO_DIRECTORY_FLAG_ROOT_PAGE`.
|
|
46
|
+
* @type {Uint16Array}
|
|
47
|
+
*/
|
|
48
|
+
flags: Uint16Array;
|
|
49
|
+
/**
|
|
50
|
+
* @type {Uint16Array}
|
|
51
|
+
*/
|
|
52
|
+
group_count: Uint16Array;
|
|
53
|
+
/**
|
|
54
|
+
* @type {Uint16Array}
|
|
55
|
+
*/
|
|
56
|
+
cluster_count: Uint16Array;
|
|
57
|
+
/**
|
|
58
|
+
* What every page of this asset costs decoded, summed — the whole resident footprint, known
|
|
59
|
+
* without decoding one.
|
|
60
|
+
* @returns {number}
|
|
61
|
+
*/
|
|
62
|
+
get total_decoded_bytes(): number;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=VGeoDirectory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoDirectory.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH;IACI;;OAEG;IACH,YAFU,MAAM,CAED;IAEf;;;;OAIG;IACH,cAFU,YAAY,CAEa;IAEnC;;;OAGG;IACH,YAFU,WAAW,CAEW;IAEhC;;OAEG;IACH,cAFU,WAAW,CAEa;IAElC;;OAEG;IACH,WAFU,UAAU,CAEU;IAE9B;;OAEG;IACH,WAFU,UAAU,CAEU;IAE9B;;;OAGG;IACH,OAFU,WAAW,CAEM;IAE3B;;OAEG;IACH,aAFU,WAAW,CAEY;IAEjC;;OAEG;IACH,eAFU,WAAW,CAEc;IAEnC;;;;OAIG;IACH,kCAQC;CACJ"}
|