/**
 * Iterate every awake body, query both BVHs from each of its attached
 * collider leaves, dedupe via the {@link ManifoldStore}, optionally gate
 * each candidate through a user-supplied filter, and append each surviving
 * body-pair to `pair_list_out`.
 *
 * Compound-body aware: a body with multiple colliders has multiple BVH
 * leaves (one per collider). Each leaf's AABB query may turn up the same
 * other-body multiple times (across the multiple leaves on either side)
 * but the per-slot touched flag collapses those into one entry in the
 * canonical `(min, max)` pair list — narrowphase then resolves the
 * collider-cross-product internally.
 *
 * Determinism: pair encounter order is fully determined by the awake-list
 * order × per-body collider-list order × BVH leaf traversal order. All
 * three are deterministic functions of the link/unlink sequence and the
 * BVH state, so two worlds with the same scene history produce identical
 * pair lists.
 *
 * @param {BodyStorage} storage
 * @param {BVH} dynamic_bvh
 * @param {BVH} static_bvh
 * @param {ManifoldStore} manifolds
 * @param {Array<Array<{collider: Collider, transform: Transform, entity: number, bvhNode: number}>>} body_collider_lists
 * @param {PairList} pair_list_out cleared and filled
 * @param {((idA: number, idB: number) => boolean) | null} pair_filter optional
 *        gate. Returning `false` rejects the pair entirely — no manifold
 *        slot, no narrowphase, no contact events. Existing cached
 *        manifolds for a rejected pair time out naturally via the
 *        manifold-store grace counter.
 * @param {*} [pair_filter_this_arg]
 */
export function generate_pairs(storage: BodyStorage, dynamic_bvh: BVH, static_bvh: BVH, manifolds: ManifoldStore, body_collider_lists: Array<Array<{
    collider: Collider;
    transform: Transform;
    entity: number;
    bvhNode: number;
}>>, pair_list_out: PairList, pair_filter?: (idA: number, idB: number) => boolean, pair_filter_this_arg?: any): void;
//# sourceMappingURL=generate_pairs.d.ts.map