@woosh/meep-engine 3.20.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/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/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/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/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/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/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/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/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_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.map +1 -1
- 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/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/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/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 +18 -7
- 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 +77 -72
- 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 +6 -6
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -1
- 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_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_billboard.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +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_pack.d.ts.map +1 -1
- 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_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- 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.map +1 -1
- 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/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/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/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 +0 -7
- package/src/shade/descriptor/util/optional_clone.d.ts.map +0 -1
- package/src/shade/descriptor/util/optional_equality.d.ts +0 -10
- package/src/shade/descriptor/util/optional_equality.d.ts.map +0 -1
- package/src/shade/descriptor/util/optional_hash.d.ts +0 -9
- package/src/shade/descriptor/util/optional_hash.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +0 -2063
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { align_4 } from "../../../core/binary/align_4.js";
|
|
3
2
|
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
4
3
|
import { warn_limited } from "../../util/warn_limited.js";
|
|
5
|
-
import { PREFIX_SCAN_CSDLDF_HEADER_WORDS } from "../gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js";
|
|
6
4
|
import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
|
|
7
5
|
import {
|
|
8
6
|
PARTICLE_EMITTER_TICK_WORKGROUP_SIZE,
|
|
@@ -38,7 +36,23 @@ import { GPUTextureContext } from "../texture/GPUTextureContext.js";
|
|
|
38
36
|
|
|
39
37
|
const WORD = Uint32Array.BYTES_PER_ELEMENT;
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
/*
|
|
40
|
+
A wide usage mask costs bandwidth: the driver places a buffer by what it was told the buffer might
|
|
41
|
+
have to do, and the flags below are what each one actually does. `pool` and the alive lists are the
|
|
42
|
+
big ones and are touched by nothing but shaders. Adding a flag "just in case" moves 64 MiB onto a
|
|
43
|
+
slower path for a copy nobody makes — see `BufferResourceDescriptor`.
|
|
44
|
+
*/
|
|
45
|
+
/** Written only by shaders. */
|
|
46
|
+
const STORAGE = GPUBufferUsage.STORAGE;
|
|
47
|
+
/** Seeded or refilled from the host with `writeBuffer`. */
|
|
48
|
+
const STORAGE_UPLOAD = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST;
|
|
49
|
+
/** Uploaded, and copied forward into its replacement when the emitter set outgrows it. */
|
|
50
|
+
const STORAGE_GROWABLE = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;
|
|
51
|
+
/**
|
|
52
|
+
* An indirect command the GPU writes and the GPU consumes. COPY_SRC is for the playground's HUD,
|
|
53
|
+
* which reads the args back to show that the dispatch really is sized on-device — twelve bytes, and
|
|
54
|
+
* the only thing in this file read back at all.
|
|
55
|
+
*/
|
|
42
56
|
const INDIRECT = GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_SRC;
|
|
43
57
|
|
|
44
58
|
const DEFAULT_CAPACITY = 524288;
|
|
@@ -50,15 +64,24 @@ const DEFAULT_CAPACITY = 524288;
|
|
|
50
64
|
*
|
|
51
65
|
* ## What it owns
|
|
52
66
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
67
|
+
* Persistent GPU state, and only that: a buffer is reserved here if and only if its contents have
|
|
68
|
+
* to survive to the next frame. That is the particle pool, the ping-pong alive lists, the dead
|
|
69
|
+
* free-list, the counters, the simulation-order (coherence) list, simulate's indirect dispatch args
|
|
70
|
+
* (written at the end of one frame, read by the next), the emitter database (the emitter table and
|
|
71
|
+
* the GPU-owned state table, one buffer), the packed program buffer, and the two CPU-uploaded
|
|
72
|
+
* queues — the spawn-command ring and the warm-up queue. Buffers that depend on the emitter set —
|
|
73
|
+
* the coherence list on the number of distinct programs, the program buffer on the heap, the
|
|
58
74
|
* database on its own pages, the counters on the emitter table's element capacity (they carry the
|
|
59
|
-
* per-emitter bounds accumulator, see `bounds/`) — are grown inside
|
|
60
|
-
*
|
|
61
|
-
*
|
|
75
|
+
* per-emitter bounds accumulator, see `bounds/`) — are grown inside {@link execute}, the way
|
|
76
|
+
* ReSTIR's reservoirs follow the resolution.
|
|
77
|
+
*
|
|
78
|
+
* Everything else a frame touches is the frame graph's. The bucketing's bins, cursors and keys, the
|
|
79
|
+
* whole depth sort, the draw args, the spawn counts and the VM's wide register file are produced
|
|
80
|
+
* and consumed inside one graph, so the pass that first writes each one declares it and the graph
|
|
81
|
+
* allocates it just in time and releases it after its last reader — into the pool the rest of the
|
|
82
|
+
* renderer allocates from. Reserving them here instead would be six megabytes at the default
|
|
83
|
+
* capacity that no other feature could ever borrow, and four of them are cleared by a reset pass
|
|
84
|
+
* every frame regardless.
|
|
62
85
|
*
|
|
63
86
|
* Every pass stays within the eight storage buffers a stage gets by default: the emitter record
|
|
64
87
|
* and the GPU-owned state are two tables of one database buffer, and the VM's constants and code
|
|
@@ -106,7 +129,8 @@ const DEFAULT_CAPACITY = 524288;
|
|
|
106
129
|
* ({@link avboit_occupancy}, {@link avboit_splat}, {@link avboit_draw}). Those read the same handles
|
|
107
130
|
* and composite into a volume and a set of accumulators that are sums, so an ordering would buy
|
|
108
131
|
* nothing — and the sort is four passes and a scan over every live particle, plus two lists a word
|
|
109
|
-
* per particle each
|
|
132
|
+
* per particle each. Under `AVBOIT` none of those passes is recorded, so the graph never allocates
|
|
133
|
+
* their buffers either.
|
|
110
134
|
*
|
|
111
135
|
* ## Allocation
|
|
112
136
|
*
|
|
@@ -521,22 +545,19 @@ export class GPUParticleSystem {
|
|
|
521
545
|
return color;
|
|
522
546
|
}
|
|
523
547
|
|
|
524
|
-
// Allocated here rather than in the constructor: they are two words per particle plus the
|
|
525
|
-
// bins, and only this mode ever reads them. A system the renderer drives never makes them.
|
|
526
|
-
this.#ensure_sort_buffers();
|
|
527
|
-
|
|
528
548
|
// The render order: back-to-front by view depth, so premultiplied transparency composites
|
|
529
549
|
// correctly. Its two per-particle passes take the dispatch the coherence reset wrote from
|
|
530
|
-
// the GPU's own alive count
|
|
550
|
+
// the GPU's own alive count, and every buffer it needs is the graph's — a system the
|
|
551
|
+
// renderer drives through AVBOIT records none of these passes and so pays for none of them.
|
|
531
552
|
const sorted = graph_particle_sort({
|
|
532
553
|
graph,
|
|
533
|
-
gpu: this.buffers,
|
|
534
554
|
camera,
|
|
535
555
|
emitter_database: simulated.emitter_database,
|
|
536
556
|
pool: simulated.pool,
|
|
537
557
|
alive: simulated.alive,
|
|
538
558
|
counters: simulated.counters,
|
|
539
559
|
dispatch_args: simulated.sim_dispatch_args,
|
|
560
|
+
capacity: this.capacity,
|
|
540
561
|
bucket_count: PARTICLE_SORT_BUCKET_COUNT,
|
|
541
562
|
near: this.sort_depth_range[0],
|
|
542
563
|
far: this.sort_depth_range[1],
|
|
@@ -854,7 +875,7 @@ export class GPUParticleSystem {
|
|
|
854
875
|
|
|
855
876
|
if (this.buffers.warmup_queue.size < bytes) {
|
|
856
877
|
this.buffers.warmup_queue.destroy();
|
|
857
|
-
this.buffers.warmup_queue = device.createBuffer({ label: "particles/warmup_queue", size: bytes, usage:
|
|
878
|
+
this.buffers.warmup_queue = device.createBuffer({ label: "particles/warmup_queue", size: bytes, usage: STORAGE_UPLOAD });
|
|
858
879
|
}
|
|
859
880
|
|
|
860
881
|
device.queue.writeBuffer(this.buffers.warmup_queue, 0, words.buffer, words.byteOffset, bytes);
|
|
@@ -948,7 +969,7 @@ export class GPUParticleSystem {
|
|
|
948
969
|
}
|
|
949
970
|
|
|
950
971
|
const device = this.graphics.device;
|
|
951
|
-
const grown = device.createBuffer({ label: "particles/counters", size, usage:
|
|
972
|
+
const grown = device.createBuffer({ label: "particles/counters", size, usage: STORAGE_GROWABLE });
|
|
952
973
|
|
|
953
974
|
const cmd = ShadeGPUCommandContext.create(this.graphics, "particles/counters grow");
|
|
954
975
|
|
|
@@ -968,8 +989,14 @@ export class GPUParticleSystem {
|
|
|
968
989
|
}
|
|
969
990
|
|
|
970
991
|
/**
|
|
971
|
-
*
|
|
972
|
-
* the next simulate consumes its entries and padding with the previous frame's
|
|
992
|
+
* The coherence list follows the peak number of program ids. It is the one thing the bucketing
|
|
993
|
+
* leaves behind: the next simulate consumes its entries and padding with the previous frame's
|
|
994
|
+
* saved count, so it cannot be a transient and it cannot be reallocated empty. Growth copies it
|
|
995
|
+
* forward; the old count and dispatch stay valid because the entries keep their places.
|
|
996
|
+
*
|
|
997
|
+
* The bins, cursors, keys and dispatch args the bucketing needs alongside it live and die inside
|
|
998
|
+
* one frame graph, so `coherence/` declares them on the passes that write them and the graph
|
|
999
|
+
* owns them.
|
|
973
1000
|
*
|
|
974
1001
|
* @param {number} buckets
|
|
975
1002
|
*/
|
|
@@ -980,56 +1007,26 @@ export class GPUParticleSystem {
|
|
|
980
1007
|
|
|
981
1008
|
const device = this.graphics.device;
|
|
982
1009
|
const buffers = this.buffers;
|
|
983
|
-
const capacity = this.capacity;
|
|
984
|
-
|
|
985
|
-
for (const name of ["sim_keys", "sim_histogram", "sim_bucket_counts", "sim_cursor"]) {
|
|
986
|
-
buffers[name]?.destroy();
|
|
987
|
-
}
|
|
988
1010
|
|
|
989
1011
|
// Padding rounds each bucket up to a whole workgroup, so it can add at most `workgroup - 1`
|
|
990
1012
|
// entries per bucket; one whole workgroup per bucket is the bound.
|
|
991
1013
|
const previous = buffers.sim_list;
|
|
992
|
-
buffers.sim_list = device.createBuffer({
|
|
1014
|
+
buffers.sim_list = device.createBuffer({
|
|
1015
|
+
label: "particles/sim_list",
|
|
1016
|
+
size: (this.capacity + buckets * PARTICLE_SIMULATE_WORKGROUP_SIZE) * WORD,
|
|
1017
|
+
usage: STORAGE_GROWABLE,
|
|
1018
|
+
});
|
|
1019
|
+
|
|
993
1020
|
if (previous !== undefined) {
|
|
994
1021
|
const cmd = ShadeGPUCommandContext.create(this.graphics, "particles/coherence grow");
|
|
995
1022
|
cmd.gpu_encoder.copyBufferToBuffer(previous, 0, buffers.sim_list, 0, previous.size);
|
|
996
1023
|
cmd.finish();
|
|
997
1024
|
previous.destroy();
|
|
998
1025
|
}
|
|
999
|
-
buffers.sim_keys = device.createBuffer({ label: "particles/sim_keys", size: capacity * WORD, usage: STORAGE });
|
|
1000
|
-
// `{count, elements}` for the CSDLDF scan; the scan reads whole vec4s, so the bins are
|
|
1001
|
-
// rounded up to a multiple of four.
|
|
1002
|
-
buffers.sim_histogram = device.createBuffer({ label: "particles/sim_histogram", size: (PREFIX_SCAN_CSDLDF_HEADER_WORDS + align_4(buckets)) * WORD, usage: STORAGE });
|
|
1003
|
-
buffers.sim_bucket_counts = device.createBuffer({ label: "particles/sim_bucket_counts", size: buckets * WORD, usage: STORAGE });
|
|
1004
|
-
buffers.sim_cursor = device.createBuffer({ label: "particles/sim_cursor", size: buckets * WORD, usage: STORAGE });
|
|
1005
1026
|
|
|
1006
1027
|
this.#sim_bucket_capacity = buckets;
|
|
1007
1028
|
}
|
|
1008
1029
|
|
|
1009
|
-
/**
|
|
1010
|
-
* The render-order scratch, made on the first frame that actually sorts.
|
|
1011
|
-
*
|
|
1012
|
-
* Only {@link ParticleRenderMode.BILLBOARD} reads any of it, and the two per-particle lists are
|
|
1013
|
-
* a word per particle each — at the renderer's default capacity, half a megabyte that AVBOIT
|
|
1014
|
-
* would never touch. Nothing in them outlives a frame, so there is nothing to carry over and the
|
|
1015
|
-
* first sorted frame is as correct as any later one.
|
|
1016
|
-
*/
|
|
1017
|
-
#ensure_sort_buffers() {
|
|
1018
|
-
const buffers = this.buffers;
|
|
1019
|
-
|
|
1020
|
-
if (buffers.sorted !== undefined) {
|
|
1021
|
-
return;
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
const device = this.graphics.device;
|
|
1025
|
-
const capacity = this.capacity;
|
|
1026
|
-
|
|
1027
|
-
buffers.sorted = device.createBuffer({ label: "particles/sorted", size: capacity * WORD, usage: STORAGE });
|
|
1028
|
-
buffers.sort_keys = device.createBuffer({ label: "particles/sort_keys", size: capacity * WORD, usage: STORAGE });
|
|
1029
|
-
buffers.sort_histogram = device.createBuffer({ label: "particles/sort_histogram", size: (PREFIX_SCAN_CSDLDF_HEADER_WORDS + align_4(PARTICLE_SORT_BUCKET_COUNT)) * WORD, usage: STORAGE });
|
|
1030
|
-
buffers.sort_cursor = device.createBuffer({ label: "particles/sort_cursor", size: PARTICLE_SORT_BUCKET_COUNT * WORD, usage: STORAGE });
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
1030
|
/**
|
|
1034
1031
|
* The buffers whose size is fixed by the pool capacity, and the free list's initial contents.
|
|
1035
1032
|
*/
|
|
@@ -1043,21 +1040,21 @@ export class GPUParticleSystem {
|
|
|
1043
1040
|
device.createBuffer({ label: "particles/alive_a", size: capacity * WORD, usage: STORAGE }),
|
|
1044
1041
|
device.createBuffer({ label: "particles/alive_b", size: capacity * WORD, usage: STORAGE }),
|
|
1045
1042
|
];
|
|
1046
|
-
buffers.dead = device.createBuffer({ label: "particles/dead", size: capacity * WORD, usage:
|
|
1043
|
+
buffers.dead = device.createBuffer({ label: "particles/dead", size: capacity * WORD, usage: STORAGE_UPLOAD });
|
|
1047
1044
|
// Just the counters to begin with. The per-emitter bounds accumulator that shares this
|
|
1048
1045
|
// buffer follows the emitter table's capacity, and there is no table yet.
|
|
1049
|
-
buffers.counters = device.createBuffer({ label: "particles/counters", size: PARTICLE_COUNTER_COUNT * WORD, usage:
|
|
1046
|
+
buffers.counters = device.createBuffer({ label: "particles/counters", size: PARTICLE_COUNTER_COUNT * WORD, usage: STORAGE_GROWABLE });
|
|
1050
1047
|
|
|
1051
|
-
//
|
|
1052
|
-
//
|
|
1048
|
+
// Simulate's workgroup count, written by the END of one frame's build-indirect and read by
|
|
1049
|
+
// the NEXT frame's dispatch — the one indirect buffer that crosses the boundary, and so the
|
|
1050
|
+
// one the graph cannot own. Zero-initialised (WebGPU spec), so the first frame's indirect
|
|
1051
|
+
// dispatch is a no-op until the first build-indirect has run.
|
|
1053
1052
|
buffers.dispatch_args = device.createBuffer({ label: "particles/dispatch_args", size: 3 * WORD, usage: INDIRECT });
|
|
1054
|
-
buffers.draw_args = device.createBuffer({ label: "particles/draw_args", size: 4 * WORD, usage: INDIRECT });
|
|
1055
|
-
buffers.sim_dispatch_args = device.createBuffer({ label: "particles/sim_dispatch_args", size: 3 * WORD, usage: INDIRECT });
|
|
1056
1053
|
|
|
1057
|
-
buffers.spawn_commands = device.createBuffer({ label: "particles/spawn_commands", size: this.#spawn_commands.byteLength, usage:
|
|
1054
|
+
buffers.spawn_commands = device.createBuffer({ label: "particles/spawn_commands", size: this.#spawn_commands.byteLength, usage: STORAGE_UPLOAD });
|
|
1058
1055
|
|
|
1059
1056
|
// The warm-up queue: one entry to start with, grown on upload to what a frame registers.
|
|
1060
|
-
buffers.warmup_queue = device.createBuffer({ label: "particles/warmup_queue", size: PARTICLE_WARMUP_QUEUE_WORDS * WORD, usage:
|
|
1057
|
+
buffers.warmup_queue = device.createBuffer({ label: "particles/warmup_queue", size: PARTICLE_WARMUP_QUEUE_WORDS * WORD, usage: STORAGE_UPLOAD });
|
|
1061
1058
|
|
|
1062
1059
|
// Every slot free, and the counters saying so.
|
|
1063
1060
|
const dead = new Uint32Array(capacity);
|
|
@@ -1121,16 +1118,24 @@ export class GPUParticleSystem {
|
|
|
1121
1118
|
}
|
|
1122
1119
|
|
|
1123
1120
|
/**
|
|
1124
|
-
* Sizes of the persistent buffers, in bytes, as they stand
|
|
1121
|
+
* Sizes of the persistent buffers, in bytes, as they stand — one entry per distinct buffer, so
|
|
1122
|
+
* this is the feature's reserved footprint and not a list of the names it binds them under.
|
|
1123
|
+
* `alive_read` and `alive_write` are the two `alive` entries under the frame's names for them,
|
|
1124
|
+
* and would otherwise be counted a second time each. Exposed for tests.
|
|
1125
|
+
*
|
|
1125
1126
|
* @returns {Object<string, number>}
|
|
1126
1127
|
*/
|
|
1127
1128
|
bufferSizes() {
|
|
1128
1129
|
const sizes = {};
|
|
1130
|
+
const counted = new Set();
|
|
1129
1131
|
|
|
1130
|
-
for (const [name,
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1132
|
+
for (const [name, value] of Object.entries(this.buffers)) {
|
|
1133
|
+
for (const buffer of Array.isArray(value) ? value : [value]) {
|
|
1134
|
+
if (buffer === undefined || buffer === null || counted.has(buffer)) {
|
|
1135
|
+
continue;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
counted.add(buffer);
|
|
1134
1139
|
sizes[name] = buffer.size;
|
|
1135
1140
|
}
|
|
1136
1141
|
}
|
|
@@ -1183,7 +1188,7 @@ export class GPUParticleSystem {
|
|
|
1183
1188
|
function replace_data_buffer(device, previous, label, data) {
|
|
1184
1189
|
previous?.destroy();
|
|
1185
1190
|
|
|
1186
|
-
const buffer = device.createBuffer({ label, size: Math.max(WORD, data.byteLength), usage:
|
|
1191
|
+
const buffer = device.createBuffer({ label, size: Math.max(WORD, data.byteLength), usage: STORAGE_UPLOAD });
|
|
1187
1192
|
|
|
1188
1193
|
device.queue.writeBuffer(buffer, 0, data);
|
|
1189
1194
|
|
|
@@ -21,15 +21,22 @@
|
|
|
21
21
|
* consumed entirely on the GPU, including the dispatch size of the two per-particle passes, which
|
|
22
22
|
* the reset pass writes into `sim_dispatch_args` from the GPU's own alive count.
|
|
23
23
|
*
|
|
24
|
+
* ## The list is the feature's, the scratch is the graph's
|
|
25
|
+
*
|
|
26
|
+
* `sim_list` is the one thing here that crosses the frame boundary — this frame writes it, next
|
|
27
|
+
* frame's simulate reads it — so the feature owns it and hands it in. Everything else (the keys,
|
|
28
|
+
* the bins, the cursors, the dispatch args) is produced and consumed inside this call, so the pass
|
|
29
|
+
* that first writes each one declares it with a {@link BufferResourceDescriptor} in place of a
|
|
30
|
+
* handle, and the graph allocates and releases it around the passes that use it. `keys` is a word
|
|
31
|
+
* per particle: at the renderer's default capacity, 2 MiB the feature no longer reserves.
|
|
32
|
+
*
|
|
33
|
+
* None of them asks for a clear. The reset pass covers the histogram (header, padding and the bins
|
|
34
|
+
* up to the whole `vec4` the last one lands in), the cursors and all three dispatch words; `keys`
|
|
35
|
+
* is written by the same indirect dispatch that later reads it, and `bucket_counts` by the same
|
|
36
|
+
* `bucket_count` threads.
|
|
37
|
+
*
|
|
24
38
|
* @param {object} params
|
|
25
39
|
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
26
|
-
* @param {object} params.gpu persistent buffers owned by the feature (GPUBuffer instances)
|
|
27
|
-
* @param {GPUBuffer} params.gpu.sim_list the padded, program-coherent index list this produces
|
|
28
|
-
* @param {GPUBuffer} params.gpu.sim_keys per-alive-entry program id
|
|
29
|
-
* @param {GPUBuffer} params.gpu.sim_histogram `{count, elements}` bins for the CSDLDF scan
|
|
30
|
-
* @param {GPUBuffer} params.gpu.sim_bucket_counts raw (unpadded) per-bucket counts
|
|
31
|
-
* @param {GPUBuffer} params.gpu.sim_cursor per-bucket scatter cursor
|
|
32
|
-
* @param {GPUBuffer} params.gpu.sim_dispatch_args indirect args for the two per-particle passes
|
|
33
40
|
* @param {number} params.emitter_database graph handle of the emitter database buffer
|
|
34
41
|
* @param {number} params.pool graph handle of the particle pool
|
|
35
42
|
* @param {number} params.alive graph handle of this frame's compacted alive list
|
|
@@ -38,25 +45,19 @@
|
|
|
38
45
|
* imported here because the simulate pass reads it earlier in the same frame: importing the same
|
|
39
46
|
* GPUBuffer twice makes two resource entries the graph cannot see are the same memory, so the read
|
|
40
47
|
* and the write end up on separate dependency chains
|
|
48
|
+
* @param {number} params.capacity pool capacity in particles — the length of the key list
|
|
41
49
|
* @param {number} params.bucket_count number of distinct compiled programs
|
|
42
50
|
* @param {ParticleBucketScratch} [params.scratch] latest handles when bucketing again in this graph
|
|
43
51
|
* @returns {{counters: number, sim_list: number, dispatch_args: number, scratch: ParticleBucketScratch}} the threaded handles downstream passes must read
|
|
44
52
|
*/
|
|
45
|
-
export function graph_particle_bucket({ graph,
|
|
53
|
+
export function graph_particle_bucket({ graph, emitter_database, pool, alive, counters, sim_list, capacity, bucket_count, scratch }: {
|
|
46
54
|
graph: import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
47
|
-
gpu: {
|
|
48
|
-
sim_list: GPUBuffer;
|
|
49
|
-
sim_keys: GPUBuffer;
|
|
50
|
-
sim_histogram: GPUBuffer;
|
|
51
|
-
sim_bucket_counts: GPUBuffer;
|
|
52
|
-
sim_cursor: GPUBuffer;
|
|
53
|
-
sim_dispatch_args: GPUBuffer;
|
|
54
|
-
};
|
|
55
55
|
emitter_database: number;
|
|
56
56
|
pool: number;
|
|
57
57
|
alive: number;
|
|
58
58
|
counters: number;
|
|
59
59
|
sim_list: number;
|
|
60
|
+
capacity: number;
|
|
60
61
|
bucket_count: number;
|
|
61
62
|
scratch?: ParticleBucketScratch;
|
|
62
63
|
}): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_particle_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/coherence/graph_particle_bucket.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_particle_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/coherence/graph_particle_bucket.js"],"names":[],"mappings":"AAoBA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH;IAdqG,KAAK,EAA/F,OAAO,8DAA8D,EAAE,UAAU;IAClE,gBAAgB,EAA/B,MAAM;IACS,IAAI,EAAnB,MAAM;IACS,KAAK,EAApB,MAAM;IACS,QAAQ,EAAvB,MAAM;IACS,QAAQ,EAAvB,MAAM;IAIS,QAAQ,EAAvB,MAAM;IACS,YAAY,EAA3B,MAAM;IACyB,OAAO,GAAtC,qBAAqB;IACnB;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,qBAAqB,CAAA;CAAC,CA4GvG;oCA9JY;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
2
|
import { align_4 } from "../../../../core/binary/align_4.js";
|
|
3
|
+
import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
|
|
3
4
|
import { graph_compute_indirect_pass } from "../../shader/graph/compute/graph_compute_indirect_pass.js";
|
|
4
5
|
import { graph_compute_pass } from "../../shader/graph/compute/graph_compute_pass.js";
|
|
5
|
-
import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
|
|
6
6
|
import {
|
|
7
7
|
PREFIX_SCAN_CSDLDF_HEADER_WORDS,
|
|
8
8
|
} from "../../gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js";
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
shader_particle_bucket_scatter,
|
|
17
17
|
} from "./shader_particle_bucket.js";
|
|
18
18
|
|
|
19
|
+
const WORD = Uint32Array.BYTES_PER_ELEMENT;
|
|
20
|
+
|
|
19
21
|
/**
|
|
20
22
|
* @typedef {{keys: number, histogram: number, cursor: number, bucket_counts: number, dispatch_args: number}} ParticleBucketScratch
|
|
21
23
|
*/
|
|
@@ -40,15 +42,22 @@ import {
|
|
|
40
42
|
* consumed entirely on the GPU, including the dispatch size of the two per-particle passes, which
|
|
41
43
|
* the reset pass writes into `sim_dispatch_args` from the GPU's own alive count.
|
|
42
44
|
*
|
|
45
|
+
* ## The list is the feature's, the scratch is the graph's
|
|
46
|
+
*
|
|
47
|
+
* `sim_list` is the one thing here that crosses the frame boundary — this frame writes it, next
|
|
48
|
+
* frame's simulate reads it — so the feature owns it and hands it in. Everything else (the keys,
|
|
49
|
+
* the bins, the cursors, the dispatch args) is produced and consumed inside this call, so the pass
|
|
50
|
+
* that first writes each one declares it with a {@link BufferResourceDescriptor} in place of a
|
|
51
|
+
* handle, and the graph allocates and releases it around the passes that use it. `keys` is a word
|
|
52
|
+
* per particle: at the renderer's default capacity, 2 MiB the feature no longer reserves.
|
|
53
|
+
*
|
|
54
|
+
* None of them asks for a clear. The reset pass covers the histogram (header, padding and the bins
|
|
55
|
+
* up to the whole `vec4` the last one lands in), the cursors and all three dispatch words; `keys`
|
|
56
|
+
* is written by the same indirect dispatch that later reads it, and `bucket_counts` by the same
|
|
57
|
+
* `bucket_count` threads.
|
|
58
|
+
*
|
|
43
59
|
* @param {object} params
|
|
44
60
|
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
45
|
-
* @param {object} params.gpu persistent buffers owned by the feature (GPUBuffer instances)
|
|
46
|
-
* @param {GPUBuffer} params.gpu.sim_list the padded, program-coherent index list this produces
|
|
47
|
-
* @param {GPUBuffer} params.gpu.sim_keys per-alive-entry program id
|
|
48
|
-
* @param {GPUBuffer} params.gpu.sim_histogram `{count, elements}` bins for the CSDLDF scan
|
|
49
|
-
* @param {GPUBuffer} params.gpu.sim_bucket_counts raw (unpadded) per-bucket counts
|
|
50
|
-
* @param {GPUBuffer} params.gpu.sim_cursor per-bucket scatter cursor
|
|
51
|
-
* @param {GPUBuffer} params.gpu.sim_dispatch_args indirect args for the two per-particle passes
|
|
52
61
|
* @param {number} params.emitter_database graph handle of the emitter database buffer
|
|
53
62
|
* @param {number} params.pool graph handle of the particle pool
|
|
54
63
|
* @param {number} params.alive graph handle of this frame's compacted alive list
|
|
@@ -57,34 +66,38 @@ import {
|
|
|
57
66
|
* imported here because the simulate pass reads it earlier in the same frame: importing the same
|
|
58
67
|
* GPUBuffer twice makes two resource entries the graph cannot see are the same memory, so the read
|
|
59
68
|
* and the write end up on separate dependency chains
|
|
69
|
+
* @param {number} params.capacity pool capacity in particles — the length of the key list
|
|
60
70
|
* @param {number} params.bucket_count number of distinct compiled programs
|
|
61
71
|
* @param {ParticleBucketScratch} [params.scratch] latest handles when bucketing again in this graph
|
|
62
72
|
* @returns {{counters: number, sim_list: number, dispatch_args: number, scratch: ParticleBucketScratch}} the threaded handles downstream passes must read
|
|
63
73
|
*/
|
|
64
|
-
export function graph_particle_bucket({ graph,
|
|
74
|
+
export function graph_particle_bucket({ graph, emitter_database, pool, alive, counters, sim_list, capacity, bucket_count, scratch }) {
|
|
65
75
|
assert.defined(graph, "graph");
|
|
76
|
+
assert.isPositiveInteger(capacity, "capacity");
|
|
66
77
|
assert.isPositiveInteger(bucket_count, "bucket_count");
|
|
67
78
|
assert.isNonNegativeInteger(sim_list, "sim_list");
|
|
68
79
|
|
|
69
|
-
// Sized from the bucket count, which only changes when the emitter set does
|
|
70
|
-
//
|
|
71
|
-
// Aligned up because the scan reads whole `vec4`s, so the last bin's tail is part of the buffer.
|
|
80
|
+
// Sized from the bucket count, which only changes when the emitter set does. Aligned up because
|
|
81
|
+
// the scan reads whole `vec4`s, so the last bin's tail is part of the buffer.
|
|
72
82
|
const bin_words = PREFIX_SCAN_CSDLDF_HEADER_WORDS + align_4(bucket_count);
|
|
73
|
-
assert.greaterThanOrEqual(gpu.sim_histogram.size, bin_words * Uint32Array.BYTES_PER_ELEMENT, "sim_histogram is too small for the bucket count");
|
|
74
|
-
assert.greaterThanOrEqual(gpu.sim_cursor.size, bucket_count * Uint32Array.BYTES_PER_ELEMENT, "sim_cursor is too small for the bucket count");
|
|
75
|
-
assert.greaterThanOrEqual(gpu.sim_bucket_counts.size, bucket_count * Uint32Array.BYTES_PER_ELEMENT, "sim_bucket_counts is too small for the bucket count");
|
|
76
83
|
|
|
77
84
|
// Every buffer a pass WRITES must be THREADED: the write returns a renamed (versioned) handle
|
|
78
|
-
// and the next pass must read THAT one. Reading the original
|
|
85
|
+
// and the next pass must read THAT one. Reading the original handle instead leaves the ordering
|
|
79
86
|
// between the two passes unexpressed — the graph's own validator rejects it, because both
|
|
80
87
|
// versions name one piece of memory and the stale-looking read silently returns the new
|
|
81
88
|
// contents.
|
|
82
|
-
// An edit frame buckets twice.
|
|
83
|
-
|
|
84
|
-
let
|
|
85
|
-
let
|
|
86
|
-
let
|
|
87
|
-
let
|
|
89
|
+
// An edit frame buckets twice. The second run is handed the first's handles, so the transients
|
|
90
|
+
// are created once and both runs share one dependency chain.
|
|
91
|
+
let keys = scratch?.keys ?? BufferResourceDescriptor.from(capacity * WORD, GPUBufferUsage.STORAGE);
|
|
92
|
+
let histogram = scratch?.histogram ?? BufferResourceDescriptor.from(bin_words * WORD, GPUBufferUsage.STORAGE);
|
|
93
|
+
let cursor = scratch?.cursor ?? BufferResourceDescriptor.from(bucket_count * WORD, GPUBufferUsage.STORAGE);
|
|
94
|
+
let bucket_counts = scratch?.bucket_counts ?? BufferResourceDescriptor.from(bucket_count * WORD, GPUBufferUsage.STORAGE);
|
|
95
|
+
// Indirect args this pass writes and the two per-particle passes below consume, along with the
|
|
96
|
+
// depth sort's and the bounds pass's — hence INDIRECT on top of STORAGE.
|
|
97
|
+
let dispatch_args = scratch?.dispatch_args ?? BufferResourceDescriptor.from(
|
|
98
|
+
3 * WORD,
|
|
99
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT,
|
|
100
|
+
);
|
|
88
101
|
|
|
89
102
|
// 0. Clear the bins and cursors, write the scan's {count} header, and size the two per-particle
|
|
90
103
|
// passes below from the GPU's own alive count.
|
|
@@ -58,10 +58,10 @@ export class ParticleGroupBuilder {
|
|
|
58
58
|
* @param {object} [parameters] overrides on top of the type's defaults
|
|
59
59
|
* @returns {{node: NodeInstance, port: Port}} the node's `out` port
|
|
60
60
|
*/
|
|
61
|
-
op(type: string, args?:
|
|
61
|
+
op(type: string, args?: Array<{
|
|
62
62
|
node: NodeInstance;
|
|
63
63
|
port: Port;
|
|
64
|
-
}
|
|
64
|
+
} | number>, parameters?: object): {
|
|
65
65
|
node: NodeInstance;
|
|
66
66
|
port: Port;
|
|
67
67
|
};
|
|
@@ -76,10 +76,10 @@ export class ParticleGroupBuilder {
|
|
|
76
76
|
* @returns {Object<string, {node: NodeInstance, port: Port}>} a reference per output port name
|
|
77
77
|
*/
|
|
78
78
|
call(group: ParticleNodeGroup, args?: {
|
|
79
|
-
[x: string]:
|
|
79
|
+
[x: string]: {
|
|
80
80
|
node: NodeInstance;
|
|
81
81
|
port: Port;
|
|
82
|
-
};
|
|
82
|
+
} | number;
|
|
83
83
|
}): {
|
|
84
84
|
[x: string]: {
|
|
85
85
|
node: NodeInstance;
|
|
@@ -159,10 +159,10 @@ export class ParticleGroupBuilder {
|
|
|
159
159
|
* @param {{node: NodeInstance, port: Port}|number} value
|
|
160
160
|
* @returns {void}
|
|
161
161
|
*/
|
|
162
|
-
out(name: string, value:
|
|
162
|
+
out(name: string, value: {
|
|
163
163
|
node: NodeInstance;
|
|
164
164
|
port: Port;
|
|
165
|
-
}): void;
|
|
165
|
+
} | number): void;
|
|
166
166
|
/**
|
|
167
167
|
* Finish the group, having checked that it is one.
|
|
168
168
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleGroupBuilder.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleGroupBuilder.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAaI;;OAEG;IACH,qBAFW,MAAM,EAoBhB;IAjCD;;;OAGG;IACH,OAFU,iBAAiB,CAErB;IAEN;;;OAGG;IACH;YAFiB,MAAM,GAAE;YAAC,IAAI,eAAe;YAAC,IAAI,OAAM;SAAC;MAEjD;IAyBR;;;;;;;;;;;OAWG;IACH,SALW,MAAM
|
|
1
|
+
{"version":3,"file":"ParticleGroupBuilder.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleGroupBuilder.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAaI;;OAEG;IACH,qBAFW,MAAM,EAoBhB;IAjCD;;;OAGG;IACH,OAFU,iBAAiB,CAErB;IAEN;;;OAGG;IACH;YAFiB,MAAM,GAAE;YAAC,IAAI,eAAe;YAAC,IAAI,OAAM;SAAC;MAEjD;IAyBR;;;;;;;;;;;OAWG;IACH,SALW,MAAM,SACN,MAAM;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,CAAC,eAC9C,MAAM,GACJ;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAmB5C;IAED;;;;;;;;;OASG;IACH,YAJW,iBAAiB;YACV,MAAM,GAAE;YAAC,IAAI,eAAe;YAAC,IAAI,OAAM;SAAC,GAAC,MAAM;;YAC7C,MAAM,GAAE;YAAC,IAAI,eAAe;YAAC,IAAI,OAAM;SAAC;MAwB3D;IAED;;;;;OAKG;IACH,iBAHc,MAAM,KACP;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAI5C;IAED;;;;;;OAMG;IACH,WAJW;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,WACvC,MAAM,GACJ;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAU5C;IAED,qGAAqG;IACrG,KADY;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,GAAc;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAGhG;IAED,qGAAqG;IACrG,KADY;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,GAAc;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAGhG;IAED,qGAAqG;IACrG,KADY;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,GAAc;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAGhG;IAED,qGAAqG;IACrG,KADY;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,GAAc;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAGhG;IAED;;;;;OAKG;IACH,YAHW,MAAM,GACJ;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,CAI5C;IAED;;;;;;OAMG;IACH,UAJW,MAAM,SACN;QAAC,IAAI,eAAe;QAAC,IAAI,OAAM;KAAC,GAAC,MAAM,GACrC,IAAI,CAehB;IAED;;;;;;;;OAQG;IACH,SAFa,iBAAiB,CA+B7B;;CAgDJ;kCA7SiC,wBAAwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleNodeGroup.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleNodeGroup.js"],"names":[],"mappings":"AAiWA;;;;;GAKG;AACH,6CAHW,YAAY,GACV,OAAO,CAInB;AAED;;;;;GAKG;AACH,iDAHW,YAAY,GACV,OAAO,CAInB;AAED;;;;;;;;;;GAUG;AACH,6EAFa,OAAO,CAKnB;AA3XD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;;;;;;GASG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;GAEG;AACH,yCAFU,MAAM,CAE4B;AAE5C;;;GAGG;AACH;IA2EI;;;;;;;;;;;;;;;OAeG;IACH;QAT2B,IAAI,EAApB,MAAM;QACW,KAAK,GAAtB,MAAM;QACW,IAAI,GAArB,MAAM;QACW,IAAI,GAArB,MAAM;QACY,MAAM,GAAxB,OAAO;QACmF,MAAM,GAAhG,MAAM;YAAC,
|
|
1
|
+
{"version":3,"file":"ParticleNodeGroup.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleNodeGroup.js"],"names":[],"mappings":"AAiWA;;;;;GAKG;AACH,6CAHW,YAAY,GACV,OAAO,CAInB;AAED;;;;;GAKG;AACH,iDAHW,YAAY,GACV,OAAO,CAInB;AAED;;;;;;;;;;GAUG;AACH,6EAFa,OAAO,CAKnB;AA3XD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;;;;;;;GASG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;GAEG;AACH,yCAFU,MAAM,CAE4B;AAE5C;;;GAGG;AACH;IA2EI;;;;;;;;;;;;;;;OAeG;IACH;QAT2B,IAAI,EAApB,MAAM;QACW,KAAK,GAAtB,MAAM;QACW,IAAI,GAArB,MAAM;QACW,IAAI,GAArB,MAAM;QACY,MAAM,GAAxB,OAAO;QACmF,MAAM,GAAhG,MAAM;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,CAAA;SAAC,CAAC;QACW,OAAO,GAAjG,MAAM;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,CAAA;SAAC,CAAC;QAC7E,iBAAiB,CA2B7B;IAnHD;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,OAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,QAFU,OAAO,CAEH;IAEd;;;;OAIG;IACH,QAFU,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,GAAC,IAAI,CAAA;KAAC,CAAC,CAElF;IAEZ;;;OAGG;IACH,SAFU,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,GAAC,IAAI,CAAA;KAAC,CAAC,CAEjF;IAEb;;;OAGG;IACH,OAFU,SAAS,CAEK;IAExB;;;OAGG;IACH,QAFU,mBAAmB,CAEM;IAEnC;;;OAGG;IACH,aAFU,4BAA4B,CAEnB;IAEnB;;;OAGG;IACH,WAFU,YAAY,CAEL;IAEjB;;;OAGG;IACH,YAFU,YAAY,CAEJ;IA6ClB;;;;;;OAMG;IACH,oBAJW,MAAM,aACN,aAAa,GACX,OAAO,wBAAwB,EAAE,iBAAiB,GAAC,IAAI,CAMnE;IAGL;;;OAGG;IACH,8BAFU,OAAO,CAE8B;CAN9C;AAQD;;;;;;;GAOG;AACH;IACI;;OAEG;IACH,mBAFW,iBAAiB,EAwD3B;IAnDG;;;OAGG;IACH,gBAFU,iBAAiB,CAET;IAwBlB;;;;;;;;;;MAeC;IAED,kBAKC;IAIT;;;OAGG;IACH,yCAFU,OAAO,CAEoD;CANpE;AAQD;;;;;;;GAOG;AACH;IACI;;;OAGG;IACH,mBAHW,iBAAiB,QACjB,MAAM,EAqDhB;IAhDG;;;OAGG;IACH,gBAFU,iBAAiB,CAET;IAElB;;;;OAIG;IACH,eAFU,MAAM,CAEA;IAoBhB;;;;;;;;;;;;MASM;IAEN,kBAKC;IAIT;;;OAGG;IACH,6CAFU,OAAO,CAE4D;CAN5E;6BAxV4B,wDAAwD;0BAD3D,gDAAgD;oCAGtC,iEAAiE;8BADvE,yDAAyD;wCAE/C,8BAA8B"}
|
|
@@ -58,7 +58,7 @@ export function particle_type_conversion(from: ParticleValueType, to: ParticleVa
|
|
|
58
58
|
dropped?: string;
|
|
59
59
|
zeroed?: string;
|
|
60
60
|
message: string;
|
|
61
|
-
};
|
|
61
|
+
} | null;
|
|
62
62
|
/**
|
|
63
63
|
* The types a value in a particle graph can have: a float vector of one to four lanes, and the
|
|
64
64
|
* types that say what such a vector *means*.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleValueType.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleValueType.js"],"names":[],"mappings":"AAqKA;;;;;;;;;;GAUG;AACH,mDAFa,iBAAiB,GAAC,IAAI,CAQlC;AAED;;;;;;;;;GASG;AACH,gDAJW,MAAM,GACJ,iBAAiB,CAW7B;AAED;;;;;;;GAOG;AACH,8DAFa,iBAAiB,GAAC,IAAI,CAQlC;AAED;;;;;;;;;;;;GAYG;AACH,4CAHW,SAAS,iBAAiB,GAAC,IAAI,GAAC,SAAS,CAAC,GACxC,iBAAiB,GAAC,IAAI,CAkBlC;AAKD;;;;;;;;;GASG;AACH,+CALW,iBAAiB,MACjB,iBAAiB;
|
|
1
|
+
{"version":3,"file":"ParticleValueType.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/ParticleValueType.js"],"names":[],"mappings":"AAqKA;;;;;;;;;;GAUG;AACH,mDAFa,iBAAiB,GAAC,IAAI,CAQlC;AAED;;;;;;;;;GASG;AACH,gDAJW,MAAM,GACJ,iBAAiB,CAW7B;AAED;;;;;;;GAOG;AACH,8DAFa,iBAAiB,GAAC,IAAI,CAQlC;AAED;;;;;;;;;;;;GAYG;AACH,4CAHW,SAAS,iBAAiB,GAAC,IAAI,GAAC,SAAS,CAAC,GACxC,iBAAiB,GAAC,IAAI,CAkBlC;AAKD;;;;;;;;;GASG;AACH,+CALW,iBAAiB,MACjB,iBAAiB,GACf;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAAC,IAAI,CAyBrE;AA3RD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH;IAwBI;;;;;;;OAOG;IACH,gBAPW,MAAM,QACN,MAAM,cACN,MAAM;QAEY,QAAQ,GAA1B,OAAO;QACL,iBAAiB,CAU7B;IAvCD;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;;OAOG;IACH,UAFU,OAAO,CAEA;IAEjB;;OAEG;IACH,yBAEC;IAqBL;;;OAGG;IACH,8BAFU,OAAO,CAE8B;CAN9C;AAQD,gCAAgC;AAChC,gCADW,iBAAiB,CACyC;AAErE,gCAAgC;AAChC,iCADW,iBAAiB,CAC2C;AAEvE,gCAAgC;AAChC,iCADW,iBAAiB,CAC2C;AAEvE,gCAAgC;AAChC,iCADW,iBAAiB,CAC2C;AAEvE;;;GAGG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;;;;;;;;GASG;AACH,kCAFU,iBAAiB,CAE0F;AAErH;;;GAGG;AACH,mCAFU,cAAc,iBAAiB,CAAC,CAOvC;AAEH;;;GAGG;AACH,sCAFU,cAAc,iBAAiB,CAAC,CAIvC;AAEH;;;GAGG;AACH,uCAFU,cAAc,iBAAiB,CAAC,CAKvC;yBA9JsB,oDAAoD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_particle_group.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/make_particle_group.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAtB6B,KAAK;IACE,KAAK,EAA9B,SAAS,MAAM,CAAC;IACD,IAAI,EAAnB,MAAM;IACU,KAAK,GAArB,MAAM;IACU,IAAI,GAApB,MAAM;IACU,IAAI,GAApB,MAAM;IACuB,MAAM;IAII,cAAc;IAES,MAAM,GAApE,OAAO,6BAA6B,EAAE,cAAc
|
|
1
|
+
{"version":3,"file":"make_particle_group.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/make_particle_group.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;IAtB6B,KAAK;IACE,KAAK,EAA9B,SAAS,MAAM,CAAC;IACD,IAAI,EAAnB,MAAM;IACU,KAAK,GAArB,MAAM;IACU,IAAI,GAApB,MAAM;IACU,IAAI,GAApB,MAAM;IACuB,MAAM;IAII,cAAc;IAES,MAAM,GAApE,OAAO,6BAA6B,EAAE,cAAc;IAElD;IACZ,KAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAU,EAAE,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAAC,CAAC;IACtE,OAAW,EAAE,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC,CAAA;CACxE,CA+DH;kCAnI6D,wBAAwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle_graph_authoring.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_graph_authoring.js"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;GAaG;AACH,sDALW,MAAM,eAEN,MAAM,GACJ,MAAM,CAelB;AAED;;;;;;;;;;;;;;GAcG;AACH,yDALW,MAAM,QACN,MAAM;
|
|
1
|
+
{"version":3,"file":"particle_graph_authoring.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_graph_authoring.js"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;GAaG;AACH,sDALW,MAAM,eAEN,MAAM,GACJ,MAAM,CAelB;AAED;;;;;;;;;;;;;;GAcG;AACH,yDALW,MAAM,QACN,MAAM,UACN,MAAM,GAAC,MAAM,EAAE,GAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAC3C,MAAM,CA2BlB;AA2BD;;;;;GAKG;AACH,uCAHc,MAAM,KACP,MAAM,EAAE,CAIpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle_group_json.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_group_json.js"],"names":[],"mappings":"AA+CA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,gDAHW,OAAO,wBAAwB,EAAE,iBAAiB,GAChD,iBAAiB,CAmC7B;AAED;;;;;;;;;;GAUG;AACH;IAPqC,IAAI,EAA9B,iBAAiB;IACsB,cAAc;IAES,OAAO,UAA5D,MAAM,KAAE,CAAC,0BAAwB,SAAS,CAAC;IAElD,OAAO,wBAAwB,EAAE,iBAAiB,CAiD9D;AAED;;;;;;;GAOG;AACH,mDAHW,OAAO,wBAAwB,EAAE,iBAAiB,GAChD,OAAO,8BAA8B,EAAE,uBAAuB,EAAE,CAI5E;AA9JD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;GAGG;AACH,wCAFU,MAAM,CAEwC;AAExD;;GAEG;AACH,yCAFU,MAAM,CAE0C;;UAS5C,MAAM;WACN,MAAM;UACN,MAAM;UACN,MAAM;YACN,MAAM;QAAC,
|
|
1
|
+
{"version":3,"file":"particle_group_json.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/graph/particle_group_json.js"],"names":[],"mappings":"AA+CA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,gDAHW,OAAO,wBAAwB,EAAE,iBAAiB,GAChD,iBAAiB,CAmC7B;AAED;;;;;;;;;;GAUG;AACH;IAPqC,IAAI,EAA9B,iBAAiB;IACsB,cAAc;IAES,OAAO,UAA5D,MAAM,KAAE,CAAC,0BAAwB,SAAS,CAAC;IAElD,OAAO,wBAAwB,EAAE,iBAAiB,CAiD9D;AAED;;;;;;;GAOG;AACH,mDAHW,OAAO,wBAAwB,EAAE,iBAAiB,GAChD,OAAO,8BAA8B,EAAE,uBAAuB,EAAE,CAI5E;AA9JD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;GAGG;AACH,wCAFU,MAAM,CAEwC;AAExD;;GAEG;AACH,yCAFU,MAAM,CAE0C;;UAS5C,MAAM;WACN,MAAM;UACN,MAAM;UACN,MAAM;YACN,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAC,IAAI,CAAA;KAAC,CAAC;aACxC,MAAM;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAC,IAAI,CAAA;KAAC,CAAC;UACxC,OAAO,0BAA0B,EAAE,iBAAiB"}
|
|
@@ -59,6 +59,17 @@
|
|
|
59
59
|
* passes must read — exactly the ReSTIR reservoir pattern. Every persistent buffer is imported
|
|
60
60
|
* exactly once: two imports of one buffer are two resource entries the graph cannot tell apart.
|
|
61
61
|
*
|
|
62
|
+
* ## What is imported, and what the graph owns
|
|
63
|
+
*
|
|
64
|
+
* A buffer is imported only if its contents cross the frame boundary: the pool, the free list, the
|
|
65
|
+
* counters, the alive lists, `sim_list` (written here, read by next frame's simulate),
|
|
66
|
+
* `dispatch_args` (the same), the program blob and the two CPU-uploaded queues. Everything else is
|
|
67
|
+
* produced and consumed inside one graph, so the pass that first writes it declares it with a
|
|
68
|
+
* {@link BufferResourceDescriptor} in place of a handle and the graph allocates it just in time and
|
|
69
|
+
* releases it after its last reader — into the pool every other feature draws from. That is the
|
|
70
|
+
* spawn counts and the emit command, the VM's wide register file, the draw args, the bucketing
|
|
71
|
+
* scratch (`coherence/`) and the whole depth sort (`sort/`).
|
|
72
|
+
*
|
|
62
73
|
* On the very first frame `dispatch_args` must be zero-initialised (WebGPU zero-fills new buffers)
|
|
63
74
|
* and the `ALIVE_IN` counter 0, so simulate is a no-op until the first build-indirect has run.
|
|
64
75
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_particles.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/graph_particles.js"],"names":[],"mappings":"AAuCA
|
|
1
|
+
{"version":3,"file":"graph_particles.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/graph_particles.js"],"names":[],"mappings":"AAuCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AAEH;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IA7BkG,KAAK,EAA5F,OAAO,2DAA2D,EAAE,UAAU;IAC/D,MAAM,EAArB,MAAM;IACS,cAAc,EAA7B,MAAM;IACS,GAAG,EAAlB,MAAM;IACS,QAAQ;QACC,QAAQ,EAAhC,MAAM;QAEkB,WAAW,EAAnC,MAAM;;IACS,QAAQ,EAAvB,MAAM;IACS,YAAY,EAA3B,MAAM;IAEU,cAAc,EAA9B,OAAO;IAGQ,KAAK;QACC,EAAE,EAAvB,MAAM;QACe,IAAI,EAAzB,MAAM;QACe,KAAK,EAA1B,MAAM;QACiB,QAAQ,GAA/B,OAAO;QACc,WAAW,EAAhC,MAAM;QACe,mBAAmB,EAAxC,MAAM;QACe,YAAY,EAAjC,MAAM;QAGe,eAAe,EAApC,MAAM;QAC6D,eAAe,EAAlF,OAAO,6BAA6B,EAAE,cAAc;;IAElD,yBAAyB,CA8TrC;;;;;UAtWa,MAAM;;;;WACN,MAAM;;;;cACN,MAAM;;;;eACN,MAAM;;;;uBACN,MAAM;;;;;sBACN,MAAM"}
|