@woosh/meep-engine 3.28.0 → 3.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BitSet.d.ts +16 -0
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +159 -49
- package/src/core/binary/allocator/OffsetAllocator.d.ts +48 -0
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +208 -9
- package/src/core/binary/compression/compress_bytes.d.ts +20 -0
- package/src/core/binary/compression/compress_bytes.d.ts.map +1 -0
- package/src/core/binary/compression/compress_bytes.js +35 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts +30 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -0
- package/src/core/binary/compression/decompress_bytes_into.js +87 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts +27 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts.map +1 -0
- package/src/core/binary/compression/deflate_decompress_bound.js +32 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.js +31 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts +46 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.js +104 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts +62 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.js +158 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts +21 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.js +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts +34 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.js +55 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts +28 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts +15 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts +93 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.js +128 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts +38 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +113 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +47 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +677 -8
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.js +46 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts +19 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.js +49 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts +63 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts.map +1 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.js +80 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.d.ts +35 -0
- package/src/core/graph/layout/layered/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.js +53 -1
- package/src/core/graph/layout/layered/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.js +72 -68
- package/src/core/graph/layout/layered/layout_assign_layers.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.js +4 -2
- package/src/core/graph/layout/layered/layout_break_cycles.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_order_layers.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +7 -51
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +8 -69
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +6 -6
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +1 -1
- package/src/engine/graphics3/DebugDrawSystem.d.ts +7 -5
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +206 -203
- package/src/engine/graphics3/DecalSystem.d.ts +4 -5
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +5 -5
- package/src/engine/graphics3/FogOfWarSystem.d.ts +7 -12
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem.js +8 -12
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
- package/src/shade/RENDERER_CONTRACT.md +12 -7
- package/src/shade/playground/caldera/README.md +529 -0
- package/src/shade/playground/caldera/caldera_format.d.ts +151 -0
- package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -0
- package/src/shade/playground/caldera/caldera_format.js +241 -0
- package/src/shade/playground/caldera/index.html +126 -0
- package/src/shade/playground/caldera/main.d.ts.map +1 -0
- package/src/shade/playground/caldera/main.js +1565 -0
- package/src/shade/playground/mesh_row_ceiling/README.md +85 -0
- package/src/shade/playground/mesh_row_ceiling/index.html +31 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts +2 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts.map +1 -0
- package/src/shade/playground/mesh_row_ceiling/main.js +389 -0
- package/src/shade/playground/vgeo_runtime/README.md +5 -3
- package/src/shade/playground/vgeo_runtime/main.js +3 -2
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +3 -3
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -1
- package/src/shade/playground/vgeo_runtime/sample_asset.js +3 -3
- package/src/shade/playground/vgeo_scene/README.md +103 -24
- package/src/shade/playground/vgeo_scene/main.js +525 -24
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +6 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +23 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +100 -8
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +69 -33
- package/src/shade/renderer/extension/RenderExtension.d.ts +15 -18
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +15 -19
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +5 -5
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +29 -166
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +73 -16
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -3
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +663 -0
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +100 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +688 -81
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +155 -64
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +30 -13
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +3 -3
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +57 -7
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +63 -9
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.js +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.js +25 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +77 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +84 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +19 -6
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.js +20 -7
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.js +58 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.js +116 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +545 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +110 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +2 -27
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +120 -1564
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.js +123 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.js +78 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +337 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +147 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts +37 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +117 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +46 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.js +45 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts +64 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +12 -7
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.js +33 -11
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts +58 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.js +79 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts +53 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +24 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +250 -25
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +12 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +58 -50
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js +18 -3
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts +38 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.js +81 -0
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +23 -5
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js +28 -21
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.js +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +224 -60
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +19 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +10 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +103 -9
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +14 -2
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +38 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +28 -5
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.js +93 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +20 -6
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +22 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/{vgeo_layers_copy_vertex.js → vgeo_layers_copy_corner.js} +8 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts +18 -7
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.js +19 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.d.ts +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.js +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts +27 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.js +97 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts +7 -3
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js +21 -11
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.js +41 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +19 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +20 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts +25 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts +10 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js +37 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +21 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +37 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js +14 -2
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +19 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_OFFSET.js +6 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.js +20 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +1 -2
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +10 -3
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.js +43 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +4 -2
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +8 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +5 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +14 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +4 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +53 -11
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +7 -3
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +12 -2
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +111 -33
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +112 -42
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +51 -21
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +34 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +18 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +47 -19
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +22 -4
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +4 -0
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -4
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +6 -2
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +90 -12
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +22 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +21 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +13 -8
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +3 -6
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +4 -12
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +4 -5
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +5 -3
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +11 -4
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -3
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +3 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +94 -90
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +13 -5
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +96 -89
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +3 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.js +4 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +100 -89
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +31 -7
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +1 -7
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +161 -153
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +2 -7
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +4 -8
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +5 -8
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +25 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +24 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +10 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +30 -21
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +0 -61
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +0 -18
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +0 -173
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts +0 -52
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts +0 -24
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts +0 -32
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts +0 -59
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts +0 -44
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts +0 -20
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts +0 -73
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts +0 -36
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts +0 -19
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts +0 -31
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts +0 -18
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts +0 -11
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts +0 -46
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +0 -22
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts +0 -9
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts +0 -10
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts +0 -15
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts +0 -16
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts.map +0 -1
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts +0 -10
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts +0 -17
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts +0 -3
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts +0 -8
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +0 -1
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.js +0 -0
- /package/src/shade/playground/{vgeo_viewer → caldera}/main.d.ts +0 -0
|
@@ -1,230 +1,230 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
|
-
import { ShadeAnimationChannel } from "../../../shade/renderer/animation/ShadeAnimationChannel.js";
|
|
4
|
-
import { ShadeAnimationClip } from "../../../shade/renderer/animation/ShadeAnimationClip.js";
|
|
5
|
-
import { Skin } from "../../../shade/renderer/animation/Skin.js";
|
|
6
|
-
import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
|
|
7
|
-
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
8
|
-
import { Name } from "../../ecs/name/Name.js";
|
|
9
|
-
import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
10
|
-
import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
|
|
11
|
-
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
12
|
-
import { DrawMode } from "../../graphics/ecs/mesh-v2/DrawMode.js";
|
|
13
|
-
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
14
|
-
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
15
|
-
import { PrefabInstance } from "./PrefabInstance.js";
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
19
|
-
* @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Every component type an instance may attach. Registered once per dataset, before the first
|
|
24
|
-
* entity is built, because registering a type rebuilds the dataset's occupancy and a spawn of
|
|
25
|
-
* thousands of entities must not do that per component.
|
|
26
|
-
*
|
|
27
|
-
* @type {Function[]}
|
|
28
|
-
*/
|
|
29
|
-
const COMPONENT_TYPES = [
|
|
30
|
-
Transform64,
|
|
31
|
-
TransformAttachment,
|
|
32
|
-
Name,
|
|
33
|
-
ShadedGeometry,
|
|
34
|
-
GPUStateAuthority,
|
|
35
|
-
ParentEntity,
|
|
36
|
-
SerializationMetadata,
|
|
37
|
-
];
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Spawn a prefab as entities under `root`, in bulk.
|
|
41
|
-
*
|
|
42
|
-
* **What a model is in an ECS.** Each node of the prefab becomes an entity: named, attached to
|
|
43
|
-
* its parent's entity by a `TransformAttachment` carrying the node's rest pose, holding a world
|
|
44
|
-
* `Transform64` composed from the root's, drawing through a `ShadedGeometry` where the node
|
|
45
|
-
* carries geometry, and declaring `GPUStateAuthority` — with a zero flags word — where a clip or a
|
|
46
|
-
* skin may later hand the node to the GPU, so that the hand-over is a bit write and never a
|
|
47
|
-
* component add. Node 0 is `root` itself, the caller's entity, whose `Transform64` is the
|
|
48
|
-
* placement.
|
|
49
|
-
*
|
|
50
|
-
* **Parents before children, and the transform last.** Entities are built in the prefab's node
|
|
51
|
-
* order, which puts every parent's entity there before its children's, so
|
|
52
|
-
* `TransformAttachmentSystem` binds each one on the spot rather than parking it. The `Transform64`
|
|
53
|
-
* is the last component added to each entity, so every system whose dependencies include it —
|
|
54
|
-
* and they all do — links once, seeing the entity complete.
|
|
55
|
-
*
|
|
56
|
-
* Every entity is the root's for its lifetime (`ParentEntity`) and, unless told otherwise,
|
|
57
|
-
* transient to serialization: a save holds the model's placement, not sixty joints of derived
|
|
58
|
-
* state.
|
|
59
|
-
*
|
|
60
|
-
* @param {Prefab} prefab
|
|
61
|
-
* @param {EntityComponentDataset} dataset
|
|
62
|
-
* @param {number} root an entity carrying a `Transform64`
|
|
63
|
-
* @param {object} [options]
|
|
64
|
-
* @param {boolean} [options.transient] whether the spawned entities are skipped by serialization;
|
|
65
|
-
* true unless said otherwise
|
|
66
|
-
* @returns {PrefabInstance}
|
|
67
|
-
*/
|
|
68
|
-
export function prefab_instantiate(prefab, dataset, root, { transient = true } = {}) {
|
|
69
|
-
assert.defined(prefab, 'prefab');
|
|
70
|
-
assert.equal(prefab.isPrefab, true, 'prefab.isPrefab !== true');
|
|
71
|
-
assert.defined(dataset, 'dataset');
|
|
72
|
-
assert.equal(dataset.isEntityComponentDataset, true, 'dataset.isEntityComponentDataset !== true');
|
|
73
|
-
assert.isNonNegativeInteger(root, 'root');
|
|
74
|
-
assert.ok(dataset.entityExists(root), `root entity ${root} does not exist`);
|
|
75
|
-
|
|
76
|
-
dataset.registerManyComponentTypes(COMPONENT_TYPES);
|
|
77
|
-
|
|
78
|
-
// Component indices resolved once: an add by index skips the class lookup and the guard that
|
|
79
|
-
// formats a component into an error message, and there are six or seven adds per entity.
|
|
80
|
-
const TRANSFORM = dataset.computeComponentTypeIndex(Transform64);
|
|
81
|
-
const ATTACHMENT = dataset.computeComponentTypeIndex(TransformAttachment);
|
|
82
|
-
const NAME = dataset.computeComponentTypeIndex(Name);
|
|
83
|
-
const GEOMETRY = dataset.computeComponentTypeIndex(ShadedGeometry);
|
|
84
|
-
const AUTHORITY = dataset.computeComponentTypeIndex(GPUStateAuthority);
|
|
85
|
-
const PARENT = dataset.computeComponentTypeIndex(ParentEntity);
|
|
86
|
-
const METADATA = dataset.computeComponentTypeIndex(SerializationMetadata);
|
|
87
|
-
|
|
88
|
-
const root_transform = dataset.getComponent(root, Transform64);
|
|
89
|
-
|
|
90
|
-
assert.defined(root_transform, `root entity ${root} carries no Transform64 to place the model by`);
|
|
91
|
-
|
|
92
|
-
const node_count = prefab.node_count;
|
|
93
|
-
|
|
94
|
-
const entities = new Int32Array(node_count);
|
|
95
|
-
|
|
96
|
-
entities[0] = root;
|
|
97
|
-
|
|
98
|
-
// Ids from the dataset's own occupancy, walking forward: `createEntity` scans from bit zero
|
|
99
|
-
// every time, which is quadratic over a spawn of this size.
|
|
100
|
-
const occupancy = dataset.entityOccupancy;
|
|
101
|
-
|
|
102
|
-
let cursor = 0;
|
|
103
|
-
|
|
104
|
-
for (let i = 1; i < node_count; i++) {
|
|
105
|
-
const entity = occupancy.nextClearBit(cursor);
|
|
106
|
-
|
|
107
|
-
dataset.createEntitySpecific(entity);
|
|
108
|
-
|
|
109
|
-
entities[i] = entity;
|
|
110
|
-
cursor = entity + 1;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const parent = prefab.parent;
|
|
114
|
-
const names = prefab.name;
|
|
115
|
-
const locals = prefab.local;
|
|
116
|
-
const worlds = prefab.world;
|
|
117
|
-
const animated = prefab.animated;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @type {Map<number, import("./Prefab.js").PrefabPrimitive>}
|
|
121
|
-
*/
|
|
122
|
-
const primitive_of = new Map();
|
|
123
|
-
|
|
124
|
-
for (const primitive of prefab.primitives) {
|
|
125
|
-
primitive_of.set(primitive.node, primitive);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// One lifetime component for the whole instance: it names the root and nothing else, it is
|
|
129
|
-
// immutable while attached, and sixty copies of one number are sixty allocations for nothing.
|
|
130
|
-
const owner = ParentEntity.from(root);
|
|
131
|
-
|
|
132
|
-
for (let i = 1; i < node_count; i++) {
|
|
133
|
-
const entity = entities[i];
|
|
134
|
-
|
|
135
|
-
if (transient) {
|
|
136
|
-
dataset.addComponentToEntityByIndex(entity, METADATA, SerializationMetadata.Transient);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
dataset.addComponentToEntityByIndex(entity, PARENT, owner);
|
|
140
|
-
|
|
141
|
-
const name = names[i];
|
|
142
|
-
|
|
143
|
-
if (name !== "") {
|
|
144
|
-
dataset.addComponentToEntityByIndex(entity, NAME, new Name(name));
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (animated[i] !== 0) {
|
|
148
|
-
dataset.addComponentToEntityByIndex(entity, AUTHORITY, new GPUStateAuthority());
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const primitive = primitive_of.get(i);
|
|
152
|
-
|
|
153
|
-
if (primitive !== undefined) {
|
|
154
|
-
const geometry = ShadedGeometry.from(primitive.geometry, primitive.material, DrawMode.Triangles);
|
|
155
|
-
|
|
156
|
-
if (primitive.skin !== -1) {
|
|
157
|
-
geometry.setFlag(ShadedGeometryFlags.Skinned);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
dataset.addComponentToEntityByIndex(entity, GEOMETRY, geometry);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const attachment = new TransformAttachment();
|
|
164
|
-
|
|
165
|
-
attachment.parent = entities[parent[i]];
|
|
166
|
-
attachment.transform.copy(locals[i]);
|
|
167
|
-
|
|
168
|
-
// The world is composed below, from the same chain the attachment system would compose
|
|
169
|
-
// it from, so the system is told not to compose it again at link: a decomposition per
|
|
170
|
-
// entity, and an announcement nothing is listening for yet. It still follows every move
|
|
171
|
-
// of the parent from then on.
|
|
172
|
-
attachment.immediate = false;
|
|
173
|
-
|
|
174
|
-
dataset.addComponentToEntityByIndex(entity, ATTACHMENT, attachment);
|
|
175
|
-
|
|
176
|
-
// Composed here rather than left to the attachment system, so that a dataset with no
|
|
177
|
-
// systems — a preview, a spec — holds every world too.
|
|
178
|
-
const world = new Transform64();
|
|
179
|
-
|
|
180
|
-
m4_multiply(world, root_transform, worlds[i]);
|
|
181
|
-
world.updateComponents();
|
|
182
|
-
|
|
183
|
-
dataset.addComponentToEntityByIndex(entity, TRANSFORM, world);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const instance = new PrefabInstance();
|
|
187
|
-
|
|
188
|
-
instance.prefab = prefab;
|
|
189
|
-
instance.root = root;
|
|
190
|
-
instance.entities = entities;
|
|
191
|
-
instance.mesh_entities = Int32Array.from(prefab.primitives, primitive => entities[primitive.node]);
|
|
192
|
-
|
|
193
|
-
instance.skins = prefab.skins.map(skin => Skin.from({
|
|
194
|
-
name: skin.name,
|
|
195
|
-
joints: Array.from(skin.joints, joint => entities[joint]),
|
|
196
|
-
inverse_bind_matrices: skin.inverse_bind_matrices,
|
|
197
|
-
meshes: Array.from(skin.meshes, mesh => entities[mesh]),
|
|
198
|
-
}));
|
|
199
|
-
|
|
200
|
-
instance.clips = prefab.clips.map(clip => ShadeAnimationClip.from({
|
|
201
|
-
name: clip.name,
|
|
202
|
-
channels: clip.channels.map(channel => ShadeAnimationChannel.from({
|
|
203
|
-
target: entities[channel.target],
|
|
204
|
-
property: channel.property,
|
|
205
|
-
curves: channel.curves,
|
|
206
|
-
})),
|
|
207
|
-
}));
|
|
208
|
-
|
|
209
|
-
return instance;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Remove every entity an instance spawned. The root is the caller's and stays.
|
|
214
|
-
*
|
|
215
|
-
* Children before parents, so that no parent's removal has to reach down and detach a child
|
|
216
|
-
* that is about to go anyway.
|
|
217
|
-
*
|
|
218
|
-
* @param {EntityComponentDataset} dataset
|
|
219
|
-
* @param {PrefabInstance} instance
|
|
220
|
-
*/
|
|
221
|
-
export function prefab_instance_destroy(dataset, instance) {
|
|
222
|
-
assert.defined(dataset, 'dataset');
|
|
223
|
-
assert.defined(instance, 'instance');
|
|
224
|
-
|
|
225
|
-
const entities = instance.entities;
|
|
226
|
-
|
|
227
|
-
for (let i = entities.length - 1; i >= 1; i--) {
|
|
228
|
-
dataset.removeEntity(entities[i]);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
|
+
import { ShadeAnimationChannel } from "../../../shade/renderer/animation/ShadeAnimationChannel.js";
|
|
4
|
+
import { ShadeAnimationClip } from "../../../shade/renderer/animation/ShadeAnimationClip.js";
|
|
5
|
+
import { Skin } from "../../../shade/renderer/animation/Skin.js";
|
|
6
|
+
import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
|
|
7
|
+
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
8
|
+
import { Name } from "../../ecs/name/Name.js";
|
|
9
|
+
import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
10
|
+
import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
|
|
11
|
+
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
12
|
+
import { DrawMode } from "../../graphics/ecs/mesh-v2/DrawMode.js";
|
|
13
|
+
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
14
|
+
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
15
|
+
import { PrefabInstance } from "./PrefabInstance.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
19
|
+
* @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Every component type an instance may attach. Registered once per dataset, before the first
|
|
24
|
+
* entity is built, because registering a type rebuilds the dataset's occupancy and a spawn of
|
|
25
|
+
* thousands of entities must not do that per component.
|
|
26
|
+
*
|
|
27
|
+
* @type {Function[]}
|
|
28
|
+
*/
|
|
29
|
+
const COMPONENT_TYPES = [
|
|
30
|
+
Transform64,
|
|
31
|
+
TransformAttachment,
|
|
32
|
+
Name,
|
|
33
|
+
ShadedGeometry,
|
|
34
|
+
GPUStateAuthority,
|
|
35
|
+
ParentEntity,
|
|
36
|
+
SerializationMetadata,
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Spawn a prefab as entities under `root`, in bulk.
|
|
41
|
+
*
|
|
42
|
+
* **What a model is in an ECS.** Each node of the prefab becomes an entity: named, attached to
|
|
43
|
+
* its parent's entity by a `TransformAttachment` carrying the node's rest pose, holding a world
|
|
44
|
+
* `Transform64` composed from the root's, drawing through a `ShadedGeometry` where the node
|
|
45
|
+
* carries geometry, and declaring `GPUStateAuthority` — with a zero flags word — where a clip or a
|
|
46
|
+
* skin may later hand the node to the GPU, so that the hand-over is a bit write and never a
|
|
47
|
+
* component add. Node 0 is `root` itself, the caller's entity, whose `Transform64` is the
|
|
48
|
+
* placement.
|
|
49
|
+
*
|
|
50
|
+
* **Parents before children, and the transform last.** Entities are built in the prefab's node
|
|
51
|
+
* order, which puts every parent's entity there before its children's, so
|
|
52
|
+
* `TransformAttachmentSystem` binds each one on the spot rather than parking it. The `Transform64`
|
|
53
|
+
* is the last component added to each entity, so every system whose dependencies include it —
|
|
54
|
+
* and they all do — links once, seeing the entity complete.
|
|
55
|
+
*
|
|
56
|
+
* Every entity is the root's for its lifetime (`ParentEntity`) and, unless told otherwise,
|
|
57
|
+
* transient to serialization: a save holds the model's placement, not sixty joints of derived
|
|
58
|
+
* state.
|
|
59
|
+
*
|
|
60
|
+
* @param {Prefab} prefab
|
|
61
|
+
* @param {EntityComponentDataset} dataset
|
|
62
|
+
* @param {number} root an entity carrying a `Transform64`
|
|
63
|
+
* @param {object} [options]
|
|
64
|
+
* @param {boolean} [options.transient] whether the spawned entities are skipped by serialization;
|
|
65
|
+
* true unless said otherwise
|
|
66
|
+
* @returns {PrefabInstance}
|
|
67
|
+
*/
|
|
68
|
+
export function prefab_instantiate(prefab, dataset, root, { transient = true } = {}) {
|
|
69
|
+
assert.defined(prefab, 'prefab');
|
|
70
|
+
assert.equal(prefab.isPrefab, true, 'prefab.isPrefab !== true');
|
|
71
|
+
assert.defined(dataset, 'dataset');
|
|
72
|
+
assert.equal(dataset.isEntityComponentDataset, true, 'dataset.isEntityComponentDataset !== true');
|
|
73
|
+
assert.isNonNegativeInteger(root, 'root');
|
|
74
|
+
assert.ok(dataset.entityExists(root), `root entity ${root} does not exist`);
|
|
75
|
+
|
|
76
|
+
dataset.registerManyComponentTypes(COMPONENT_TYPES);
|
|
77
|
+
|
|
78
|
+
// Component indices resolved once: an add by index skips the class lookup and the guard that
|
|
79
|
+
// formats a component into an error message, and there are six or seven adds per entity.
|
|
80
|
+
const TRANSFORM = dataset.computeComponentTypeIndex(Transform64);
|
|
81
|
+
const ATTACHMENT = dataset.computeComponentTypeIndex(TransformAttachment);
|
|
82
|
+
const NAME = dataset.computeComponentTypeIndex(Name);
|
|
83
|
+
const GEOMETRY = dataset.computeComponentTypeIndex(ShadedGeometry);
|
|
84
|
+
const AUTHORITY = dataset.computeComponentTypeIndex(GPUStateAuthority);
|
|
85
|
+
const PARENT = dataset.computeComponentTypeIndex(ParentEntity);
|
|
86
|
+
const METADATA = dataset.computeComponentTypeIndex(SerializationMetadata);
|
|
87
|
+
|
|
88
|
+
const root_transform = dataset.getComponent(root, Transform64);
|
|
89
|
+
|
|
90
|
+
assert.defined(root_transform, `root entity ${root} carries no Transform64 to place the model by`);
|
|
91
|
+
|
|
92
|
+
const node_count = prefab.node_count;
|
|
93
|
+
|
|
94
|
+
const entities = new Int32Array(node_count);
|
|
95
|
+
|
|
96
|
+
entities[0] = root;
|
|
97
|
+
|
|
98
|
+
// Ids from the dataset's own occupancy, walking forward: `createEntity` scans from bit zero
|
|
99
|
+
// every time, which is quadratic over a spawn of this size.
|
|
100
|
+
const occupancy = dataset.entityOccupancy;
|
|
101
|
+
|
|
102
|
+
let cursor = 0;
|
|
103
|
+
|
|
104
|
+
for (let i = 1; i < node_count; i++) {
|
|
105
|
+
const entity = occupancy.nextClearBit(cursor);
|
|
106
|
+
|
|
107
|
+
dataset.createEntitySpecific(entity);
|
|
108
|
+
|
|
109
|
+
entities[i] = entity;
|
|
110
|
+
cursor = entity + 1;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const parent = prefab.parent;
|
|
114
|
+
const names = prefab.name;
|
|
115
|
+
const locals = prefab.local;
|
|
116
|
+
const worlds = prefab.world;
|
|
117
|
+
const animated = prefab.animated;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @type {Map<number, import("./Prefab.js").PrefabPrimitive>}
|
|
121
|
+
*/
|
|
122
|
+
const primitive_of = new Map();
|
|
123
|
+
|
|
124
|
+
for (const primitive of prefab.primitives) {
|
|
125
|
+
primitive_of.set(primitive.node, primitive);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// One lifetime component for the whole instance: it names the root and nothing else, it is
|
|
129
|
+
// immutable while attached, and sixty copies of one number are sixty allocations for nothing.
|
|
130
|
+
const owner = ParentEntity.from(root);
|
|
131
|
+
|
|
132
|
+
for (let i = 1; i < node_count; i++) {
|
|
133
|
+
const entity = entities[i];
|
|
134
|
+
|
|
135
|
+
if (transient) {
|
|
136
|
+
dataset.addComponentToEntityByIndex(entity, METADATA, SerializationMetadata.Transient);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
dataset.addComponentToEntityByIndex(entity, PARENT, owner);
|
|
140
|
+
|
|
141
|
+
const name = names[i];
|
|
142
|
+
|
|
143
|
+
if (name !== "") {
|
|
144
|
+
dataset.addComponentToEntityByIndex(entity, NAME, new Name(name));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (animated[i] !== 0) {
|
|
148
|
+
dataset.addComponentToEntityByIndex(entity, AUTHORITY, new GPUStateAuthority());
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const primitive = primitive_of.get(i);
|
|
152
|
+
|
|
153
|
+
if (primitive !== undefined) {
|
|
154
|
+
const geometry = ShadedGeometry.from(primitive.geometry, primitive.material, DrawMode.Triangles);
|
|
155
|
+
|
|
156
|
+
if (primitive.skin !== -1) {
|
|
157
|
+
geometry.setFlag(ShadedGeometryFlags.Skinned);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
dataset.addComponentToEntityByIndex(entity, GEOMETRY, geometry);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const attachment = new TransformAttachment();
|
|
164
|
+
|
|
165
|
+
attachment.parent = entities[parent[i]];
|
|
166
|
+
attachment.transform.copy(locals[i]);
|
|
167
|
+
|
|
168
|
+
// The world is composed below, from the same chain the attachment system would compose
|
|
169
|
+
// it from, so the system is told not to compose it again at link: a decomposition per
|
|
170
|
+
// entity, and an announcement nothing is listening for yet. It still follows every move
|
|
171
|
+
// of the parent from then on.
|
|
172
|
+
attachment.immediate = false;
|
|
173
|
+
|
|
174
|
+
dataset.addComponentToEntityByIndex(entity, ATTACHMENT, attachment);
|
|
175
|
+
|
|
176
|
+
// Composed here rather than left to the attachment system, so that a dataset with no
|
|
177
|
+
// systems — a preview, a spec — holds every world too.
|
|
178
|
+
const world = new Transform64();
|
|
179
|
+
|
|
180
|
+
m4_multiply(world, root_transform, worlds[i]);
|
|
181
|
+
world.updateComponents();
|
|
182
|
+
|
|
183
|
+
dataset.addComponentToEntityByIndex(entity, TRANSFORM, world);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const instance = new PrefabInstance();
|
|
187
|
+
|
|
188
|
+
instance.prefab = prefab;
|
|
189
|
+
instance.root = root;
|
|
190
|
+
instance.entities = entities;
|
|
191
|
+
instance.mesh_entities = Int32Array.from(prefab.primitives, primitive => entities[primitive.node]);
|
|
192
|
+
|
|
193
|
+
instance.skins = prefab.skins.map(skin => Skin.from({
|
|
194
|
+
name: skin.name,
|
|
195
|
+
joints: Array.from(skin.joints, joint => entities[joint]),
|
|
196
|
+
inverse_bind_matrices: skin.inverse_bind_matrices,
|
|
197
|
+
meshes: Array.from(skin.meshes, mesh => entities[mesh]),
|
|
198
|
+
}));
|
|
199
|
+
|
|
200
|
+
instance.clips = prefab.clips.map(clip => ShadeAnimationClip.from({
|
|
201
|
+
name: clip.name,
|
|
202
|
+
channels: clip.channels.map(channel => ShadeAnimationChannel.from({
|
|
203
|
+
target: entities[channel.target],
|
|
204
|
+
property: channel.property,
|
|
205
|
+
curves: channel.curves,
|
|
206
|
+
})),
|
|
207
|
+
}));
|
|
208
|
+
|
|
209
|
+
return instance;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Remove every entity an instance spawned. The root is the caller's and stays.
|
|
214
|
+
*
|
|
215
|
+
* Children before parents, so that no parent's removal has to reach down and detach a child
|
|
216
|
+
* that is about to go anyway.
|
|
217
|
+
*
|
|
218
|
+
* @param {EntityComponentDataset} dataset
|
|
219
|
+
* @param {PrefabInstance} instance
|
|
220
|
+
*/
|
|
221
|
+
export function prefab_instance_destroy(dataset, instance) {
|
|
222
|
+
assert.defined(dataset, 'dataset');
|
|
223
|
+
assert.defined(instance, 'instance');
|
|
224
|
+
|
|
225
|
+
const entities = instance.entities;
|
|
226
|
+
|
|
227
|
+
for (let i = entities.length - 1; i >= 1; i--) {
|
|
228
|
+
dataset.removeEntity(entities[i]);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
@@ -483,16 +483,21 @@ Order is **declared**, never emergent:
|
|
|
483
483
|
```js
|
|
484
484
|
class DecalExtension extends RenderExtension {
|
|
485
485
|
phase = FramePhase.AfterGBuffer;
|
|
486
|
-
|
|
487
|
-
before = [];
|
|
486
|
+
relative_order = 1; // a decal composites over surfaces already written
|
|
488
487
|
}
|
|
489
488
|
```
|
|
490
489
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
490
|
+
`relative_order` defaults to `0`; lower records first, and any finite number will do — negative to
|
|
491
|
+
pull forward, positive to push back. Two extensions on one phase with the same value record in
|
|
492
|
+
**ascending `name` order**, which is reproducible rather than correct and is chosen precisely so
|
|
493
|
+
that adding an `await` to a system's startup cannot change the picture.
|
|
494
|
+
|
|
495
|
+
**It names nothing.** An extension states where it belongs from what it does — a fog conceals, so it
|
|
496
|
+
is late; a debug overlay must not be concealed, so it is later still — and needs no import of, or
|
|
497
|
+
reference to, whatever else is on the phase. That is deliberately less precise than a dependency
|
|
498
|
+
would be: it cannot say "immediately after that one", and there is no cycle to report because there
|
|
499
|
+
is no graph. An effect that genuinely needs one particular extension's result should read a record
|
|
500
|
+
that extension published, which is a real dependency rather than a positional one.
|
|
496
501
|
|
|
497
502
|
### What keeps your work alive
|
|
498
503
|
|