import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for a classic radial gradient.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { RenderableFace, RenderEvaluationContext, RenderExtend, RenderGradientStop, RenderInstruction, RenderProgram, SerializedRenderGradientStop } from '../imports.js';
import Vector2 from '../../../dot/js/Vector2.js';
import Matrix3 from '../../../dot/js/Matrix3.js';
import Vector4 from '../../../dot/js/Vector4.js';
export declare enum RenderRadialGradientAccuracy {
    SplitAccurate = 0,
    SplitCentroid = 1,
    SplitPixelCenter = 2,
    UnsplitCentroid = 3,
    UnsplitPixelCenter = 4
}
export default class RenderRadialGradient extends RenderProgram {
    readonly transform: Matrix3;
    readonly start: Vector2;
    readonly startRadius: number;
    readonly end: Vector2;
    readonly endRadius: number;
    readonly stops: RenderGradientStop[];
    readonly extend: RenderExtend;
    readonly accuracy: RenderRadialGradientAccuracy;
    private logic;
    constructor(transform: Matrix3, start: Vector2, startRadius: number, end: Vector2, endRadius: number, stops: RenderGradientStop[], // should be sorted!!
    extend: RenderExtend, accuracy: RenderRadialGradientAccuracy, logic?: RenderRadialGradientLogic);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderRadialGradient;
    isSplittable(): boolean;
    transformed(transform: Matrix3): RenderProgram;
    protected equalsTyped(other: this): boolean;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    getLogic(): RenderRadialGradientLogic;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    split(face: RenderableFace): RenderableFace[];
    serialize(): SerializedRenderRadialGradient;
    static deserialize(obj: SerializedRenderRadialGradient): RenderRadialGradient;
}
export declare enum RadialGradientType {
    Circular = 0,
    Strip = 1,
    FocalOnCircle = 2,
    Cone = 3
}
export declare const RENDER_GRADIENT_TYPE_CONSTANTS: {
    readonly GradientTypeCircular: RadialGradientType.Circular;
    readonly GradientTypeStrip: RadialGradientType.Strip;
    readonly GradientTypeFocalOnCircle: RadialGradientType.FocalOnCircle;
    readonly GradientTypeCone: RadialGradientType.Cone;
};
export declare class RenderRadialGradientLogic {
    readonly conicTransform: Matrix3;
    readonly focalX: number;
    readonly radius: number;
    readonly kind: RadialGradientType;
    readonly isSwapped: boolean;
    readonly ratios: number[];
    readonly extend: RenderExtend;
    readonly accuracy: RenderRadialGradientAccuracy;
    constructor(conicTransform: Matrix3, focalX: number, radius: number, kind: RadialGradientType, isSwapped: boolean, ratios: number[], // should be sorted!!
    extend: RenderExtend, accuracy: RenderRadialGradientAccuracy);
    static from(transform: Matrix3, start: Vector2, startRadius: number, end: Vector2, endRadius: number, ratios: number[], // should be sorted!!
    extend: RenderExtend, accuracy: RenderRadialGradientAccuracy): RenderRadialGradientLogic;
    equals(other: RenderRadialGradientLogic): boolean;
    computeLinearValue(context: RenderEvaluationContext): number;
}
export type SerializedRenderRadialGradient = {
    type: 'RenderRadialGradient';
    transform: number[];
    start: number[];
    startRadius: number;
    end: number[];
    endRadius: number;
    stops: SerializedRenderGradientStop[];
    extend: RenderExtend;
    accuracy: RenderRadialGradientAccuracy;
};
//# sourceMappingURL=RenderRadialGradient.d.ts.map