import { NdArray } from 'ndarray';
import { default as VoxelScene } from '../Data/Models/VoxelScene';
import { default as VoxelArt } from '../Data/Models/VoxelArt';
import { default as ShapeHash } from '../Data/Types/ShapeHash';
import { AtlasLayout } from '../Data/Packers/AtlasPacker';
import * as THREE from 'three';
/** texels per shape row in the RGBA32F shape texture */
export declare const SHAPE_TEX_WIDTH = 8;
export declare function collectShapeHashes(scene: VoxelScene, layout: AtlasLayout): ShapeHash[];
/** Copies every model's voxel bytes into a single 3D atlas buffer. */
export declare function buildAtlasData(models: VoxelArt[], layout: AtlasLayout): Uint8Array;
/**
 * Packs shape metadata into an RGBA32F texture, SHAPE_TEX_WIDTH texels per
 * shape (one shape per row):
 *   texel 0..2: rotation matrix rows in .xyz, translation component in .w
 *   texel 3:    size
 *   texel 4:    pos (pivot)
 *   texel 5:    atlas offset
 */
export declare function buildShapeTexData(hashes: ShapeHash[]): Float32Array;
export declare const MAX_LIGHTS = 4096;
/**
 * Collects world-space centers of emissive voxels across all shape
 * instances — the light list for next-event estimation. One RGBA32F texel
 * per light: [x, y, z, materialIndex]. Evenly strided down to `cap` when a
 * scene has more emissive voxels than that.
 */
export declare function buildLightListData(scene: VoxelScene, hashes: ShapeHash[], cap?: number): {
    data: Float32Array;
    count: number;
};
/**
 * Re-orders a 16x16 palette/material ndarray (indexed [i=index%16, j=index/16])
 * into GPU row-major layout so the shader can texelFetch at
 * ivec2(index % 16, index / 16).
 */
export declare function build16x16Data(nd: NdArray): Uint8Array;
export declare class SceneTextures {
    readonly atlas: THREE.Data3DTexture;
    readonly shapeTex: THREE.DataTexture;
    readonly bvhTex: THREE.DataTexture;
    readonly colorTex: THREE.DataTexture;
    readonly materialTex: THREE.DataTexture;
    readonly lightTex: THREE.DataTexture;
    readonly shapeCount: number;
    readonly lightCount: number;
    private constructor();
    static fromScene(scene: VoxelScene, maxAtlasSize: number): SceneTextures;
    dispose(): void;
}
