/**
 * Convex fast path for a triangulated {@link MeshShape3D}: if the whole mesh is
 * convex, represent it as a single coplanar-merged convex piece so it collides
 * via one GJK + EPA + face-clip manifold (O(support queries)) instead of being
 * greedily decomposed into many small SAT pieces.
 *
 * Why this matters: the greedy convex decomposition fragments even a convex mesh
 * (a partial union of tets is generally NOT convex, so the order-dependent grow
 * can't reconstruct the single convex region — a curved convex surface splits
 * into dozens of pieces). Detecting global convexity and emitting ONE piece
 * collapses that to a single collider, the path to large convex meshes.
 *
 * The piece is built by {@link build_piece} from the mesh's whole boundary, so
 * its faces are coplanar-MERGED polygons (a box → 6 quads, not 12 triangles) —
 * essential for the clipper to produce a full face-on-face patch rather than
 * triangle slivers. A `support()` is attached (linear scan over the piece's
 * localised surface vertices, so it stays O(surface), not O(all tets)).
 *
 * Cached on the (immutable) shape as `__convex_hull`: the piece if convex, or
 * `null` if concave. Returned verbatim on subsequent calls.
 *
 * @author Alex Goldring
 * @copyright Company Named Limited (c) 2026
 */
/**
 * @param {{tet_mesh, tet_positions, compute_bounding_box}} meshShape
 * @returns {{vertices:Float32Array, face_offsets:Uint32Array, face_loops:Uint32Array, aabb:Float64Array, support:Function}|null}
 *   a single coplanar-merged convex piece (with support) if the mesh is convex, else null
 */
export function get_mesh_convex_hull(meshShape: {
    tet_mesh;
    tet_positions;
    compute_bounding_box;
}): {
    vertices: Float32Array;
    face_offsets: Uint32Array;
    face_loops: Uint32Array;
    aabb: Float64Array;
    support: Function;
} | null;
//# sourceMappingURL=mesh_convex_hull.d.ts.map