@woosh/meep-engine 3.43.0 → 3.44.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/editor/prototypeEditorShell.d.ts.map +1 -1
- package/editor/prototypeEditorShell.js +4 -2
- package/package.json +1 -1
- package/src/engine/Clock.d.ts +15 -0
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/Clock.js +29 -5
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +11 -19
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts +57 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/MeshSkin.js +84 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +23 -13
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +61 -64
- package/src/engine/graphics3/AnimationSystem.d.ts +24 -15
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +67 -61
- package/src/engine/graphics3/MeshSkinSystem.d.ts +56 -0
- package/src/engine/graphics3/MeshSkinSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSkinSystem.js +317 -0
- package/src/engine/graphics3/MeshSystem.d.ts +15 -35
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +21 -298
- package/src/engine/graphics3/RowChains.d.ts +76 -0
- package/src/engine/graphics3/RowChains.d.ts.map +1 -0
- package/src/engine/graphics3/RowChains.js +347 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +329 -309
- package/src/engine/graphics3/animation/AnimationClips.d.ts +56 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClips.js +79 -0
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +13 -14
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +262 -263
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +3 -3
- package/src/engine/graphics3/animation/write_clip_playback.js +4 -4
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +5 -0
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +80 -75
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +4 -24
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/PrefabInstance.js +60 -80
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +16 -3
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +49 -12
- package/src/engine/graphics3/prefab/prefab_place.d.ts +31 -17
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_place.js +175 -130
- package/src/engine/graphics3/register_clips.d.ts +64 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -0
- package/src/engine/graphics3/register_clips.js +114 -0
- package/src/engine/physics/cloth/MEASUREMENTS.md +795 -0
- package/src/engine/physics/cloth/PLAN.md +339 -9
- package/src/engine/physics/cloth/build/ClothProxy.d.ts +113 -61
- package/src/engine/physics/cloth/build/ClothProxy.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/ClothProxy.js +142 -77
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +75 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +43 -30
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +357 -284
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts +62 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -0
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +280 -0
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.d.ts +17 -9
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +220 -212
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.js +6 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts +91 -0
- package/src/engine/physics/cloth/ecs/ClothHold.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothHold.js +103 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +254 -48
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +277 -47
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts +73 -0
- package/src/engine/physics/cloth/ecs/ClothPin.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPin.js +92 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts +36 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothPinSerializationAdapter.js +61 -0
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +23 -17
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +29 -27
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +12 -14
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +20 -15
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +57 -36
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +816 -179
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +12 -13
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +20 -14
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +63 -11
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +321 -84
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +9 -7
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +9 -7
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +3 -3
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +30 -30
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +37 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +142 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts +97 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_holds.js +608 -0
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +160 -9
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +17 -22
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +55 -117
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +21 -6
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +44 -15
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +5 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +60 -16
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +65 -58
- package/src/engine/physics/cloth/playground/collide_main.js +1 -1
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +17 -5
- package/src/engine/physics/cloth/playground/garment_main.js +1 -1
- package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/rig_build.js +302 -296
- package/src/engine/physics/cloth/solver/ClothState.d.ts +45 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +63 -7
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts +6 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +7 -2
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts +114 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +362 -0
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +6 -2
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +13 -13
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +24 -12
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +24 -12
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +183 -20
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +1 -0
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +10 -3
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +353 -346
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts +7 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +7 -5
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +9 -9
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +26 -26
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/simulation/Ticker.d.ts +13 -0
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +43 -8
- package/src/shade/RENDERER_CONTRACT.md +8 -2
- package/src/shade/playground/mesh_row_ceiling/main.js +2 -1
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +11 -19
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +6 -3
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +90 -90
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +502 -509
- package/src/shade/playground/texture_encode/README.md +129 -109
- package/src/shade/playground/texture_encode/main.js +1430 -1430
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +45 -14
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +316 -64
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +5 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -1
- package/src/shade/renderer/geometry/BoxGeometry.d.ts +1 -11
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +6 -13
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts +19 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CapsuleGeometry.js +24 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts +20 -0
- package/src/shade/renderer/geometry/ConeGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/ConeGeometry.js +33 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/CylinderGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/CylinderGeometry.js +35 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts +17 -0
- package/src/shade/renderer/geometry/PlaneGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/PlaneGeometry.js +22 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts +18 -0
- package/src/shade/renderer/geometry/TorusGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/TorusGeometry.js +23 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts +21 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/UVSphereGeometry.js +34 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts +19 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_capsule_geometry.js +205 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts +21 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_cone_geometry.js +36 -0
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/primitives/make_cylinder_geometry.js +44 -9
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts +20 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.d.ts.map +1 -0
- package/src/shade/renderer/geometry/primitives/make_uv_sphere_geometry.js +190 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -2
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +26 -8
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +56 -39
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +46 -4
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/test_prefix_sum.js +4 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/sort/defs.js +79 -79
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +7 -3
- package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -3
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +200 -194
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +6 -2
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +334 -329
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +7 -2
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +16 -4
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +2444 -2345
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_astc_encode_block_4x4_rgb.js +312 -310
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts +3 -3
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc1_encode_block.js +383 -375
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc6h_encode_block_mode11.js +349 -346
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts +58 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block.js +536 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts +21 -7
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_encode_block_mode6.js +291 -327
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts +25 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode1.js +99 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts +5 -3
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/chunk_bc7_pack_mode6.js +47 -71
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts +10 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.d.ts.map +1 -0
- package/src/shade/renderer/texture/encode/chunk_bc7_partition_2.js +50 -0
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts +4 -5
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +7 -8
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +7 -5
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +8 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +3 -2
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +3 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +3 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +11 -4
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +37 -20
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +74 -3
- package/src/engine/graphics3/register_instance_animation.d.ts +0 -114
- package/src/engine/graphics3/register_instance_animation.d.ts.map +0 -1
- package/src/engine/graphics3/register_instance_animation.js +0 -201
|
@@ -3,30 +3,37 @@
|
|
|
3
3
|
* @typedef {import("./PrefabInstance.js").PrefabInstance} PrefabInstance
|
|
4
4
|
* @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
5
5
|
* @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
6
|
-
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* One skinned primitive's registration: the mesh entity, and the skin id the animation manager
|
|
9
|
+
* issued for its `MeshSkin`.
|
|
10
|
+
*
|
|
11
|
+
* @typedef {{entity: number, skin_id: number}} PlacedSkin
|
|
7
12
|
*/
|
|
8
13
|
/**
|
|
9
14
|
* Put a model into a scene that has no systems: a playground, a preview, a tool.
|
|
10
15
|
*
|
|
11
|
-
* A game does this in
|
|
12
|
-
* it,
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* animation manager —
|
|
16
|
+
* A game does this in three systems — `MeshSystem` spawns the prefab under the entity that wears
|
|
17
|
+
* it, `ShadedGeometrySystem` takes a mesh row for every primitive as its component appears, and
|
|
18
|
+
* `MeshSkinSystem` registers every `MeshSkin` and binds its mesh. A scene bound to a bare dataset
|
|
19
|
+
* has none of them, so this does the same by hand, in one call: a root entity carrying
|
|
20
|
+
* `placement`, the prefab spawned under it, a `transforms` row acquired for every entity of the
|
|
21
|
+
* instance, a `meshes` row attached for every primitive (over a clone of its geometry where the
|
|
22
|
+
* primitive is skinned), and each skinned primitive's skin registered with the animation manager —
|
|
23
|
+
* unless told otherwise. The rows are not marked when anything moves; a playground that moves a
|
|
24
|
+
* placed model marks what it moved.
|
|
18
25
|
*
|
|
19
26
|
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
|
|
20
27
|
* @param {EntityComponentDataset} dataset the dataset the scene is bound to
|
|
21
28
|
* @param {Prefab} prefab the model, compiled once
|
|
22
29
|
* @param {Transform64} placement where the model's root goes; copied
|
|
23
30
|
* @param {object} [options]
|
|
24
|
-
* @param {boolean} [options.register_animation] whether the instance's skins
|
|
25
|
-
*
|
|
31
|
+
* @param {boolean} [options.register_animation] whether the instance's skins are registered;
|
|
32
|
+
* off leaves a skinned primitive's clone undeformed
|
|
26
33
|
* @param {boolean} [options.skinned] whether skinned primitives take a row at all; a preview that
|
|
27
34
|
* registers no skin has nothing to pose them with and leaves them out
|
|
28
|
-
* @returns {{root: number, instance: PrefabInstance,
|
|
29
|
-
* `drawn` is how many primitives took a row
|
|
35
|
+
* @returns {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null, drawn: number}}
|
|
36
|
+
* `skins` is null when nothing was registered; `drawn` is how many primitives took a row
|
|
30
37
|
*/
|
|
31
38
|
export function prefab_place(scene_context: GPUSceneContext, dataset: EntityComponentDataset, prefab: Prefab, placement: Transform64, { register_animation, skinned }?: {
|
|
32
39
|
register_animation?: boolean;
|
|
@@ -34,27 +41,34 @@ export function prefab_place(scene_context: GPUSceneContext, dataset: EntityComp
|
|
|
34
41
|
}): {
|
|
35
42
|
root: number;
|
|
36
43
|
instance: PrefabInstance;
|
|
37
|
-
|
|
44
|
+
skins: PlacedSkin[] | null;
|
|
38
45
|
drawn: number;
|
|
39
46
|
};
|
|
40
47
|
/**
|
|
41
|
-
* Take a placed model out again: its rows given back, its
|
|
48
|
+
* Take a placed model out again: its rows given back, its skins unregistered, its entities
|
|
42
49
|
* removed — the root included, since {@link prefab_place} made it.
|
|
43
50
|
*
|
|
44
51
|
* @param {GPUSceneContext} scene_context
|
|
45
52
|
* @param {EntityComponentDataset} dataset
|
|
46
|
-
* @param {{root: number, instance: PrefabInstance,
|
|
53
|
+
* @param {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null}} placed
|
|
47
54
|
* what {@link prefab_place} answered
|
|
48
55
|
*/
|
|
49
56
|
export function prefab_unplace(scene_context: GPUSceneContext, dataset: EntityComponentDataset, placed: {
|
|
50
57
|
root: number;
|
|
51
58
|
instance: PrefabInstance;
|
|
52
|
-
|
|
59
|
+
skins: PlacedSkin[] | null;
|
|
53
60
|
}): void;
|
|
54
61
|
export type Prefab = import("./Prefab.js").Prefab;
|
|
55
62
|
export type PrefabInstance = import("./PrefabInstance.js").PrefabInstance;
|
|
56
63
|
export type EntityComponentDataset = import("../../ecs/EntityComponentDataset.js").EntityComponentDataset;
|
|
57
64
|
export type GPUSceneContext = import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext;
|
|
58
|
-
|
|
65
|
+
/**
|
|
66
|
+
* One skinned primitive's registration: the mesh entity, and the skin id the animation manager
|
|
67
|
+
* issued for its `MeshSkin`.
|
|
68
|
+
*/
|
|
69
|
+
export type PlacedSkin = {
|
|
70
|
+
entity: number;
|
|
71
|
+
skin_id: number;
|
|
72
|
+
};
|
|
59
73
|
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
60
74
|
//# sourceMappingURL=prefab_place.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefab_place.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_place.js"],"names":[],"mappings":"AAOA
|
|
1
|
+
{"version":3,"file":"prefab_place.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/prefab/prefab_place.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,4CAZW,eAAe,WACf,sBAAsB,UACtB,MAAM,aACN,WAAW;IAEO,kBAAkB,GAApC,OAAO;IAEW,OAAO,GAAzB,OAAO;IAEL;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,GAAC,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAyD7F;AAkCD;;;;;;;;GAQG;AACH,8CALW,eAAe,WACf,sBAAsB,UACtB;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,GAAC,IAAI,CAAA;CAAC,QAkC5E;qBAtKY,OAAO,aAAa,EAAE,MAAM;6BAC5B,OAAO,qBAAqB,EAAE,cAAc;qCAC5C,OAAO,qCAAqC,EAAE,sBAAsB;8BACpE,OAAO,kDAAkD,EAAE,eAAe;;;;;yBAO1E;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC;4BAjBlB,oCAAoC"}
|
|
@@ -1,130 +1,175 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
3
|
-
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
4
|
-
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
5
|
-
import {
|
|
6
|
-
import { prefab_instance_destroy, prefab_instantiate } from "./prefab_instantiate.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
10
|
-
* @typedef {import("./PrefabInstance.js").PrefabInstance} PrefabInstance
|
|
11
|
-
* @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
12
|
-
* @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* @
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
dataset.
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
for (let i = 0; i <
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
for (let i = 0; i < mesh_entities.length; i++) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
3
|
+
import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
4
|
+
import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
|
|
5
|
+
import { MeshSkin } from "../../graphics/ecs/mesh-v2/MeshSkin.js";
|
|
6
|
+
import { prefab_instance_destroy, prefab_instantiate } from "./prefab_instantiate.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @typedef {import("./Prefab.js").Prefab} Prefab
|
|
10
|
+
* @typedef {import("./PrefabInstance.js").PrefabInstance} PrefabInstance
|
|
11
|
+
* @typedef {import("../../ecs/EntityComponentDataset.js").EntityComponentDataset} EntityComponentDataset
|
|
12
|
+
* @typedef {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* One skinned primitive's registration: the mesh entity, and the skin id the animation manager
|
|
17
|
+
* issued for its `MeshSkin`.
|
|
18
|
+
*
|
|
19
|
+
* @typedef {{entity: number, skin_id: number}} PlacedSkin
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Put a model into a scene that has no systems: a playground, a preview, a tool.
|
|
24
|
+
*
|
|
25
|
+
* A game does this in three systems — `MeshSystem` spawns the prefab under the entity that wears
|
|
26
|
+
* it, `ShadedGeometrySystem` takes a mesh row for every primitive as its component appears, and
|
|
27
|
+
* `MeshSkinSystem` registers every `MeshSkin` and binds its mesh. A scene bound to a bare dataset
|
|
28
|
+
* has none of them, so this does the same by hand, in one call: a root entity carrying
|
|
29
|
+
* `placement`, the prefab spawned under it, a `transforms` row acquired for every entity of the
|
|
30
|
+
* instance, a `meshes` row attached for every primitive (over a clone of its geometry where the
|
|
31
|
+
* primitive is skinned), and each skinned primitive's skin registered with the animation manager —
|
|
32
|
+
* unless told otherwise. The rows are not marked when anything moves; a playground that moves a
|
|
33
|
+
* placed model marks what it moved.
|
|
34
|
+
*
|
|
35
|
+
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
|
|
36
|
+
* @param {EntityComponentDataset} dataset the dataset the scene is bound to
|
|
37
|
+
* @param {Prefab} prefab the model, compiled once
|
|
38
|
+
* @param {Transform64} placement where the model's root goes; copied
|
|
39
|
+
* @param {object} [options]
|
|
40
|
+
* @param {boolean} [options.register_animation] whether the instance's skins are registered;
|
|
41
|
+
* off leaves a skinned primitive's clone undeformed
|
|
42
|
+
* @param {boolean} [options.skinned] whether skinned primitives take a row at all; a preview that
|
|
43
|
+
* registers no skin has nothing to pose them with and leaves them out
|
|
44
|
+
* @returns {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null, drawn: number}}
|
|
45
|
+
* `skins` is null when nothing was registered; `drawn` is how many primitives took a row
|
|
46
|
+
*/
|
|
47
|
+
export function prefab_place(scene_context, dataset, prefab, placement, { register_animation = true, skinned = true } = {}) {
|
|
48
|
+
assert.defined(scene_context, 'scene_context');
|
|
49
|
+
assert.defined(dataset, 'dataset');
|
|
50
|
+
assert.equal(dataset.isEntityComponentDataset, true, 'dataset.isEntityComponentDataset !== true');
|
|
51
|
+
assert.defined(prefab, 'prefab');
|
|
52
|
+
assert.equal(prefab.isPrefab, true, 'prefab.isPrefab !== true');
|
|
53
|
+
assert.defined(placement, 'placement');
|
|
54
|
+
assert.isBoolean(register_animation, 'register_animation');
|
|
55
|
+
assert.isBoolean(skinned, 'skinned');
|
|
56
|
+
|
|
57
|
+
// a fresh dataset knows no component types; the prefab registers its own, and the root is
|
|
58
|
+
// placed before the prefab is spawned
|
|
59
|
+
dataset.registerManyComponentTypes([Transform64]);
|
|
60
|
+
|
|
61
|
+
const root = dataset.createEntity();
|
|
62
|
+
const transform = new Transform64();
|
|
63
|
+
|
|
64
|
+
transform.copy(placement);
|
|
65
|
+
transform.updateMatrix();
|
|
66
|
+
|
|
67
|
+
dataset.addComponentToEntity(root, transform);
|
|
68
|
+
|
|
69
|
+
const instance = prefab_instantiate(prefab, dataset, root);
|
|
70
|
+
|
|
71
|
+
const rows = scene_context.rows;
|
|
72
|
+
const entities = instance.entities;
|
|
73
|
+
|
|
74
|
+
for (let i = 0; i < entities.length; i++) {
|
|
75
|
+
rows.acquire(entities[i]);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const mesh_entities = instance.mesh_entities;
|
|
79
|
+
|
|
80
|
+
let drawn = 0;
|
|
81
|
+
|
|
82
|
+
for (let i = 0; i < mesh_entities.length; i++) {
|
|
83
|
+
const entity = mesh_entities[i];
|
|
84
|
+
const geometry = dataset.getComponent(entity, ShadedGeometry);
|
|
85
|
+
const is_skinned = geometry.getFlag(ShadedGeometryFlags.Skinned);
|
|
86
|
+
|
|
87
|
+
if (is_skinned && !skinned) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
rows.attach_mesh(entity, geometry.geometry, geometry.material, is_skinned);
|
|
92
|
+
|
|
93
|
+
drawn++;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const skins = register_animation
|
|
97
|
+
? register_skins(scene_context, dataset, mesh_entities)
|
|
98
|
+
: null;
|
|
99
|
+
|
|
100
|
+
return { root, instance, skins, drawn };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Register the skin of every primitive that carries one, and bind the primitive to it — what
|
|
105
|
+
* `MeshSkinSystem` does for a game. Meshes of one skeleton bound the same way share a skin.
|
|
106
|
+
*
|
|
107
|
+
* @param {GPUSceneContext} scene_context
|
|
108
|
+
* @param {EntityComponentDataset} dataset
|
|
109
|
+
* @param {Int32Array} mesh_entities
|
|
110
|
+
* @returns {PlacedSkin[]}
|
|
111
|
+
*/
|
|
112
|
+
function register_skins(scene_context, dataset, mesh_entities) {
|
|
113
|
+
const manager = scene_context.animation_manager;
|
|
114
|
+
|
|
115
|
+
const skins = [];
|
|
116
|
+
|
|
117
|
+
for (let i = 0; i < mesh_entities.length; i++) {
|
|
118
|
+
const entity = mesh_entities[i];
|
|
119
|
+
const skin = dataset.getComponent(entity, MeshSkin);
|
|
120
|
+
|
|
121
|
+
if (skin === undefined) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const skin_id = manager.register_skin(skin.joints, skin.inverse_bind_matrices);
|
|
126
|
+
|
|
127
|
+
manager.bind_skin_mesh(entity, skin_id);
|
|
128
|
+
|
|
129
|
+
skins.push({ entity, skin_id });
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return skins;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Take a placed model out again: its rows given back, its skins unregistered, its entities
|
|
137
|
+
* removed — the root included, since {@link prefab_place} made it.
|
|
138
|
+
*
|
|
139
|
+
* @param {GPUSceneContext} scene_context
|
|
140
|
+
* @param {EntityComponentDataset} dataset
|
|
141
|
+
* @param {{root: number, instance: PrefabInstance, skins: PlacedSkin[]|null}} placed
|
|
142
|
+
* what {@link prefab_place} answered
|
|
143
|
+
*/
|
|
144
|
+
export function prefab_unplace(scene_context, dataset, placed) {
|
|
145
|
+
assert.defined(scene_context, 'scene_context');
|
|
146
|
+
assert.defined(dataset, 'dataset');
|
|
147
|
+
assert.defined(placed, 'placed');
|
|
148
|
+
|
|
149
|
+
if (placed.skins !== null) {
|
|
150
|
+
const manager = scene_context.animation_manager;
|
|
151
|
+
|
|
152
|
+
for (const { entity, skin_id } of placed.skins) {
|
|
153
|
+
manager.unbind_skin_mesh(entity);
|
|
154
|
+
manager.unregister_skin(skin_id);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const rows = scene_context.rows;
|
|
159
|
+
const instance = placed.instance;
|
|
160
|
+
const mesh_entities = instance.mesh_entities;
|
|
161
|
+
|
|
162
|
+
for (let i = 0; i < mesh_entities.length; i++) {
|
|
163
|
+
// safe on a skinned primitive that took no row
|
|
164
|
+
rows.detach_mesh(mesh_entities[i]);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const entities = instance.entities;
|
|
168
|
+
|
|
169
|
+
for (let i = 0; i < entities.length; i++) {
|
|
170
|
+
rows.release(entities[i]);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
prefab_instance_destroy(dataset, instance);
|
|
174
|
+
dataset.removeEntity(placed.root);
|
|
175
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Make some of an entity's clips playable — the ones a driver actually plays, and no others.
|
|
3
|
+
*
|
|
4
|
+
* **Registering a clip is not free of consequence, which is why this takes a set.** The pose
|
|
5
|
+
* accumulator marks a joint dirty for every bound clip that writes to it, whatever its weight, so a
|
|
6
|
+
* bound clip at weight zero resolves the joints only it drives to zero rather than leaving them at
|
|
7
|
+
* rest. A driver therefore registers what it can play and re-registers when that changes; a clip no
|
|
8
|
+
* driver claims is never bound and so moves nothing.
|
|
9
|
+
*
|
|
10
|
+
* Each index is registered once however many times it is named. Two states of one graph can play
|
|
11
|
+
* the same clip, and two registrations of one clip are two rows the accumulator would add together.
|
|
12
|
+
*
|
|
13
|
+
* @param {GPUSceneContext} context
|
|
14
|
+
* @param {ShadeAnimationClip[]} clips an entity's `AnimationClips`; their channels target entities
|
|
15
|
+
* @param {ArrayLike<number>} slots indices into `clips`; duplicates are ignored
|
|
16
|
+
* @returns {ClipRegistration}
|
|
17
|
+
*/
|
|
18
|
+
export function register_clips(context: GPUSceneContext, clips: ShadeAnimationClip[], slots: ArrayLike<number>): ClipRegistration;
|
|
19
|
+
/**
|
|
20
|
+
* Give back everything {@link register_clips} took out, for a manager that is still the one that
|
|
21
|
+
* issued it. A restart takes the GPU scene context with it, and the ids it issued mean nothing to the
|
|
22
|
+
* one that replaces it, so a caller holding a registration from another context forgets it rather
|
|
23
|
+
* than handing it back here.
|
|
24
|
+
*
|
|
25
|
+
* @param {ClipRegistration} registration
|
|
26
|
+
*/
|
|
27
|
+
export function unregister_clips(registration: ClipRegistration): void;
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
30
|
+
* @typedef {import("../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* The id a clip has when nobody registered it.
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
export const CLIP_NOT_REGISTERED: number;
|
|
37
|
+
/**
|
|
38
|
+
* Which of an entity's clips a driver has playable, by their place in its `AnimationClips`.
|
|
39
|
+
*
|
|
40
|
+
* `ids[i]` is the manager's id for `clips[i]`, or {@link CLIP_NOT_REGISTERED} where this driver
|
|
41
|
+
* does not play that clip. Indexed by the clip's place rather than packed, because that is how
|
|
42
|
+
* both drivers already address a clip — the graph resolves a name to a slot, the clip list does the
|
|
43
|
+
* same — and a packed array would want a second table to say what each entry was.
|
|
44
|
+
*/
|
|
45
|
+
export class ClipRegistration {
|
|
46
|
+
/**
|
|
47
|
+
* The GPU scene context these ids were issued by.
|
|
48
|
+
*
|
|
49
|
+
* Carried rather than inferred, because **an id may only be handed back to the manager that
|
|
50
|
+
* issued it**. A renderer restart builds a new context, and a holder comparing this against what
|
|
51
|
+
* `scene_context` answers now knows in one `===` whether giving the ids back is returning them or
|
|
52
|
+
* corrupting a stranger's table.
|
|
53
|
+
*
|
|
54
|
+
* @type {GPUSceneContext|null}
|
|
55
|
+
*/
|
|
56
|
+
context: GPUSceneContext | null;
|
|
57
|
+
/**
|
|
58
|
+
* @type {Int32Array}
|
|
59
|
+
*/
|
|
60
|
+
ids: Int32Array;
|
|
61
|
+
}
|
|
62
|
+
export type GPUSceneContext = import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext;
|
|
63
|
+
export type ShadeAnimationClip = import("../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip;
|
|
64
|
+
//# sourceMappingURL=register_clips.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register_clips.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/register_clips.js"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;;;;;GAgBG;AACH,wCALW,eAAe,SACf,kBAAkB,EAAE,SACpB,UAAU,MAAM,CAAC,GACf,gBAAgB,CA6B5B;AAED;;;;;;;GAOG;AACH,+CAFW,gBAAgB,QAqB1B;AA/GD;;;GAGG;AAEH;;;GAGG;AACH,kCAFU,MAAM,CAEsB;AAEtC;;;;;;;GAOG;AACH;IACI;;;;;;;;;OASG;IACH,SAFU,eAAe,GAAC,IAAI,CAEf;IAEf;;OAEG;IACH,KAFU,UAAU,CAEI;CAC3B;8BAnCY,OAAO,+CAA+C,EAAE,eAAe;iCACvE,OAAO,sDAAsD,EAAE,kBAAkB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { assert } from "../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {import("../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
5
|
+
* @typedef {import("../../shade/renderer/animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The id a clip has when nobody registered it.
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const CLIP_NOT_REGISTERED = -1;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Which of an entity's clips a driver has playable, by their place in its `AnimationClips`.
|
|
16
|
+
*
|
|
17
|
+
* `ids[i]` is the manager's id for `clips[i]`, or {@link CLIP_NOT_REGISTERED} where this driver
|
|
18
|
+
* does not play that clip. Indexed by the clip's place rather than packed, because that is how
|
|
19
|
+
* both drivers already address a clip — the graph resolves a name to a slot, the clip list does the
|
|
20
|
+
* same — and a packed array would want a second table to say what each entry was.
|
|
21
|
+
*/
|
|
22
|
+
export class ClipRegistration {
|
|
23
|
+
/**
|
|
24
|
+
* The GPU scene context these ids were issued by.
|
|
25
|
+
*
|
|
26
|
+
* Carried rather than inferred, because **an id may only be handed back to the manager that
|
|
27
|
+
* issued it**. A renderer restart builds a new context, and a holder comparing this against what
|
|
28
|
+
* `scene_context` answers now knows in one `===` whether giving the ids back is returning them or
|
|
29
|
+
* corrupting a stranger's table.
|
|
30
|
+
*
|
|
31
|
+
* @type {GPUSceneContext|null}
|
|
32
|
+
*/
|
|
33
|
+
context = null;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @type {Int32Array}
|
|
37
|
+
*/
|
|
38
|
+
ids = new Int32Array(0);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Make some of an entity's clips playable — the ones a driver actually plays, and no others.
|
|
43
|
+
*
|
|
44
|
+
* **Registering a clip is not free of consequence, which is why this takes a set.** The pose
|
|
45
|
+
* accumulator marks a joint dirty for every bound clip that writes to it, whatever its weight, so a
|
|
46
|
+
* bound clip at weight zero resolves the joints only it drives to zero rather than leaving them at
|
|
47
|
+
* rest. A driver therefore registers what it can play and re-registers when that changes; a clip no
|
|
48
|
+
* driver claims is never bound and so moves nothing.
|
|
49
|
+
*
|
|
50
|
+
* Each index is registered once however many times it is named. Two states of one graph can play
|
|
51
|
+
* the same clip, and two registrations of one clip are two rows the accumulator would add together.
|
|
52
|
+
*
|
|
53
|
+
* @param {GPUSceneContext} context
|
|
54
|
+
* @param {ShadeAnimationClip[]} clips an entity's `AnimationClips`; their channels target entities
|
|
55
|
+
* @param {ArrayLike<number>} slots indices into `clips`; duplicates are ignored
|
|
56
|
+
* @returns {ClipRegistration}
|
|
57
|
+
*/
|
|
58
|
+
export function register_clips(context, clips, slots) {
|
|
59
|
+
assert.defined(context, 'context');
|
|
60
|
+
assert.isArray(clips, 'clips');
|
|
61
|
+
assert.defined(slots, 'slots');
|
|
62
|
+
|
|
63
|
+
const manager = context.animation_manager;
|
|
64
|
+
|
|
65
|
+
const r = new ClipRegistration();
|
|
66
|
+
|
|
67
|
+
r.context = context;
|
|
68
|
+
r.ids = new Int32Array(clips.length).fill(CLIP_NOT_REGISTERED);
|
|
69
|
+
|
|
70
|
+
for (let i = 0; i < slots.length; i++) {
|
|
71
|
+
const slot = slots[i];
|
|
72
|
+
|
|
73
|
+
assert.isNonNegativeInteger(slot, 'slot');
|
|
74
|
+
assert.lessThan(slot, clips.length, 'slot');
|
|
75
|
+
|
|
76
|
+
if (r.ids[slot] !== CLIP_NOT_REGISTERED) {
|
|
77
|
+
// named twice by one driver, which is one clip either way
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
r.ids[slot] = manager.register_clip(clips[slot]);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return r;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Give back everything {@link register_clips} took out, for a manager that is still the one that
|
|
89
|
+
* issued it. A restart takes the GPU scene context with it, and the ids it issued mean nothing to the
|
|
90
|
+
* one that replaces it, so a caller holding a registration from another context forgets it rather
|
|
91
|
+
* than handing it back here.
|
|
92
|
+
*
|
|
93
|
+
* @param {ClipRegistration} registration
|
|
94
|
+
*/
|
|
95
|
+
export function unregister_clips(registration) {
|
|
96
|
+
assert.defined(registration, 'registration');
|
|
97
|
+
assert.defined(registration.context, 'registration.context');
|
|
98
|
+
|
|
99
|
+
const manager = registration.context.animation_manager;
|
|
100
|
+
|
|
101
|
+
const ids = registration.ids;
|
|
102
|
+
|
|
103
|
+
for (let i = 0; i < ids.length; i++) {
|
|
104
|
+
const id = ids[i];
|
|
105
|
+
|
|
106
|
+
if (id === CLIP_NOT_REGISTERED) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
manager.unregister_clip(id);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
ids.fill(CLIP_NOT_REGISTERED);
|
|
114
|
+
}
|