import { type RenderState } from "./Material";
import { type DrawCommand, type IndexType, type PrimitiveTopology, type RenderBuffer, type RenderShaderProgram } from "./RenderDevice";
import { type VertexFormat } from "./VertexFormat";
export interface RenderPipelineDescriptor {
    readonly label?: string;
    readonly shader: RenderShaderProgram;
    readonly vertexFormat: VertexFormat;
    readonly topology?: PrimitiveTopology;
    readonly renderState?: Partial<RenderState>;
    readonly requiredAttributes?: readonly string[];
}
export interface PipelineDrawDescriptor {
    readonly label?: string;
    readonly vertexBuffer: RenderBuffer;
    readonly vertexCount: number;
    readonly firstVertex?: number;
    readonly instanceCount?: number;
    readonly instanceAttributes?: DrawCommand["instanceAttributes"];
    readonly indexBuffer?: RenderBuffer;
    readonly indexType?: IndexType;
    readonly indexCount?: number;
    readonly firstIndex?: number;
    readonly uniforms?: DrawCommand["uniforms"];
}
export declare class RenderPipeline {
    readonly label: string;
    readonly shader: RenderShaderProgram;
    readonly vertexFormat: VertexFormat;
    readonly topology: PrimitiveTopology;
    readonly renderState: RenderState;
    disposed: boolean;
    private readonly requiredAttributes;
    constructor(descriptor: RenderPipelineDescriptor);
    createDrawCommand(descriptor: PipelineDrawDescriptor): DrawCommand;
    dispose(): void;
    private validateVertexFormat;
    private hasVertexAttribute;
}
//# sourceMappingURL=RenderPipeline.d.ts.map