import type { AssetContainer } from "@babylonjs/core/assetContainer";
import type { ISceneLoaderPluginAsync, ISceneLoaderPluginExtensions, ISceneLoaderProgressEvent } from "@babylonjs/core/Loading/sceneLoader";
import type { BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture";
import { Mesh } from "@babylonjs/core/Meshes/mesh";
import type { IFileRequest } from "@babylonjs/core/Misc/fileRequest";
import type { LoadFileError } from "@babylonjs/core/Misc/fileTools";
import type { WebRequest } from "@babylonjs/core/Misc/webRequest";
import { MorphTargetManager } from "@babylonjs/core/Morph/morphTargetManager";
import type { Scene } from "@babylonjs/core/scene";
import type { Nullable } from "@babylonjs/core/types";
import type { BuildMaterialResult, MmdModelBuildGeometryResult, MmdModelLoadState } from "./mmdModelLoader";
import { MmdModelLoader } from "./mmdModelLoader";
import type { MmdModelMetadata } from "./mmdModelMetadata";
import type { ILogger } from "./Parser/ILogger";
import { PmxObject } from "./Parser/pmxObject";
import type { Progress, ProgressTask } from "./progress";
interface PmLoadState extends MmdModelLoadState {
    readonly referenceFiles: readonly File[];
}
interface PmBuildGeometryResult extends MmdModelBuildGeometryResult {
    readonly indices: Uint16Array | Uint32Array;
    readonly indexToSubmehIndexMaps: {
        map: Uint8Array | Uint16Array | Int32Array;
        isReferencedVertex: Uint8Array;
    }[];
}
/**
 * @internal
 * Base class of pmx / pmd loader
 */
export declare abstract class PmLoader extends MmdModelLoader<PmLoadState, PmxObject, PmBuildGeometryResult> implements ISceneLoaderPluginAsync, ILogger {
    /**
     * Reference files for load PMX / PMD from files (textures)
     *
     * This property is used to load textures from files
     *
     * pmx / pmd files typically store texture files separately in a subdirectory of url root
     *
     * Therefore, in order to load it as a file, you need to put information about these files separately
     */
    referenceFiles: readonly File[];
    /**
     * Create a new PmLoader
     */
    constructor(name: string, extensions: ISceneLoaderPluginExtensions);
    loadFile(scene: Scene, fileOrUrl: string | File, _rootUrl: string, onSuccess: (data: PmLoadState, responseURL?: string | undefined) => void, onProgress?: ((ev: ISceneLoaderProgressEvent) => void) | undefined, useArrayBuffer?: boolean | undefined, onError?: ((request?: WebRequest | undefined, exception?: LoadFileError | undefined) => void) | undefined): IFileRequest;
    protected _getProgressTaskCosts(state: PmLoadState, modelObject: PmxObject): ProgressTask[];
    protected _buildGeometryAsync(state: PmLoadState, modelObject: PmxObject, rootMesh: Mesh, scene: Scene, assetContainer: Nullable<AssetContainer>, progress: Progress): Promise<PmBuildGeometryResult>;
    protected _buildMaterialAsync(state: PmLoadState, modelObject: PmxObject, rootMesh: Mesh, meshes: Mesh[], textureNameMap: Nullable<Map<BaseTexture, string>>, scene: Scene, assetContainer: Nullable<AssetContainer>, rootUrl: string, progress: Progress): Promise<BuildMaterialResult>;
    protected _buildMorphAsync(state: PmLoadState, modelObject: PmxObject, buildGeometryResult: PmBuildGeometryResult, scene: Scene, assetContainer: Nullable<AssetContainer>, morphsMetadata: MmdModelMetadata.Morph[], progress: Progress): Promise<MorphTargetManager[]>;
}
export {};
