import { Material } from "../../Material";
import { CacheHolder, CacheLoadData } from "./CacheHolder";
export interface IMaterialData extends CacheLoadData {
    name: string;
    material: Material;
    basePath?: string;
    hashes?: Record<string, string>;
    mode?: string;
}
export declare abstract class MaterialCache<Resource> extends CacheHolder<Resource, IMaterialData> {
    /**
     * Replaces all paths with absolute hashed versions
     *
     *
     * @param {IMaterialData} { material, hashes, basePath }
     */
    static fixMaterialPaths(material: Material, basePath?: string, hashes?: Record<string, string>): void;
    createIdentifier(data: IMaterialData): string;
    protected load(data: IMaterialData): Promise<Resource>;
    /**
     * Create the api/driver specific represenation of the material
     *
     * @protected
     * @abstract
     * @param {string} name
     * @param {Material} material
     * @returns {Promise<Resource>}
     */
    protected abstract createNativeMaterial(name: string, material: Material, mode?: string): Promise<Resource>;
}
