import { BlockMaskBuffer } from './block-mask-buffer';
import { type GaussianColumns } from '../data-table';
/**
 * Pre-computed lookup structures for efficient voxel block queries.
 */
interface BlockLookup {
    solidSet: Set<number>;
    mixedMap: Map<number, number>;
    masks: Uint32Array;
}
/**
 * Grid parameters for block-based voxel queries.
 */
interface BlockGridParams {
    gridMinX: number;
    gridMinY: number;
    gridMinZ: number;
    blockSize: number;
    voxelResolution: number;
    numBlocksX: number;
    numBlocksY: number;
    numBlocksZ: number;
    strideY: number;
    strideZ: number;
}
/**
 * Build block lookup structures from the buffer's linear block indices.
 * The buffer's keys are already linear block indices, so this is a direct
 * copy into a Set / Map for O(1) random access.
 *
 * @param buffer - Block mask buffer containing voxelized blocks.
 * @returns Solid block set, mixed block map (linear index to masks array index), and masks.
 */
declare const buildBlockLookup: (buffer: BlockMaskBuffer) => BlockLookup;
/**
 * Test whether a Gaussian's center lies inside an occupied voxel.
 *
 * @param px - Gaussian center x.
 * @param py - Gaussian center y.
 * @param pz - Gaussian center z.
 * @param grid - Block grid parameters.
 * @param lookup - Block lookup structures.
 * @param blockFilter - Optional set of block indices to restrict the test to.
 * @returns True if the center is in an occupied (and optionally filtered) voxel.
 */
declare const isCenterInOccupiedVoxel: (px: number, py: number, pz: number, grid: BlockGridParams, lookup: BlockLookup, blockFilter?: Set<number>) => boolean;
/**
 * Test whether a Gaussian has meaningful contribution at occupied voxel
 * centers in blocks that overlap its AABB.
 *
 * Iterates over blocks that overlap the Gaussian's AABB, then evaluates the
 * Gaussian's opacity contribution at each occupied voxel center in those
 * blocks. Returns true once `minHits` qualifying voxels are found. With the
 * default `minHits = 1` this short-circuits on the first hit; larger values
 * let callers reject elongated outliers (e.g. spikes) whose tails clip only
 * a single cluster voxel.
 *
 * @param gaussianIdx - Index of the Gaussian.
 * @param columns - Gaussian column data arrays.
 * @param grid - Block grid parameters.
 * @param lookup - Block lookup structures.
 * @param minContribution - Minimum contribution threshold.
 * @param blockFilter - Optional set of block indices to restrict the test to.
 * @param minHits - Minimum number of qualifying voxels required. Default 1.
 * @returns True if at least `minHits` qualifying voxels were found.
 */
declare const gaussianContributesToVoxels: (gaussianIdx: number, columns: GaussianColumns, grid: BlockGridParams, lookup: BlockLookup, minContribution: number, blockFilter?: Set<number>, minHits?: number) => boolean;
export { buildBlockLookup, isCenterInOccupiedVoxel, gaussianContributesToVoxels, type BlockLookup, type BlockGridParams };
