import { Color, Material, Texture } from 'three';
import { GeometryType } from '../batching/Batch';
import { TreeNode } from '../tree/WorldTree';
import { NodeRenderView } from '../tree/NodeRenderView';
export interface RenderMaterial {
    id: string;
    color: number;
    opacity: number;
    roughness: number;
    metalness: number;
    vertexColors: boolean;
}
export interface DisplayStyle {
    id: string;
    color: number;
    lineWeight: number;
    opacity?: number;
}
export interface MaterialOptions {
    stencilOutlines?: boolean;
    pointSize?: number;
    depthWrite?: number;
}
export declare enum FilterMaterialType {
    GHOST = 0,
    GRADIENT = 1,
    COLORED = 2,
    HIDDEN = 3
}
export interface FilterMaterial {
    filterType: FilterMaterialType;
    rampIndex?: number;
    rampIndexColor?: Color;
    rampTexture?: Texture;
}
export interface FilterMaterialOptions {
    rampIndex?: number;
    rampIndexColor?: Color;
    rampTexture?: Texture;
    rampWidth?: number;
}
export default class Materials {
    static readonly UNIFORM_VECTORS_USED = 33;
    private readonly materialMap;
    private meshGhostMaterial;
    private meshGradientMaterial;
    private meshTransparentGradientMaterial;
    private meshColoredMaterial;
    private meshTransparentColoredMaterial;
    private meshHiddenMaterial;
    private lineGhostMaterial;
    private lineColoredMaterial;
    private lineHiddenMaterial;
    private pointGhostMaterial;
    private pointCloudColouredMaterial;
    private pointCloudGradientMaterial;
    private textGhostMaterial;
    private textColoredMaterial;
    private textHiddenMaterial;
    private defaultGradientTextureData;
    private static readonly NullRenderMaterialHash;
    private static readonly NullRenderMaterialVertexColorsHash;
    private static readonly NullDisplayStyleHash;
    private static readonly NullTextDisplayStyle;
    private static readonly NullPointMaterialHash;
    private static readonly NullPointCloudMaterialHash;
    private static readonly NullPointCloudVertexColorsMaterialHash;
    private static readonly NullRenderMaterialInstancedHash;
    private static readonly NullRenderMaterialInstancedVertexColorHash;
    static renderMaterialFromNode(materialNode: TreeNode, geometryNode: TreeNode): RenderMaterial;
    static displayStyleFromNode(node: TreeNode): DisplayStyle;
    static fastCopy(from: Material, to: Material): void;
    private static renderMaterialToString;
    private static displayStyleToString;
    private static hashCode;
    static isMaterialInstance(material: any): material is Material;
    static isFilterMaterial(material: any): material is FilterMaterial;
    static isRendeMaterial(materialData: any): materialData is RenderMaterial;
    static isDisplayStyle(materialData: any): materialData is DisplayStyle;
    static getMaterialHash(renderView: NodeRenderView, materialData?: RenderMaterial | DisplayStyle): any;
    static isTransparent(material: Material): boolean;
    static isOpaque(material: Material): boolean;
    private createDefaultMeshMaterials;
    private createLineDefaultMaterials;
    private createDefaultPointMaterials;
    private createDefaultTextMaterials;
    private createDefaultNullMaterials;
    createDefaultMaterials(): Promise<void>;
    private makeMeshMaterial;
    private makeLineMaterial;
    private makePointMaterial;
    private makeTextMaterial;
    getMaterial(hash: number, material: RenderMaterial | DisplayStyle, type: GeometryType): Material;
    private getMeshMaterial;
    private getLineMaterial;
    private getPointMaterial;
    private getPointCloudMaterial;
    private getTextMaterial;
    getGhostMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material;
    getGradientMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material;
    getColoredMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material;
    getHiddenMaterial(renderView: NodeRenderView, filterMaterial?: FilterMaterial): Material;
    getFilterMaterial(renderView: NodeRenderView, filterMaterial: FilterMaterial): Material;
    getDataMaterial(renderView: NodeRenderView, materialData: RenderMaterial & DisplayStyle): Material;
    getFilterMaterialOptions(filterMaterial: FilterMaterial): FilterMaterialOptions;
    purge(): void;
}
