import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for a radial blend (essentially a chunk of a radial gradient with only a linear transition between
 * two things.
 *
 * RenderRadialBlend will interpolate between two different RenderPrograms based on the location. It will evaluate
 * `clamp( ( averageFragmentRadius - radius0 ) / ( radius1 - radius0 ), 0, 1 )`, and will linearly blend
 * between the "zero" program (when the value is 0) and the "one" program (when the value is 1).
 *
 * It can be used in a standalone way, however it is primarily meant to be used when a `RenderRadialGradient`
 * is circular, and is split into each radial-linear partition.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Matrix3 from '../../../dot/js/Matrix3.js';
import Vector4 from '../../../dot/js/Vector4.js';
import { RenderEvaluationContext, RenderInstruction, RenderProgram, SerializedRenderProgram } from '../imports.js';
export declare enum RenderRadialBlendAccuracy {
    Accurate = 0,
    Centroid = 1,
    PixelCenter = 2
}
export default class RenderRadialBlend extends RenderProgram {
    readonly transform: Matrix3;
    readonly radius0: number;
    readonly radius1: number;
    readonly accuracy: RenderRadialBlendAccuracy;
    readonly zero: RenderProgram;
    readonly one: RenderProgram;
    readonly logic: RenderRadialBlendLogic;
    constructor(transform: Matrix3, radius0: number, radius1: number, accuracy: RenderRadialBlendAccuracy, zero: RenderProgram, one: RenderProgram, logic?: RenderRadialBlendLogic);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderRadialBlend;
    transformed(transform: Matrix3): RenderProgram;
    protected equalsTyped(other: this): boolean;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    serialize(): SerializedRenderRadialBlend;
    static deserialize(obj: SerializedRenderRadialBlend): RenderRadialBlend;
}
export declare class RenderRadialBlendLogic {
    readonly transform: Matrix3;
    readonly radius0: number;
    readonly radius1: number;
    readonly accuracy: RenderRadialBlendAccuracy;
    readonly inverseTransform: Matrix3;
    constructor(transform: Matrix3, radius0: number, radius1: number, accuracy: RenderRadialBlendAccuracy);
    equals(other: RenderRadialBlendLogic): boolean;
    computeLinearValue(context: RenderEvaluationContext): number;
}
export type SerializedRenderRadialBlend = {
    type: 'RenderRadialBlend';
    transform: number[];
    radius0: number;
    radius1: number;
    accuracy: RenderRadialBlendAccuracy;
    zero: SerializedRenderProgram;
    one: SerializedRenderProgram;
};
//# sourceMappingURL=RenderRadialBlend.d.ts.map