import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for repeated compositing of multiple RenderPrograms in a row with normal blending and source-over
 * Porter-Duff composition.
 *
 * RenderStack will apply normal compositing/blending to a list of RenderPrograms, where each RenderProgram in the
 * list is drawn "on top" of all of the previous ones.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { ByteEncoder, RenderEvaluationContext, RenderExecutionStack, RenderExecutor, RenderInstruction, RenderInstructionLocation, RenderProgram, SerializedRenderProgram } from '../imports.js';
import Vector4 from '../../../dot/js/Vector4.js';
export default class RenderStack extends RenderProgram {
    /**
     * @param children - Ordered from back to front, like Scenery's Node.children
     */
    constructor(children: RenderProgram[]);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderStack;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    static combine(a: Vector4, b: Vector4): Vector4;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    serialize(): SerializedRenderStack;
    static deserialize(obj: SerializedRenderStack): RenderStack;
}
export declare class RenderInstructionOpaqueJump extends RenderInstruction {
    location: RenderInstructionLocation;
    constructor(location: RenderInstructionLocation);
    toString(): string;
    equals(other: RenderInstruction, areLocationsEqual: (a: RenderInstructionLocation, b: RenderInstructionLocation) => boolean): boolean;
    static readonly SKIP_RENDER_COLOR_JUMPS = false;
    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): RenderInstructionOpaqueJump;
    getBinaryLength(): number;
}
export declare class RenderInstructionStackBlend extends RenderInstruction {
    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;
    getBinaryLength(): number;
    static readonly INSTANCE: RenderInstructionStackBlend;
}
export type SerializedRenderStack = {
    type: 'RenderStack';
    children: SerializedRenderProgram[];
};
//# sourceMappingURL=RenderStack.d.ts.map