import { ExtensionType } from '../../../extensions/Extensions';
import { Matrix } from '../../../maths/Matrix';
import { BindGroup } from '../../renderers/gpu/shader/BindGroup';
import { UniformGroup } from '../../renderers/shared/shader/UniformGroup';
import type { Instruction } from '../../renderers/shared/instructions/Instruction';
import type { InstructionSet } from '../../renderers/shared/instructions/InstructionSet';
import type { InstructionPipe, RenderPipe } from '../../renderers/shared/instructions/RenderPipe';
import type { Renderable } from '../../renderers/shared/Renderable';
import type { Renderer } from '../../renderers/types';
import type { MeshGeometry } from './MeshGeometry';
import type { MeshView } from './MeshView';
export interface MeshAdaptor {
    init(): void;
    execute(meshPipe: MeshPipe, renderable: Renderable<MeshView>): void;
    destroy(): void;
}
export interface MeshInstruction extends Instruction {
    type: 'mesh';
    renderable: Renderable<MeshView>;
}
export declare class MeshPipe implements RenderPipe<MeshView>, InstructionPipe<MeshInstruction> {
    /** @ignore */
    static extension: {
        readonly type: readonly [ExtensionType.WebGLPipes, ExtensionType.WebGPUPipes, ExtensionType.CanvasPipes];
        readonly name: "mesh";
    };
    localUniforms: UniformGroup<{
        uTransformMatrix: {
            value: Matrix;
            type: "mat3x3<f32>";
        };
        uColor: {
            value: Float32Array;
            type: "vec4<f32>";
        };
    }>;
    localUniformsBindGroup: BindGroup;
    renderer: Renderer;
    private _renderableHash;
    private _gpuBatchableMeshHash;
    private _adaptor;
    constructor(renderer: Renderer, adaptor: MeshAdaptor);
    validateRenderable(renderable: Renderable<MeshView>): boolean;
    addRenderable(renderable: Renderable<MeshView>, instructionSet: InstructionSet): void;
    updateRenderable(renderable: Renderable<MeshView>): void;
    destroyRenderable(renderable: Renderable<MeshView<MeshGeometry>>): void;
    execute({ renderable }: MeshInstruction): void;
    private _getRenderableData;
    private _initRenderableData;
    private _getBatchableMesh;
    private _initBatchableMesh;
    destroy(): void;
}
