import { IUniform, Material, MeshBasicMaterial, MeshDepthMaterial, MeshNormalMaterial, MeshStandardMaterial, PointsMaterial } from 'three';
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js';
import { MaterialOptions } from './Materials';
export type Uniforms = Record<string, any>;
export declare class SpeckleMaterial {
    protected _internalUniforms: any;
    protected _stencilOutline: any;
    needsCopy: boolean;
    protected get vertexProgram(): string;
    protected get fragmentProgram(): string;
    protected get uniformsDef(): Uniforms;
    protected get baseUniforms(): {
        [uniform: string]: IUniform;
    };
    protected set stencilOutline(value: boolean);
    protected set pointSize(value: number);
    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;
    setMaterialOptions(options: MaterialOptions): 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 declare class ExtendedLineMaterial extends LineMaterial {
}
export declare class ExtendedPointsMaterial extends PointsMaterial {
}
export interface ExtendedMeshStandardMaterial extends SpeckleMaterial {
}
export interface ExtendedMeshBasicMaterial extends SpeckleMaterial {
}
export interface ExtendedMeshDepthMaterial extends SpeckleMaterial {
}
export interface ExtendedMeshNormalMaterial extends SpeckleMaterial {
}
export interface ExtendedLineMaterial extends SpeckleMaterial {
}
export interface ExtendedPointsMaterial extends SpeckleMaterial {
}
export declare function applyMixins(derivedCtor: any, constructors: any[]): void;
