import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for binary color-blending and Porter-Duff composition.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Vector3 from '../../../dot/js/Vector3.js';
import Vector4 from '../../../dot/js/Vector4.js';
import { ByteEncoder, RenderBlendType, RenderComposeType, RenderEvaluationContext, RenderExecutionStack, RenderExecutor, RenderInstruction, RenderInstructionLocation, RenderProgram, SerializedRenderProgram } from '../imports.js';
export default class RenderBlendCompose extends RenderProgram {
    readonly composeType: RenderComposeType;
    readonly blendType: RenderBlendType;
    readonly a: RenderProgram;
    readonly b: RenderProgram;
    readonly logic: RenderBlendComposeLogic;
    constructor(composeType: RenderComposeType, blendType: RenderBlendType, a: RenderProgram, b: RenderProgram, logic?: RenderBlendComposeLogic);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderBlendCompose;
    protected equalsTyped(other: this): boolean;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    protected getExtraDebugString(): string;
    static blendCompose(a: Vector4, b: Vector4, composeType: RenderComposeType, blendType: RenderBlendType): Vector4;
    static screen(cb: Vector3, cs: Vector3): Vector3;
    static colorDodge(cb: number, cs: number): number;
    static colorBurn(cb: number, cs: number): number;
    static hardLight(cb: Vector3, cs: Vector3): Vector3;
    static softLight(cb: Vector3, cs: Vector3): Vector3;
    static sat(c: Vector3): number;
    static lum(c: Vector3): number;
    static clipColor(c: Vector3): Vector3;
    static setLum(c: Vector3, l: number): Vector3;
    static setSatInner(c: Vector3, s: number): void;
    static setSat(c: Vector3, s: number): Vector3;
    serialize(): SerializedRenderBlendCompose;
    static deserialize(obj: SerializedRenderBlendCompose): RenderBlendCompose;
}
export declare class RenderBlendComposeLogic {
    readonly composeType: RenderComposeType;
    readonly blendType: RenderBlendType;
    constructor(composeType: RenderComposeType, blendType: RenderBlendType);
    equals(other: RenderBlendComposeLogic): boolean;
}
export declare class RenderInstructionBlendCompose extends RenderInstruction {
    readonly logic: RenderBlendComposeLogic;
    constructor(logic: RenderBlendComposeLogic);
    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): RenderInstructionBlendCompose;
    getBinaryLength(): number;
}
export type SerializedRenderBlendCompose = {
    type: 'RenderBlendCompose';
    composeType: RenderComposeType;
    blendType: RenderBlendType;
    a: SerializedRenderProgram;
    b: SerializedRenderProgram;
};
//# sourceMappingURL=RenderBlendCompose.d.ts.map