import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * RenderProgram for a phong 3d reflection model
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import Vector4 from '../../../dot/js/Vector4.js';
import { ByteEncoder, RenderEvaluationContext, RenderExecutionStack, RenderExecutor, RenderInstruction, RenderInstructionLocation, RenderLight, RenderProgram, SerializedRenderProgram } from '../imports.js';
export default class RenderPhong extends RenderProgram {
    readonly alpha: number;
    readonly ambientColorProgram: RenderProgram;
    readonly diffuseColorProgram: RenderProgram;
    readonly specularColorProgram: RenderProgram;
    readonly positionProgram: RenderProgram;
    readonly normalProgram: RenderProgram;
    readonly lights: RenderLight[];
    constructor(alpha: number, ambientColorProgram: RenderProgram, diffuseColorProgram: RenderProgram, specularColorProgram: RenderProgram, positionProgram: RenderProgram, normalProgram: RenderProgram, lights: RenderLight[]);
    getName(): string;
    withChildren(children: RenderProgram[]): RenderPhong;
    protected equalsTyped(other: this): boolean;
    protected getSimplified(children: RenderProgram[]): RenderProgram | null;
    getPhong(ambientColor: Vector4, diffuseColor: Vector4, specularColor: Vector4, position: Vector4, normal: Vector4, lightDirections: Vector4[], lightColors: Vector4[]): Vector4;
    evaluate(context: RenderEvaluationContext): Vector4;
    writeInstructions(instructions: RenderInstruction[]): void;
    serialize(): SerializedRenderPhong;
    static deserialize(obj: SerializedRenderPhong): RenderPhong;
}
export declare class RenderInstructionPhong extends RenderInstruction {
    readonly alpha: number;
    readonly numLights: number;
    constructor(alpha: number, numLights: number);
    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): RenderInstructionPhong;
    getBinaryLength(): number;
}
export type SerializedRenderPhong = {
    type: 'RenderPhong';
    children: SerializedRenderProgram[];
    alpha: number;
};
//# sourceMappingURL=RenderPhong.d.ts.map