import { type IUniform, Material, MeshBasicMaterial, MeshDepthMaterial, MeshNormalMaterial, MeshStandardMaterial, PointsMaterial, type Shader, MeshMatcapMaterial } from 'three';
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js';
import { StencilOutlineType } from '../../IViewer.js';
import { type MaterialOptions } from './MaterialOptions.js';
declare class SpeckleUserData {
    [k: string]: unknown;
    toJSON(): {};
}
export type Uniforms = Record<string, any>;
export declare class SpeckleMaterial {
    protected _internalUniforms: Shader;
    protected _stencilOutline: StencilOutlineType;
    needsCopy: boolean;
    protected get speckleUserData(): SpeckleUserData;
    protected set speckleUserData(value: SpeckleUserData);
    protected get speckleDefines(): Record<string, unknown> | undefined;
    protected set speckleDefines(value: Record<string, unknown> | undefined);
    protected get vertexProgram(): string;
    protected get fragmentProgram(): string;
    protected get uniformsDef(): Uniforms;
    protected get baseUniforms(): {
        [uniform: string]: IUniform;
    };
    protected set stencilOutline(value: StencilOutlineType);
    protected set pointSize(value: number);
    protected init(defines?: Array<string>): void;
    protected setUniforms(def: Uniforms): void;
    protected setDefines(defines?: Array<string>): void;
    protected copyUniforms(material: Material): void;
    protected bindUniforms(): void;
    protected copyFrom(source: Material): void;
    protected onCompile(shader: Shader): 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 ExtendedMatcapMaterial extends MeshMatcapMaterial {
}
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 ExtendedMatcapMaterial extends SpeckleMaterial {
}
export interface ExtendedLineMaterial extends SpeckleMaterial {
}
export interface ExtendedPointsMaterial extends SpeckleMaterial {
}
export declare function applyMixins(derivedCtor: any, constructors: any[]): void;
export {};
