import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * Test rasterization
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Bounds2 from '../../../dot/js/Bounds2.js';
import Vector2 from '../../../dot/js/Vector2.js';
import { OutputRaster, PolygonFilterType, RasterLog, RenderableFace, RenderProgram } from '../imports.js';
type RenderExecutionMethod = 'evaluation' | 'instructions';
export type RasterizationOptions = {
    outputRasterOffset?: Vector2;
    tileSize?: number;
    polygonFiltering?: PolygonFilterType;
    polygonFilterWindowMultiplier?: number;
    edgeIntersectionSortMethod?: 'none' | 'center-size' | 'min-max' | 'min-max-size' | 'center-min-max' | 'random';
    edgeIntersectionMethod?: 'quadratic' | 'boundsTree' | 'arrayBoundsTree';
    renderableFaceType?: 'polygonal' | 'edged' | 'edgedClipped';
    renderableFaceMethod?: 'simple' | 'fullyCombined' | 'simplifyingCombined' | 'traced';
    splitPrograms?: boolean;
    executionMethod?: RenderExecutionMethod;
    log?: RasterLog | null;
};
export default class Rasterize {
    private static getRenderProgrammedFaces;
    private static addFilterPixel;
    private static addPartialPixel;
    private static addFullArea;
    private static terminalGridRasterize;
    private static binaryRasterize;
    /**
     * This exists to handle polygon filtering when the filter multiplier is not 1. This means that our general approach
     * of "split everything into an even grid" might not work, so we'll take a more robust solution.
     *
     * NOTE: Instead of using this, of the filter multiplier is integral, we could probably do other grid clipping
     * magic to avoid this.
     */
    private static windowedFilterRasterize;
    static rasterizeAccumulate(outputRaster: OutputRaster, renderableFaces: RenderableFace[], bounds: Bounds2, contributionBounds: Bounds2, outputRasterOffset: Vector2, polygonFiltering: PolygonFilterType, polygonFilterWindowMultiplier: number, executionMethod: RenderExecutionMethod, log: RasterLog | null): void;
    static markStart(name: string): void;
    static markEnd(name: string): void;
    static partitionRenderableFaces(renderProgram: RenderProgram, bounds: Bounds2, providedOptions?: RasterizationOptions): RenderableFace[];
    static rasterize(renderProgram: RenderProgram, outputRaster: OutputRaster, bounds: Bounds2, providedOptions?: RasterizationOptions): void;
    static imageDataToCanvas(imageData: ImageData): HTMLCanvasElement;
    static writeImageDataToCanvas(imageData: ImageData, canvas: HTMLCanvasElement, context: CanvasRenderingContext2D): void;
}
export {};
//# sourceMappingURL=Rasterize.d.ts.map