import { IUniform, Material, MeshBasicMaterial, MeshDepthMaterial, MeshNormalMaterial, MeshStandardMaterial } from 'three';
export type Uniforms = Record<string, any>;
export declare class SpeckleMaterial {
    protected _internalUniforms: any;
    protected get vertexShader(): string;
    protected get fragmentShader(): string;
    protected get uniformsDef(): Uniforms;
    protected get baseUniforms(): {
        [uniform: string]: IUniform;
    };
    protected init(defines?: any[]): void;
    protected setUniforms(def: Uniforms): void;
    protected setDefines(defines?: any[]): void;
    protected copyUniforms(material: Material): void;
    protected bindUniforms(): void;
    protected copyFrom(source: any): void;
    protected onCompile(shader: any, renderer: any): void;
    fastCopy(from: Material, to: Material): void;
}
export declare class ExtendedMeshStandardMaterial extends MeshStandardMaterial {
}
export declare class ExtendedMeshBasicMaterial extends MeshBasicMaterial {
}
export declare class ExtendedMeshDepthMaterial extends MeshDepthMaterial {
}
export declare class ExtendedMeshNormalMaterial extends MeshNormalMaterial {
}
export interface ExtendedMeshStandardMaterial extends SpeckleMaterial {
}
export interface ExtendedMeshBasicMaterial extends SpeckleMaterial {
}
export interface ExtendedMeshDepthMaterial extends SpeckleMaterial {
}
export interface ExtendedMeshNormalMaterial extends SpeckleMaterial {
}
export declare function applyMixins(derivedCtor: any, constructors: any[]): void;
