@woosh/meep-engine 3.47.0 → 3.49.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/particles/effect/ParticleReferenceSimulation.d.ts +1 -2
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +2 -4
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1 -1
- package/package.json +1 -1
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +27 -11
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +11 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +2 -2
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +7 -7
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +8 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +11 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +26 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +91 -0
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -2
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +8 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts +84 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMedia.js +139 -5
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +6 -2
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +29 -4
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts +10 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.js +38 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem.js +46 -3
- package/src/engine/network/NetworkSession.d.ts +16 -5
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +104 -7
- package/src/engine/network/README.md +27 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +40 -18
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +180 -190
- package/src/engine/network/replication/Replicator.d.ts +15 -4
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +50 -16
- package/src/engine/network/state/RecordArrivalRing.d.ts +57 -0
- package/src/engine/network/state/RecordArrivalRing.d.ts.map +1 -0
- package/src/engine/network/state/RecordArrivalRing.js +144 -0
- package/src/engine/physics/cloth/MEASUREMENTS.md +354 -0
- package/src/engine/physics/cloth/PLAN.md +85 -5
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +0 -12
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +0 -13
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +2 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +7 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +4 -15
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +2 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +6 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +20 -10
- package/src/engine/physics/cloth/playground/collide.html +5 -3
- package/src/engine/physics/cloth/playground/collide_main.js +14 -13
- package/src/engine/physics/cloth/solver/ClothState.d.ts +30 -2
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +62 -4
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +11 -3
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +52 -11
- package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts +42 -0
- package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_self_radius.js +64 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +99 -24
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +102 -25
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +5 -1
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +13 -3
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +0 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -14
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +23 -4
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +36 -8
- 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 +4 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +15 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +21 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts +20 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/ComputePipelineManager.js +80 -6
- package/src/shade/device/pipeline/PipelineEnquiry.d.ts +52 -0
- package/src/shade/device/pipeline/PipelineEnquiry.d.ts.map +1 -0
- package/src/shade/device/pipeline/PipelineEnquiry.js +63 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts +21 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/RenderPipelineManager.js +84 -4
- package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts +137 -0
- package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/ContactShadowLab.js +654 -0
- package/src/shade/playground/contact_shadows/README.md +126 -0
- package/src/shade/playground/contact_shadows/index.html +191 -0
- package/src/shade/playground/contact_shadows/main.d.ts +2 -0
- package/src/shade/playground/contact_shadows/main.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/main.js +888 -0
- package/src/shade/playground/contact_shadows/scenes.d.ts +48 -0
- package/src/shade/playground/contact_shadows/scenes.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/scenes.js +620 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts +36 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +245 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts +15 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +120 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts +55 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.js +216 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts +20 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.js +114 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts +11 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +90 -0
- package/src/shade/playground/contact_shadows/textures.d.ts +16 -0
- package/src/shade/playground/contact_shadows/textures.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/textures.js +123 -0
- package/src/shade/playground/particle_ecs/README.md +1 -1
- package/src/shade/playground/particle_ecs/effects/flame.json +1932 -1881
- package/src/shade/playground/particle_ecs/effects/smoke.json +99 -1
- package/src/shade/playground/particle_ecs/effects/soot.json +152 -145
- package/src/shade/playground/tonemap_sdr/README.md +90 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts +105 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.js +380 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts +32 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js +104 -0
- package/src/shade/playground/tonemap_sdr/index.html +90 -0
- package/src/shade/playground/tonemap_sdr/main.d.ts +2 -0
- package/src/shade/playground/tonemap_sdr/main.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/main.js +306 -0
- package/src/shade/playground/tonemap_sdr/scenes.d.ts +26 -0
- package/src/shade/playground/tonemap_sdr/scenes.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/scenes.js +404 -0
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +85 -4
- package/src/shade/playground/water_refraction/README.md +26 -18
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts +35 -3
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +208 -12
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +14 -0
- package/src/shade/renderer/ShadeToneMappingMode.d.ts.map +1 -0
- package/src/shade/renderer/ShadeToneMappingMode.js +30 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +9 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +14 -0
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -3
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +7 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +12 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts +8 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +12 -0
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +19 -8
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +4 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +4 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +4 -0
- package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_deferred_main.js +3 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts +6 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +13 -3
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts +9 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.js +63 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts +10 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.js +87 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts +6 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.js +23 -5
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts +9 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.js +68 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts +10 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.js +73 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +58 -9
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +35 -25
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +97 -196
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +121 -129
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +3 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +4 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.js +4 -0
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +4 -0
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +131 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +45 -38
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +2 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +81 -79
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +2 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +5 -3
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts +21 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.js +42 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.js +44 -0
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +23 -5
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +139 -23
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +179 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +7 -16
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +3 -4
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +6 -23
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +11 -0
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +14 -3
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.js +13 -3
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +10 -0
- 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 +14 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.js +52 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts +32 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +10 -0
- 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 +20 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +10 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +294 -281
- package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +18 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts +8 -0
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +234 -218
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts +7 -0
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +13 -0
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts +7 -0
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.js +16 -2
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +10 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +13 -0
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +3 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +16 -4
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +38 -8
- package/src/shade/renderer/particles/DESIGN.md +49 -7
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +453 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +5 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +13 -5
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -2
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +12 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +60 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +156 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +2 -2
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +6 -4
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +7 -6
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +91 -58
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +10 -0
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +5 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +6 -0
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts +7 -0
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +18 -0
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +1 -0
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +11 -0
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +16 -0
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +10 -0
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +16 -0
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +32 -10
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -0
- package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +6 -3
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +12 -0
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +15 -0
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -0
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +13 -0
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +31 -3
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +79 -4
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +17 -0
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +35 -4
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts +7 -0
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +182 -169
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +20 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +18 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +20 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts +7 -0
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +187 -170
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +19 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +13 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +25 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts +10 -0
- 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 +20 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +12 -4
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +4 -3
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +4 -3
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +11 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -3
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +15 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +35 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +14 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +32 -4
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +17 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +34 -4
- package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts +5 -3
- package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/chunk_restir_resolve.js +8 -3
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +1 -0
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +5 -1
- package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
- package/src/shade/renderer/restir/reservoir/shader.js +7 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +7 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +13 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +10 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +19 -0
- package/src/shade/renderer/scene/SceneManager.d.ts +9 -0
- package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
- package/src/shade/renderer/scene/SceneManager.js +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.js +17 -0
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +18 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +12 -0
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +53 -0
- package/src/shade/renderer/shader/ImageShader.d.ts +27 -8
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +70 -1
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +21 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +71 -1
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.js +45 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_screen_coordinate_to_view.js +3 -3
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -62
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +318 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +237 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts +14 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js +28 -15
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +128 -110
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js +33 -0
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts +4 -0
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js +12 -1
- package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js +7 -0
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +108 -0
- package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js +23 -4
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.js +56 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js +2 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.js +319 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +33 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.js +140 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts +74 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.js +166 -0
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +680 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +86 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.js +178 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +67 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.js +205 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts +14 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.js +13 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts +65 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.js +252 -0
- package/src/shade/renderer/shadow/contact/FINDINGS.md +413 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.js +105 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +39 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.js +92 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +128 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts +52 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.js +358 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts +10 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.js +12 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts +13 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.js +14 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +14 -8
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +20 -86
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts +14 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.js +79 -0
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +12 -12
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +153 -151
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.js +48 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts +10 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
- package/src/shade/renderer/texture/GPUTextureContext.js +24 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +219 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +671 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +26 -2
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +108 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +5 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +6 -0
- package/src/shade/renderer/volumetrics/NOTES.md +50 -0
- package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js +30 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +51 -13
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +98 -13
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +9 -0
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/SceneVolumetrics.js +78 -68
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +326 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +7 -4
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +21 -9
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts +19 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.js +53 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +12 -3
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +85 -48
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +4 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +4 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +4 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +21 -1
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts +98 -0
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js +115 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts +9 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.js +24 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts +27 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.js +91 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts +35 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.js +92 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts +10 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.js +121 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -3
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +311 -290
- package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.js +28 -49
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +3 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +24 -18
- package/src/shade/renderer/water/chunk_water_transport.d.ts +0 -1
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +0 -17
- package/src/shade/renderer/water/shader_water.d.ts +4 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +27 -16
- package/src/shade/renderer/water/shader_water_avboit.d.ts +0 -4
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +0 -63
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +43 -9
- package/src/engine/network/transport/Channel.d.ts +0 -85
- package/src/engine/network/transport/Channel.d.ts.map +0 -1
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts +0 -155
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +0 -105
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts +0 -103
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/fragment_send.d.ts +0 -61
- package/src/engine/network/transport/fragments/fragment_send.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/packet_size.d.ts +0 -99
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts +0 -6
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.js +0 -16
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.js +0 -46
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts +0 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.js +0 -127
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.js +0 -39
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
2
|
import { BinaryBuffer } from "../../../core/binary/BinaryBuffer.js";
|
|
3
3
|
import { binarySearchHighIndex } from "../../../core/collection/array/binarySearchHighIndex.js";
|
|
4
|
-
import { fastArrayEquals } from "../../../core/collection/array/fastArrayEquals.js";
|
|
5
4
|
import Signal from "../../../core/events/signal/Signal.js";
|
|
6
5
|
import { number_compare_ascending } from "../../../core/primitives/numbers/number_compare_ascending.js";
|
|
7
6
|
import { NetworkIdentity } from "../ecs/components/NetworkIdentity.js";
|
|
@@ -11,6 +10,7 @@ import { AlwaysRelevantScope } from "../replication/ScopeFilter.js";
|
|
|
11
10
|
import { ActionRecordCursor } from "../sim/ActionRecordCursor.js";
|
|
12
11
|
import { RewindEngine } from "../sim/RewindEngine.js";
|
|
13
12
|
import { SENDER_DERIVED, SENDER_LOCAL, SENDER_RECORDED } from "../sim/SimActionExecutor.js";
|
|
13
|
+
import { RecordArrivalRing } from "../state/RecordArrivalRing.js";
|
|
14
14
|
import { NetworkPeer } from "./NetworkPeer.js";
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -43,10 +43,12 @@ export const LateInput = Object.freeze({
|
|
|
43
43
|
* 1. Inbound action packets do NOT execute on arrival. Instead, a deferral
|
|
44
44
|
* hook on the {@link Replicator} drops them into a per-tick pending log
|
|
45
45
|
* tagged with `(client_frame, sender_id, type_id, payload_bytes)` —
|
|
46
|
-
* unless the
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
46
|
+
* unless the record has arrived before. A record is known by
|
|
47
|
+
* `(sender, frame, ordinal)`, never by its bytes; a per-sender
|
|
48
|
+
* {@link RecordArrivalRing} answers that. The action stream re-sends
|
|
49
|
+
* every unconfirmed frame each tick, so most arrivals at any real latency
|
|
50
|
+
* are copies of applied records; those are dropped where they arrive, and
|
|
51
|
+
* pending holds only input that is new.
|
|
50
52
|
* 2. Once per server tick, `tick(current_frame)` consumes the pending log:
|
|
51
53
|
* - Rejects entries older than the action_log's rewindable window.
|
|
52
54
|
* - Determines `replay_start`: the oldest pending frame, which by the
|
|
@@ -123,7 +125,7 @@ export class ServerAuthoritativeServer {
|
|
|
123
125
|
#carried_scratch = [];
|
|
124
126
|
#sort_scratch = /** @type {Array<{sender_id:number, type_id:number, payload:Uint8Array}>} */ ([]);
|
|
125
127
|
#payload_buf;
|
|
126
|
-
// Walks a frame's records, for the history read
|
|
128
|
+
// Walks a frame's records, for the history read.
|
|
127
129
|
#cursor = new ActionRecordCursor();
|
|
128
130
|
// Locally-authored actions waiting for the next fresh frame. Parallel
|
|
129
131
|
// arrays, serialized at enqueue time so the caller's instance is not
|
|
@@ -133,8 +135,8 @@ export class ServerAuthoritativeServer {
|
|
|
133
135
|
#local_payloads = /** @type {Uint8Array[]} */ ([]);
|
|
134
136
|
#local_buf;
|
|
135
137
|
/**
|
|
136
|
-
* Count of inbound pending entries dropped
|
|
137
|
-
*
|
|
138
|
+
* Count of inbound pending entries dropped: tagged past the future horizon, below the
|
|
139
|
+
* rewindable window, or over the total cap. See {@link onPendingActionDropped}.
|
|
138
140
|
* @private @type {number}
|
|
139
141
|
*/
|
|
140
142
|
#pending_dropped = 0;
|
|
@@ -144,13 +146,15 @@ export class ServerAuthoritativeServer {
|
|
|
144
146
|
*/
|
|
145
147
|
#open_sim_frame = -1;
|
|
146
148
|
/**
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
149
|
+
* Per sender, which records of its frames have arrived — by the frame the sender tagged and the
|
|
150
|
+
* record's ordinal in that frame, which is a record's identity on the stream. The stream re-sends
|
|
151
|
+
* every unconfirmed frame each tick, and this is how a copy is told from a new record; the bytes
|
|
152
|
+
* take no part (see {@link #pending_add}). A ring spans the oldest rewindable frame to the future
|
|
153
|
+
* horizon; what is tagged outside that is dropped before it is marked. Never cleared for a peer:
|
|
154
|
+
* one that drops and resumes re-sends what was not acknowledged, some of which has been applied.
|
|
155
|
+
* @type {Map<number, RecordArrivalRing>}
|
|
152
156
|
*/
|
|
153
|
-
#
|
|
157
|
+
#arrivals = new Map();
|
|
154
158
|
|
|
155
159
|
/**
|
|
156
160
|
* Most recently simulated frame. `-1` during warmup
|
|
@@ -207,6 +211,7 @@ export class ServerAuthoritativeServer {
|
|
|
207
211
|
simulation_delay_ticks = 0,
|
|
208
212
|
max_pending_future_lead = 256,
|
|
209
213
|
max_pending_total = 4096,
|
|
214
|
+
max_records_per_frame = 4096,
|
|
210
215
|
identity_class = NetworkIdentity,
|
|
211
216
|
server_peer_id = -1,
|
|
212
217
|
max_packets_per_tick,
|
|
@@ -221,6 +226,7 @@ export class ServerAuthoritativeServer {
|
|
|
221
226
|
assert.isNonNegativeInteger(simulation_delay_ticks, 'simulation_delay_ticks');
|
|
222
227
|
assert.isPositiveInteger(max_pending_future_lead, 'max_pending_future_lead');
|
|
223
228
|
assert.isPositiveInteger(max_pending_total, 'max_pending_total');
|
|
229
|
+
assert.isPositiveInteger(max_records_per_frame, 'max_records_per_frame');
|
|
224
230
|
if (late_input !== LateInput.Rollback && late_input !== LateInput.Apply) {
|
|
225
231
|
throw new Error(`ServerAuthoritativeServer: late_input must be one of ${Object.values(LateInput).join(', ')}, got '${late_input}'`);
|
|
226
232
|
}
|
|
@@ -322,16 +328,27 @@ export class ServerAuthoritativeServer {
|
|
|
322
328
|
|
|
323
329
|
/**
|
|
324
330
|
* Absolute backstop on the number of buffered pending entries. Even
|
|
325
|
-
* within the future window a peer can
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
* counts.
|
|
331
|
+
* within the future window a peer can claim as many ordinals per frame
|
|
332
|
+
* as it likes and pile up distinct entries; this caps total memory
|
|
333
|
+
* regardless. Legitimate pending depth is tiny (≈ delay × actions/frame
|
|
334
|
+
* × peers), so this only ever trips under abuse. Raise it for very high
|
|
335
|
+
* concurrent-player counts.
|
|
331
336
|
* @type {number}
|
|
332
337
|
*/
|
|
333
338
|
this.max_pending_total = max_pending_total;
|
|
334
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Upper bound on a record's ordinal — its index in the sender's frame.
|
|
342
|
+
* The ordinal is an attacker-controlled varint and the arrival ring
|
|
343
|
+
* sizes its per-frame bitsets to the ordinals it is asked to mark, so
|
|
344
|
+
* without a ceiling one record claiming to be its frame's 2^30th is a
|
|
345
|
+
* request for gigabytes. A frame is one step of a sender's input;
|
|
346
|
+
* thousands of records in one is not input. Dropped records are
|
|
347
|
+
* reported `'ordinal'` on {@link onPendingActionDropped}.
|
|
348
|
+
* @type {number}
|
|
349
|
+
*/
|
|
350
|
+
this.max_records_per_frame = max_records_per_frame;
|
|
351
|
+
|
|
335
352
|
/**
|
|
336
353
|
* Running watermark per peer: highest client-tagged frame received
|
|
337
354
|
* from each peer. {@link buffer_depth_for_peer} reads this minus
|
|
@@ -358,10 +375,11 @@ export class ServerAuthoritativeServer {
|
|
|
358
375
|
|
|
359
376
|
// Switch the Replicator to deferred-execute mode: incoming actions
|
|
360
377
|
// accumulate in pending until tick() drains them.
|
|
361
|
-
this.peer.replicator.on_pending_action = (peer_id, frame_number, type_id, buf, off, len) => {
|
|
378
|
+
this.peer.replicator.on_pending_action = (peer_id, frame_number, type_id, buf, off, len, ordinal) => {
|
|
379
|
+
assert.isNonNegativeInteger(ordinal, 'ordinal');
|
|
362
380
|
const payload = new Uint8Array(len);
|
|
363
381
|
payload.set(buf.raw_bytes.subarray(off, off + len));
|
|
364
|
-
this.#pending_add(frame_number, peer_id, type_id, payload);
|
|
382
|
+
this.#pending_add(frame_number, ordinal, peer_id, type_id, payload);
|
|
365
383
|
if (frame_number > this.last_client_frame_processed) {
|
|
366
384
|
this.last_client_frame_processed = frame_number;
|
|
367
385
|
}
|
|
@@ -442,11 +460,21 @@ export class ServerAuthoritativeServer {
|
|
|
442
460
|
this.onRewind = new Signal();
|
|
443
461
|
|
|
444
462
|
/**
|
|
445
|
-
* Fired when an inbound pending action is dropped
|
|
446
|
-
*
|
|
447
|
-
*
|
|
448
|
-
* `'
|
|
449
|
-
*
|
|
463
|
+
* Fired when an inbound pending action is dropped. Args:
|
|
464
|
+
* `(sender_id, frame_number, reason)` where `reason` is `'future'` (tagged
|
|
465
|
+
* past the future horizon), `'capacity'` (the total cap: a flood),
|
|
466
|
+
* `'ordinal'` (a record claiming an index in its frame past
|
|
467
|
+
* `max_records_per_frame`: not input) or `'window'` (tagged for a frame
|
|
468
|
+
* older than the log can rewind to, so it can never be applied where it
|
|
469
|
+
* was tagged — a client that stalled, or one far behind the host's
|
|
470
|
+
* time). A copy of a record that was accepted is recognised before any
|
|
471
|
+
* of these and never reported, however old its frame has become. A
|
|
472
|
+
* record that was never accepted is reported once per copy that
|
|
473
|
+
* arrives: a stalled client's frame is re-sent until its
|
|
474
|
+
* acknowledgement round-trips, so one lost input shows as a few of
|
|
475
|
+
* these. Observable so an abusive peer can be logged / kicked, and so a
|
|
476
|
+
* game can see input that vanished; until 2026-10-15 the `'window'`
|
|
477
|
+
* case was silent. The dropped action is simply not buffered.
|
|
450
478
|
* @type {Signal}
|
|
451
479
|
*/
|
|
452
480
|
this.onPendingActionDropped = new Signal();
|
|
@@ -616,11 +644,6 @@ export class ServerAuthoritativeServer {
|
|
|
616
644
|
if (this.#pending_frames.length > 0 && this.#pending_referenced_frames[0] < window_oldest) {
|
|
617
645
|
this.#pending_trim_to_window(window_oldest);
|
|
618
646
|
}
|
|
619
|
-
if (this.#folded.size > 0) {
|
|
620
|
-
for (const frame of this.#folded.keys()) {
|
|
621
|
-
if (frame < window_oldest) this.#folded.delete(frame);
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
647
|
|
|
625
648
|
// 1a. Late input folded into this frame instead of rolled back to its own.
|
|
626
649
|
if (this.late_input === LateInput.Apply) {
|
|
@@ -723,47 +746,6 @@ export class ServerAuthoritativeServer {
|
|
|
723
746
|
return max - this.current_sim_frame;
|
|
724
747
|
}
|
|
725
748
|
|
|
726
|
-
/**
|
|
727
|
-
* Walk `action_log[frame_number]` looking for a record identical to
|
|
728
|
-
* `(sender_id, type_id, payload)`. Compares the payload in place against
|
|
729
|
-
* the log's own bytes — no copy, unlike {@link __read_historical}, because
|
|
730
|
-
* this runs once per arriving action.
|
|
731
|
-
*
|
|
732
|
-
* The key can only recognise records the log actually holds. An action
|
|
733
|
-
* the executor REJECTED (owner authorization) writes nothing, so each of
|
|
734
|
-
* its retransmissions still reads as new input and still costs a rewind —
|
|
735
|
-
* self-limiting, because the sender stops re-sending the frame once it is
|
|
736
|
-
* acked.
|
|
737
|
-
*
|
|
738
|
-
* Caller must have checked `action_log.has_frame(frame_number)`, and that
|
|
739
|
-
* the frame is closed.
|
|
740
|
-
*
|
|
741
|
-
* @param {number} frame_number
|
|
742
|
-
* @param {number} sender_id
|
|
743
|
-
* @param {number} type_id
|
|
744
|
-
* @param {Uint8Array} payload
|
|
745
|
-
* @returns {boolean}
|
|
746
|
-
* @private
|
|
747
|
-
*/
|
|
748
|
-
#log_holds_record(frame_number, sender_id, type_id, payload) {
|
|
749
|
-
const cursor = this.#cursor;
|
|
750
|
-
cursor.open(this.action_log, frame_number);
|
|
751
|
-
const bytes = cursor.buffer.raw_bytes;
|
|
752
|
-
while (cursor.next()) {
|
|
753
|
-
if (cursor.action_type_id !== type_id) continue;
|
|
754
|
-
if (cursor.sender_id !== sender_id) continue;
|
|
755
|
-
if (cursor.payload_len !== payload.length) continue;
|
|
756
|
-
|
|
757
|
-
const payload_start = cursor.payload_start;
|
|
758
|
-
let same = true;
|
|
759
|
-
for (let i = 0; i < payload.length; i++) {
|
|
760
|
-
if (bytes[payload_start + i] !== payload[i]) { same = false; break; }
|
|
761
|
-
}
|
|
762
|
-
if (same) return true;
|
|
763
|
-
}
|
|
764
|
-
return false;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
749
|
/**
|
|
768
750
|
* Execute frame `f` whole: {@link #open_frame} then {@link #close_frame}.
|
|
769
751
|
*
|
|
@@ -798,32 +780,17 @@ export class ServerAuthoritativeServer {
|
|
|
798
780
|
this.#sort_scratch.push({ sender_id: h.sender_id, type_id: h.type_id, payload: h.payload });
|
|
799
781
|
}
|
|
800
782
|
|
|
801
|
-
// Append the pending actions for this frame.
|
|
802
|
-
//
|
|
803
|
-
//
|
|
804
|
-
//
|
|
805
|
-
// that reached this point would merge with the historical record and
|
|
806
|
-
// execute the action twice, diverging the world, and the cost of the
|
|
807
|
-
// check is a scan of a small frame's copied history.
|
|
808
|
-
//
|
|
809
|
-
// Dedup key: (sender_id, type_id, payload bytes). Two actions are
|
|
810
|
-
// "the same arrival" if all three match. (Same sender_id and
|
|
811
|
-
// type_id but different payload = legitimately distinct actions
|
|
812
|
-
// for the same frame, e.g. fire + move in the same tick.)
|
|
783
|
+
// Append the pending actions for this frame. Pending holds only records that had not
|
|
784
|
+
// arrived before (see #pending_add): a copy of what the log already holds is recognised on
|
|
785
|
+
// arrival by its identity and never gets here, so nothing in it duplicates history. Nothing
|
|
786
|
+
// is compared by bytes — two records alike in every byte are two records (a held key).
|
|
813
787
|
for (let i = 0; i < this.#pending_frames.length; i++) {
|
|
814
788
|
if (this.#pending_frames[i] !== f) continue;
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
const h = this.#historical_scratch[j];
|
|
821
|
-
if (h.sender_id !== p_sender) continue;
|
|
822
|
-
if (h.type_id !== p_type) continue;
|
|
823
|
-
if (fastArrayEquals(h.payload, p_payload)) { is_dup = true; break; }
|
|
824
|
-
}
|
|
825
|
-
if (is_dup) continue;
|
|
826
|
-
this.#sort_scratch.push({ sender_id: p_sender, type_id: p_type, payload: p_payload });
|
|
789
|
+
this.#sort_scratch.push({
|
|
790
|
+
sender_id: this.#pending_senders[i],
|
|
791
|
+
type_id: this.#pending_type_ids[i],
|
|
792
|
+
payload: this.#pending_payloads[i],
|
|
793
|
+
});
|
|
827
794
|
}
|
|
828
795
|
|
|
829
796
|
// Locally-authored actions join the merge as input, and only on the
|
|
@@ -982,80 +949,88 @@ export class ServerAuthoritativeServer {
|
|
|
982
949
|
}
|
|
983
950
|
|
|
984
951
|
/**
|
|
985
|
-
* Number of inbound pending actions dropped
|
|
986
|
-
*
|
|
952
|
+
* Number of inbound pending actions dropped so far — tagged past the future horizon, below the
|
|
953
|
+
* rewindable window, or over the total cap. See {@link onPendingActionDropped}.
|
|
987
954
|
* @returns {number}
|
|
988
955
|
*/
|
|
989
956
|
pending_dropped_count() {
|
|
990
957
|
return this.#pending_dropped;
|
|
991
958
|
}
|
|
992
959
|
|
|
993
|
-
/**
|
|
994
|
-
|
|
960
|
+
/**
|
|
961
|
+
* Take a record the stream delivered into pending, or drop it and say so: tagged past the
|
|
962
|
+
* future horizon (`'future'`), below the oldest frame the log can still rewind to (`'window'`),
|
|
963
|
+
* claiming an ordinal past `max_records_per_frame` (`'ordinal'`), or over the total cap
|
|
964
|
+
* (`'capacity'`). A copy of a record that has arrived already is not input
|
|
965
|
+
* and is dropped without a word: `Replicator.pack_for_peer` packs every frame in
|
|
966
|
+
* [last_acked + 1, current_frame] each tick, so a record arrives once per tick until its ack
|
|
967
|
+
* round-trips, and copies are the common case.
|
|
968
|
+
*
|
|
969
|
+
* A record is known by the frame its sender tagged it for and its ordinal in that frame — never
|
|
970
|
+
* by its bytes. Two inputs with the same payload at different ordinals, or in different frames,
|
|
971
|
+
* are two inputs; a held key is the same payload every frame. Until 2026-10-15 copies were
|
|
972
|
+
* recognised by `(sender, type, payload)` against pending, against the log's records at the
|
|
973
|
+
* frame, and against a side-table of late input folded elsewhere, and a held key whose input
|
|
974
|
+
* arrived late and was folded into one frame lost 44% of it (measured; the spec is
|
|
975
|
+
* `NetworkSession.late_input.spec.js`). The arrival ring answers in constant time, and what it
|
|
976
|
+
* admits is what pending holds, so `tick` takes the oldest pending frame as its replay window
|
|
977
|
+
* without a second look and `#open_frame` merges pending into history without comparing.
|
|
978
|
+
*
|
|
979
|
+
* @param {number} frame_number
|
|
980
|
+
* @param {number} ordinal the record's index in the sender's frame, from the wire
|
|
981
|
+
* @param {number} sender_id
|
|
982
|
+
* @param {number} type_id
|
|
983
|
+
* @param {Uint8Array} payload
|
|
984
|
+
* @private
|
|
985
|
+
*/
|
|
986
|
+
#pending_add(frame_number, ordinal, sender_id, type_id, payload) {
|
|
987
|
+
const ring = this.#arrival_ring_for(sender_id);
|
|
988
|
+
|
|
989
|
+
// A copy first — already pending, already in the log, or already folded into a later
|
|
990
|
+
// frame. Before the bounds, because a record applied at the edge of the window is re-sent
|
|
991
|
+
// until its acknowledgement round-trips, and by then its frame is below the window: those
|
|
992
|
+
// copies are the stream's redundancy, not lost input, and are not reported. (`has` never
|
|
993
|
+
// grows the ring, whatever the ordinal.)
|
|
994
|
+
if (ring.has(frame_number, ordinal)) return;
|
|
995
|
+
|
|
995
996
|
// Reject far-future frame numbers. `frame_number` is an attacker-
|
|
996
|
-
// controlled varint;
|
|
997
|
-
//
|
|
998
|
-
//
|
|
999
|
-
//
|
|
1000
|
-
//
|
|
1001
|
-
|
|
997
|
+
// controlled varint; without this ceiling a peer can pin unbounded
|
|
998
|
+
// memory by tagging actions near 2^32. A well-behaved client tags at
|
|
999
|
+
// most ~simulation_delay_ticks ahead plus jitter lead. Real runtime
|
|
1000
|
+
// check — asserts strip in prod. The horizon is also no further than
|
|
1001
|
+
// this sender's ring tells frames apart: the ring was sized from the
|
|
1002
|
+
// lead at the sender's first record, and a lead raised since must not
|
|
1003
|
+
// put a record in a live frame's slot.
|
|
1004
|
+
const future_horizon = Math.min(
|
|
1005
|
+
this.current_sim_frame + this.simulation_delay_ticks + this.max_pending_future_lead,
|
|
1006
|
+
this.#window_oldest() + ring.frame_span - 1,
|
|
1007
|
+
);
|
|
1002
1008
|
if (frame_number > future_horizon) {
|
|
1003
|
-
this.#
|
|
1004
|
-
this.onPendingActionDropped.send3(sender_id, frame_number, 'future');
|
|
1009
|
+
this.#drop_pending(sender_id, frame_number, 'future');
|
|
1005
1010
|
return;
|
|
1006
1011
|
}
|
|
1007
|
-
//
|
|
1008
|
-
//
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
+
// And the past: tagged below the oldest frame the log can rewind to, a record can never be
|
|
1013
|
+
// applied where it was tagged — a late-applying host folds only what is inside the window
|
|
1014
|
+
// (see begin_tick). Dropped here rather than by the next tick's trim, so that it is never
|
|
1015
|
+
// marked: the arrival ring tells frames apart only from the window to the horizon.
|
|
1016
|
+
if (frame_number < this.#window_oldest()) {
|
|
1017
|
+
this.#drop_pending(sender_id, frame_number, 'window');
|
|
1012
1018
|
return;
|
|
1013
1019
|
}
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
// an action arrives once per tick until its ack round-trips, and
|
|
1018
|
-
// several copies can land in the same server tick when the round trip
|
|
1019
|
-
// exceeds the tick period. A copy is recognised by its whole identity,
|
|
1020
|
-
// (sender_id, type_id, payload bytes) — distinct payloads from the
|
|
1021
|
-
// same sender at the same frame are legitimately different actions
|
|
1022
|
-
// (move + fire) and both flow through.
|
|
1023
|
-
//
|
|
1024
|
-
// First against everything already pending for the frame, which
|
|
1025
|
-
// catches the copies that arrive before the frame is simulated.
|
|
1026
|
-
for (let i = 0; i < this.#pending_frames.length; i++) {
|
|
1027
|
-
if (this.#pending_frames[i] !== frame_number) continue;
|
|
1028
|
-
if (this.#pending_senders[i] !== sender_id) continue;
|
|
1029
|
-
if (this.#pending_type_ids[i] !== type_id) continue;
|
|
1030
|
-
if (fastArrayEquals(this.#pending_payloads[i], payload)) return; // duplicate already in pending; drop
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
|
-
// Then against the action log, which catches the copies that arrive
|
|
1034
|
-
// after it. A record the log already holds is not input — applying it
|
|
1035
|
-
// again would apply the action twice, and rewinding for it would
|
|
1036
|
-
// replay the world into the state it is already in — so it is dropped
|
|
1037
|
-
// here, and pending holds only input the log does not. That is what
|
|
1038
|
-
// lets `tick` take the oldest pending frame as its replay window
|
|
1039
|
-
// without a second look.
|
|
1040
|
-
//
|
|
1041
|
-
// Frames are only open inside `tick`, and packets arrive between
|
|
1042
|
-
// ticks, so an open frame here means a call pattern this orchestrator
|
|
1043
|
-
// does not support (a packet delivered from inside a local-sim
|
|
1044
|
-
// handler). The check is skipped rather than reading an open frame's
|
|
1045
|
-
// stale length; the copy then costs one spurious rewind, and
|
|
1046
|
-
// `__replay_frame`'s own dedup keeps it from applying twice.
|
|
1047
|
-
if (this.action_log.has_frame(frame_number)
|
|
1048
|
-
&& !this.action_log.has_open_frame()
|
|
1049
|
-
&& this.#log_holds_record(frame_number, sender_id, type_id, payload)) {
|
|
1020
|
+
// And the ordinal, which sizes the arrival ring's bitsets: bounded before the ring sees it.
|
|
1021
|
+
if (ordinal >= this.max_records_per_frame) {
|
|
1022
|
+
this.#drop_pending(sender_id, frame_number, 'ordinal');
|
|
1050
1023
|
return;
|
|
1051
1024
|
}
|
|
1052
|
-
|
|
1053
|
-
//
|
|
1054
|
-
|
|
1055
|
-
|
|
1025
|
+
// Absolute backstop on buffered entries: within the window and the
|
|
1026
|
+
// ordinal bound a peer can still pile up distinct entries.
|
|
1027
|
+
if (this.#pending_frames.length >= this.max_pending_total) {
|
|
1028
|
+
this.#drop_pending(sender_id, frame_number, 'capacity');
|
|
1056
1029
|
return;
|
|
1057
1030
|
}
|
|
1058
1031
|
|
|
1032
|
+
ring.mark(frame_number, ordinal);
|
|
1033
|
+
|
|
1059
1034
|
this.#pending_frames.push(frame_number);
|
|
1060
1035
|
this.#pending_senders.push(sender_id);
|
|
1061
1036
|
this.#pending_type_ids.push(type_id);
|
|
@@ -1063,6 +1038,45 @@ export class ServerAuthoritativeServer {
|
|
|
1063
1038
|
this.#track_referenced_frame(frame_number);
|
|
1064
1039
|
}
|
|
1065
1040
|
|
|
1041
|
+
/**
|
|
1042
|
+
* The oldest frame the log can still rewind to, as of the last simulated frame.
|
|
1043
|
+
* @returns {number}
|
|
1044
|
+
* @private
|
|
1045
|
+
*/
|
|
1046
|
+
#window_oldest() {
|
|
1047
|
+
return Math.max(0, this.current_sim_frame - this.action_log.frame_capacity + 1);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
/**
|
|
1051
|
+
* @param {number} sender_id
|
|
1052
|
+
* @returns {RecordArrivalRing}
|
|
1053
|
+
* @private
|
|
1054
|
+
*/
|
|
1055
|
+
#arrival_ring_for(sender_id) {
|
|
1056
|
+
let ring = this.#arrivals.get(sender_id);
|
|
1057
|
+
if (ring === undefined) {
|
|
1058
|
+
// every frame a record can be accepted for, from the oldest rewindable to the horizon,
|
|
1059
|
+
// as the bounds stand at the sender's first record; `#pending_add` clamps the horizon
|
|
1060
|
+
// to it afterwards, so raising `max_pending_future_lead` reaches new senders only
|
|
1061
|
+
ring = new RecordArrivalRing({
|
|
1062
|
+
frame_span: this.action_log.frame_capacity + this.simulation_delay_ticks + this.max_pending_future_lead + 1,
|
|
1063
|
+
});
|
|
1064
|
+
this.#arrivals.set(sender_id, ring);
|
|
1065
|
+
}
|
|
1066
|
+
return ring;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
/**
|
|
1070
|
+
* @param {number} sender_id
|
|
1071
|
+
* @param {number} frame_number
|
|
1072
|
+
* @param {'future'|'window'|'ordinal'|'capacity'} reason
|
|
1073
|
+
* @private
|
|
1074
|
+
*/
|
|
1075
|
+
#drop_pending(sender_id, frame_number, reason) {
|
|
1076
|
+
this.#pending_dropped++;
|
|
1077
|
+
this.onPendingActionDropped.send3(sender_id, frame_number, reason);
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1066
1080
|
/**
|
|
1067
1081
|
* Insert `frame_number` into the monotonically-sorted referenced-frames
|
|
1068
1082
|
* index, leaving it untouched if already present. Single source of truth
|
|
@@ -1078,7 +1092,12 @@ export class ServerAuthoritativeServer {
|
|
|
1078
1092
|
if (arr[i] !== frame_number) arr.splice(i, 0, frame_number);
|
|
1079
1093
|
}
|
|
1080
1094
|
|
|
1081
|
-
/**
|
|
1095
|
+
/**
|
|
1096
|
+
* Drop every pending entry tagged below `window_oldest` — input that waited in pending while the
|
|
1097
|
+
* window moved past it — and report each (`'window'`).
|
|
1098
|
+
* @param {number} window_oldest
|
|
1099
|
+
* @private
|
|
1100
|
+
*/
|
|
1082
1101
|
#pending_trim_to_window(window_oldest) {
|
|
1083
1102
|
let kept = 0;
|
|
1084
1103
|
for (let i = 0; i < this.#pending_frames.length; i++) {
|
|
@@ -1088,6 +1107,8 @@ export class ServerAuthoritativeServer {
|
|
|
1088
1107
|
this.#pending_type_ids[kept] = this.#pending_type_ids[i];
|
|
1089
1108
|
this.#pending_payloads[kept] = this.#pending_payloads[i];
|
|
1090
1109
|
kept++;
|
|
1110
|
+
} else {
|
|
1111
|
+
this.#drop_pending(this.#pending_senders[i], this.#pending_frames[i], 'window');
|
|
1091
1112
|
}
|
|
1092
1113
|
}
|
|
1093
1114
|
this.#pending_frames.length = kept;
|
|
@@ -1102,7 +1123,9 @@ export class ServerAuthoritativeServer {
|
|
|
1102
1123
|
|
|
1103
1124
|
/**
|
|
1104
1125
|
* {@link LateInput.Apply}: move every pending entry tagged for a frame before `sim_frame` into
|
|
1105
|
-
* `sim_frame
|
|
1126
|
+
* `sim_frame`. Only where the record is applied moves: its identity is the frame its sender
|
|
1127
|
+
* tagged and its ordinal there, marked in the arrival ring when it came, so its copies are still
|
|
1128
|
+
* recognised, and two folded records alike in every byte are still two records.
|
|
1106
1129
|
* @param {number} sim_frame
|
|
1107
1130
|
* @private
|
|
1108
1131
|
*/
|
|
@@ -1111,20 +1134,7 @@ export class ServerAuthoritativeServer {
|
|
|
1111
1134
|
let folded_any = false;
|
|
1112
1135
|
|
|
1113
1136
|
for (let i = 0; i < frames.length; i++) {
|
|
1114
|
-
|
|
1115
|
-
if (frame >= sim_frame) continue;
|
|
1116
|
-
|
|
1117
|
-
let list = this.#folded.get(frame);
|
|
1118
|
-
if (list === undefined) {
|
|
1119
|
-
list = [];
|
|
1120
|
-
this.#folded.set(frame, list);
|
|
1121
|
-
}
|
|
1122
|
-
list.push({
|
|
1123
|
-
sender_id: this.#pending_senders[i],
|
|
1124
|
-
type_id: this.#pending_type_ids[i],
|
|
1125
|
-
payload: this.#pending_payloads[i],
|
|
1126
|
-
});
|
|
1127
|
-
|
|
1137
|
+
if (frames[i] >= sim_frame) continue;
|
|
1128
1138
|
frames[i] = sim_frame;
|
|
1129
1139
|
folded_any = true;
|
|
1130
1140
|
}
|
|
@@ -1137,26 +1147,6 @@ export class ServerAuthoritativeServer {
|
|
|
1137
1147
|
}
|
|
1138
1148
|
}
|
|
1139
1149
|
|
|
1140
|
-
/**
|
|
1141
|
-
* @param {number} frame_number
|
|
1142
|
-
* @param {number} sender_id
|
|
1143
|
-
* @param {number} type_id
|
|
1144
|
-
* @param {Uint8Array} payload
|
|
1145
|
-
* @returns {boolean}
|
|
1146
|
-
* @private
|
|
1147
|
-
*/
|
|
1148
|
-
#was_folded(frame_number, sender_id, type_id, payload) {
|
|
1149
|
-
const list = this.#folded.get(frame_number);
|
|
1150
|
-
if (list === undefined) return false;
|
|
1151
|
-
for (let i = 0; i < list.length; i++) {
|
|
1152
|
-
const f = list[i];
|
|
1153
|
-
if (f.sender_id === sender_id && f.type_id === type_id && fastArrayEquals(f.payload, payload)) {
|
|
1154
|
-
return true;
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
return false;
|
|
1158
|
-
}
|
|
1159
|
-
|
|
1160
1150
|
/** @private */
|
|
1161
1151
|
#pending_clear() {
|
|
1162
1152
|
this.#pending_frames.length = 0;
|
|
@@ -21,10 +21,19 @@
|
|
|
21
21
|
* varint: frame_number
|
|
22
22
|
* varint: action_count
|
|
23
23
|
* loop action_count times:
|
|
24
|
+
* varint: ordinal (the record's index in the sender's log frame)
|
|
24
25
|
* uint8: action_type_id
|
|
25
26
|
* uint32: action_payload_len
|
|
26
27
|
* bytes: action_payload
|
|
27
28
|
* ```
|
|
29
|
+
* A record's identity on the wire is `(sender, frame_number, ordinal)`: the frame its sender tagged
|
|
30
|
+
* it for and its place among every record of that frame in the sender's log, filtered or not. The
|
|
31
|
+
* stream re-sends each unconfirmed frame every tick, and that is how a receiver tells the copies
|
|
32
|
+
* from new records — never by the payload, since two inputs alike in every byte (a held key, frame
|
|
33
|
+
* after frame) are two inputs. The ordinal is stable across re-sends because a closed frame's records
|
|
34
|
+
* are only appended to (`ActionLog.resume_frame`) or rebuilt record for record by a deterministic
|
|
35
|
+
* replay, and it survives a receiver moving the record to another frame (a late-applying host).
|
|
36
|
+
*
|
|
28
37
|
* {@link NetworkPeer} prefixes each packet of this with a slice header — the
|
|
29
38
|
* frame range the packet covers and whether it is the first of the sender's
|
|
30
39
|
* tick — which it parses itself and hands to {@link unpack_from_peer} as
|
|
@@ -99,20 +108,22 @@ export class Replicator {
|
|
|
99
108
|
* does NOT touch the action log or executor — it parses the packet
|
|
100
109
|
* and calls this function once per action with:
|
|
101
110
|
*
|
|
102
|
-
* `(peer_id, frame_number, action_type_id, in_buffer, payload_offset, payload_len)`
|
|
111
|
+
* `(peer_id, frame_number, action_type_id, in_buffer, payload_offset, payload_len, ordinal)`
|
|
103
112
|
*
|
|
104
113
|
* The buffer is shared scratch; consumers must copy the payload bytes
|
|
105
114
|
* if they need them to outlive the call. The orchestrator is then
|
|
106
115
|
* responsible for executing the buffered actions in whatever order
|
|
107
116
|
* the netcode model requires (e.g. rewind to oldest frame, stable-
|
|
108
|
-
* sort by sender, replay forward)
|
|
117
|
+
* sort by sender, replay forward) — and for recognising the copies the
|
|
118
|
+
* stream re-sends, by `(peer_id, frame_number, ordinal)`; this path keeps
|
|
119
|
+
* no watermark of its own.
|
|
109
120
|
*
|
|
110
121
|
* Leave null for "execute on arrival" semantics (the default and
|
|
111
122
|
* what the loopback/single-orchestrator tests rely on).
|
|
112
123
|
*
|
|
113
|
-
* @type {((peer_id: number, frame_number: number, action_type_id: number, in_buffer: BinaryBuffer, payload_offset: number, payload_len: number) => void) | null}
|
|
124
|
+
* @type {((peer_id: number, frame_number: number, action_type_id: number, in_buffer: BinaryBuffer, payload_offset: number, payload_len: number, ordinal: number) => void) | null}
|
|
114
125
|
*/
|
|
115
|
-
on_pending_action: ((peer_id: number, frame_number: number, action_type_id: number, in_buffer: BinaryBuffer, payload_offset: number, payload_len: number) => void) | null;
|
|
126
|
+
on_pending_action: ((peer_id: number, frame_number: number, action_type_id: number, in_buffer: BinaryBuffer, payload_offset: number, payload_len: number, ordinal: number) => void) | null;
|
|
116
127
|
/**
|
|
117
128
|
* @type {ActionLog}
|
|
118
129
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Replicator.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/replication/Replicator.js"],"names":[],"mappings":"AAsBA
|
|
1
|
+
{"version":3,"file":"Replicator.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/replication/Replicator.js"],"names":[],"mappings":"AAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH;IAmLI;;;;;;;;OAQG;IACH,iFARW;QACV,UAAc,YAAY;QAC1B,eAAmB,oBAAoB;QACvC,QAAY,oBAAoB;QAChC,UAAc,uBAAuB;QACrC,YAAgB,EAAE;YAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;KACpF,EA6BH;IA9ID;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,wBAHW,MAAM,GACJ;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC,CAc1F;IA2BD;;;;;;;;;;;;;OAaG;IACH,gBAFU,MAAM,CAEc;IAE9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,mBAFU,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAExJ;IAmBrB;;OAEG;IACH,sBAA4B;IAE5B;;OAEG;IACH,mCAAsC;IAEtC;;OAEG;IACH,4BAAwB;IAExB;;OAEG;IACH,iCAA4B;IAE5B;;;;OAIG;IACH,cAFU;QAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAE9C;IAGpC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,uBAVW,MAAM,eACN,MAAM,aACN,MAAM,cACN,YAAY,cACZ,MAAM,GACJ,MAAM,CA0FlB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,0BALW,MAAM,aACN,YAAY,iBACZ,MAAM,UACN;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,GAAC,IAAI,QA2EtE;IA+RD;;;;;;;OAOG;IACH,qBAFW,MAAM,QAKhB;;CA8CJ;mBA/zBkB,uCAAuC;6BAD7B,sCAAsC"}
|