import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for applying a color-matrix filter
 *
 * NOTE: This operates on unpremultiplied colors. Presumably for most operations, you'll want to wrap it in
 * the corresponding conversions.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Matrix4 from '../../../dot/js/Matrix4.js';
import Vector4 from '../../../dot/js/Vector4.js';
import { ByteEncoder, RenderEvaluationContext, RenderExecutionStack, RenderExecutor, RenderInstruction, RenderInstructionLocation, RenderProgram, SerializedRenderProgram } from '../imports.js';
export default class RenderFilter extends RenderProgram {
    readonly program: RenderProgram;
    readonly colorMatrix: Matrix4;
    readonly colorTranslation: Vector4;
    readonly logic: RenderFilterLogic;
    constructor(program: RenderProgram, colorMatrix: Matrix4, colorTranslation: Vector4, logic?: RenderFilterLogic);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderFilter;
    protected equalsTyped(other: this): boolean;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    static applyFilter(color: Vector4, colorMatrix: Matrix4, colorTranslation: Vector4): Vector4;
    serialize(): SerializedRenderFilter;
    static deserialize(obj: SerializedRenderFilter): RenderFilter;
}
export declare class RenderFilterLogic {
    readonly colorMatrix: Matrix4;
    readonly colorTranslation: Vector4;
    constructor(colorMatrix: Matrix4, colorTranslation: Vector4);
    equals(other: RenderFilterLogic): boolean;
}
export declare class RenderInstructionFilter extends RenderInstruction {
    readonly logic: RenderFilterLogic;
    constructor(logic: RenderFilterLogic);
    toString(): string;
    equals(other: RenderInstruction, areLocationsEqual: (a: RenderInstructionLocation, b: RenderInstructionLocation) => boolean): boolean;
    execute(stack: RenderExecutionStack, context: RenderEvaluationContext, executor: RenderExecutor): void;
    writeBinary(encoder: ByteEncoder, getOffset: (location: RenderInstructionLocation) => number): void;
    static fromBinary(encoder: ByteEncoder, offset: number, getLocation: (offset: number) => RenderInstructionLocation): RenderInstructionFilter;
    getBinaryLength(): number;
}
export type SerializedRenderFilter = {
    type: 'RenderFilter';
    program: SerializedRenderProgram;
    colorMatrix: number[];
    colorTranslation: number[];
};
//# sourceMappingURL=RenderFilter.d.ts.map