import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for a triangular barycentric blend. Applies perspective correction.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Matrix3 from '../../../dot/js/Matrix3.js';
import Vector2 from '../../../dot/js/Vector2.js';
import Vector3 from '../../../dot/js/Vector3.js';
import Vector4 from '../../../dot/js/Vector4.js';
import { ByteEncoder, RenderEvaluationContext, RenderExecutionStack, RenderExecutor, RenderInstruction, RenderInstructionLocation, RenderProgram, SerializedRenderProgram } from '../imports.js';
export declare enum RenderBarycentricPerspectiveBlendAccuracy {
    Centroid = 0,
    PixelCenter = 1
}
export default class RenderBarycentricPerspectiveBlend extends RenderProgram {
    readonly pointA: Vector3;
    readonly pointB: Vector3;
    readonly pointC: Vector3;
    readonly accuracy: RenderBarycentricPerspectiveBlendAccuracy;
    readonly a: RenderProgram;
    readonly b: RenderProgram;
    readonly c: RenderProgram;
    readonly logic: RenderBarycentricPerspectiveBlendLogic;
    constructor(pointA: Vector3, pointB: Vector3, pointC: Vector3, accuracy: RenderBarycentricPerspectiveBlendAccuracy, a: RenderProgram, b: RenderProgram, c: RenderProgram, logic?: RenderBarycentricPerspectiveBlendLogic);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderBarycentricPerspectiveBlend;
    transformed(transform: Matrix3): RenderProgram;
    protected equalsTyped(other: this): boolean;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    serialize(): SerializedRenderBarycentricPerspectiveBlend;
    static deserialize(obj: SerializedRenderBarycentricPerspectiveBlend): RenderBarycentricPerspectiveBlend;
}
export declare class RenderBarycentricPerspectiveBlendLogic {
    readonly det: number;
    readonly diffA: Vector2;
    readonly diffB: Vector2;
    readonly point2C: Vector2;
    readonly zInverseA: number;
    readonly zInverseB: number;
    readonly zInverseC: number;
    readonly accuracy: RenderBarycentricPerspectiveBlendAccuracy;
    constructor(det: number, diffA: Vector2, diffB: Vector2, point2C: Vector2, zInverseA: number, zInverseB: number, zInverseC: number, accuracy: RenderBarycentricPerspectiveBlendAccuracy);
    static from(pointA: Vector3, pointB: Vector3, pointC: Vector3, accuracy: RenderBarycentricPerspectiveBlendAccuracy): RenderBarycentricPerspectiveBlendLogic;
    equals(other: RenderBarycentricPerspectiveBlendLogic): boolean;
    apply(output: Vector4, context: RenderEvaluationContext, aColor: Vector4, bColor: Vector4, cColor: Vector4): void;
}
export declare class RenderInstructionBarycentricPerspectiveBlend extends RenderInstruction {
    readonly logic: RenderBarycentricPerspectiveBlendLogic;
    constructor(logic: RenderBarycentricPerspectiveBlendLogic);
    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): RenderInstructionBarycentricPerspectiveBlend;
    getBinaryLength(): number;
}
export type SerializedRenderBarycentricPerspectiveBlend = {
    type: 'RenderBarycentricPerspectiveBlend';
    pointA: number[];
    pointB: number[];
    pointC: number[];
    accuracy: RenderBarycentricPerspectiveBlendAccuracy;
    a: SerializedRenderProgram;
    b: SerializedRenderProgram;
    c: SerializedRenderProgram;
};
//# sourceMappingURL=RenderBarycentricPerspectiveBlend.d.ts.map