import type { MaterialProps, Texture, UniformValue, UndefinedAble, Engine, GlobalUniforms, Renderer } from '@galacean/effects-core';
import { math, Material } from '@galacean/effects-core';
import * as THREE from 'three';
type Matrix4 = math.Matrix4;
type Vector2 = math.Vector2;
type Vector3 = math.Vector3;
type Vector4 = math.Vector4;
type Matrix3 = math.Matrix3;
type Quaternion = math.Quaternion;
type Color = math.Color;
/**
 * THREE 抽象材质类
 */
export declare class ThreeMaterial extends Material {
    /**
     * 储存纹理类型的 uniform 值
     */
    textures: Record<string, Texture>;
    /**
     * THREE 原始着色器材质对象
     */
    material: THREE.RawShaderMaterial;
    /**
     * 储存 uniform 变量名及对应的 THREE uniform 对象
     */
    uniforms: Record<string, THREE.Uniform>;
    macrosDirty: boolean;
    /**
     * 构造函数
     *
     * @param props - 材质属性
     */
    constructor(engine: Engine, props?: MaterialProps);
    /**
     * 设置 uniform 变量值的回调函数
     *
     * @param name - uniform 变量名
     * @param value - uniform 变量值
     */
    onSetUniformValue(name: string, value: UniformValue): void;
    use(render: Renderer, globalUniforms: GlobalUniforms): void;
    /**
     * 移除 uniform 变量值的回调函数
     *
     * @param name - uniform 变量名
     */
    onRemoveUniformValue(name: string): void;
    /**
     * 获取混合模式
     */
    get blending(): UndefinedAble<boolean>;
    set blending(blending: UndefinedAble<boolean>);
    /**
     * 获取混合函数
     */
    get blendFunction(): UndefinedAble<[blendSrc: number, blendDst: number, blendSrcAlpha: number, blendDstAlpha: number]>;
    set blendFunction(func: UndefinedAble<[blendSrc: number, blendDst: number, blendSrcAlpha: number, blendDstAlpha: number]>);
    /**
     * 获取混合方程式
     */
    get blendEquation(): UndefinedAble<[rgb: number, alpha: number]>;
    set blendEquation(equation: UndefinedAble<[rgb: number, alpha: number]>);
    /**
     * 获取深度测试结果
     */
    get depthTest(): UndefinedAble<boolean>;
    set depthTest(value: UndefinedAble<boolean>);
    /**
     * 获取深度缓冲区结果
     */
    get depthMask(): UndefinedAble<boolean>;
    set depthMask(value: UndefinedAble<boolean>);
    /**
     * 获取深度函数
     */
    get depthFunc(): UndefinedAble<number>;
    set depthFunc(value: UndefinedAble<number>);
    /**
     * 获取多边形偏移开关
     */
    get polygonOffsetFill(): UndefinedAble<boolean>;
    set polygonOffsetFill(value: UndefinedAble<boolean>);
    /**
     * 获取多边形偏移
     */
    get polygonOffset(): UndefinedAble<[number, number]>;
    set polygonOffset(value: UndefinedAble<[number, number]>);
    /**
     * 获取 alpha 抖动
     */
    get sampleAlphaToCoverage(): UndefinedAble<boolean>;
    set sampleAlphaToCoverage(value: UndefinedAble<boolean>);
    /**
     * 获取模板测试开关
     */
    get stencilTest(): UndefinedAble<boolean>;
    set stencilTest(value: UndefinedAble<boolean>);
    /**
     * 获取模板缓冲区
     */
    get stencilMask(): UndefinedAble<[number, number]>;
    set stencilMask(value: UndefinedAble<[number, number]>);
    /**
     * 获取模板测试参考值
     */
    get stencilRef(): UndefinedAble<[number, number]>;
    set stencilRef(value: UndefinedAble<[number, number]>);
    /**
     * 获取模版函数
     */
    get stencilFunc(): UndefinedAble<[number, number]>;
    set stencilFunc(value: UndefinedAble<[number, number]>);
    /**
     * 获取模板测试失败后参数
     */
    get stencilOpFail(): UndefinedAble<[number, number]>;
    set stencilOpFail(value: UndefinedAble<[number, number]>);
    /**
     * 获取模版测试通过深度测试失败后参数
     */
    get stencilOpZFail(): UndefinedAble<[number, number]>;
    set stencilOpZFail(value: UndefinedAble<[number, number]>);
    /**
     * 获取模版测试通过并设置深度值参数
     */
    get stencilOpZPass(): UndefinedAble<[number, number]>;
    set stencilOpZPass(value: UndefinedAble<[number, number]>);
    /**
     * 获取剔除开关
     */
    get culling(): UndefinedAble<boolean>;
    set culling(value: UndefinedAble<boolean>);
    /**
     * 获取剔除面
     */
    get cullFace(): UndefinedAble<number>;
    set cullFace(value: UndefinedAble<number>);
    /**
     * 获取颜色写入开关
     */
    set colorMask(value: boolean);
    get colorMask(): boolean;
    getTexture(name: string): Texture | null;
    setTexture(name: string, texture: Texture): void;
    getVector4Array(name: string): number[];
    setVector4Array(name: string, array: Vector4[]): void;
    getMatrixArray(name: string): number[] | null;
    setMatrixArray(name: string, array: Matrix4[]): void;
    setMatrixNumberArray(name: string, array: number[]): void;
    getMatrix(name: string): Matrix4 | null;
    setMatrix(name: string, value: Matrix4): void;
    setMatrix3(name: string, value: Matrix3): void;
    getVector2(name: string): Vector2 | null;
    setVector2(name: string, value: Vector2): void;
    getVector3(name: string): Vector3;
    setVector3(name: string, value: Vector3): void;
    getVector4(name: string): Vector4 | null;
    setVector4(name: string, value: Vector4): void;
    getColor(name: string): Color | null;
    setColor(name: string, value: Color): void;
    getQuaternion(name: string): Quaternion | null;
    setQuaternion(name: string, value: Quaternion): void;
    getFloat(name: string): number | null;
    setFloat(name: string, value: number): void;
    getFloats(name: string): number[] | null;
    setFloats(name: string, value: number[]): void;
    getInt(name: string): number | null;
    setInt(name: string, value: number): void;
    hasUniform(name: string): boolean;
    private setUniform;
    enableMacro(keyword: string, value?: boolean | number): void;
    disableMacro(keyword: string): void;
    isMacroEnabled(keyword: string): boolean;
    clone(props?: MaterialProps): Material;
    cloneUniforms(sourceMaterial: Material): void;
    fromData(data: unknown): void;
    dispose(): void;
}
export {};
