import type { AssetContainer } from "@babylonjs/core/assetContainer";
import type { Skeleton } from "@babylonjs/core/Bones/skeleton";
import { type ISceneLoaderPluginAsync, type 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 } from "../mmdModelLoader";
import { MmdModelLoader, type MmdModelLoadState } from "../mmdModelLoader";
import type { MmdModelMetadata } from "../mmdModelMetadata";
import type { ILogger } from "../Parser/ILogger";
import type { Progress, ProgressTask } from "../progress";
import { BpmxObject } from "./Parser/bpmxObject";
interface BpmxLoadState extends MmdModelLoadState {
}
interface BpmxBuildGeometryResult extends MmdModelBuildGeometryResult {
}
/**
 * BpmxLoader is a loader that loads models in BPMX format
 *
 * BPMX is a single binary file format that contains all the data of a model
 */
export declare class BpmxLoader extends MmdModelLoader<BpmxLoadState, BpmxObject, BpmxBuildGeometryResult> implements ISceneLoaderPluginAsync, ILogger {
    /**
     * Create a new BpmxLoader
     */
    constructor();
    loadFile(scene: Scene, fileOrUrl: string | File, _rootUrl: string, onSuccess: (data: BpmxLoadState, responseURL?: string | undefined) => void, onProgress?: ((ev: ISceneLoaderProgressEvent) => void) | undefined, useArrayBuffer?: boolean | undefined, onError?: ((request?: WebRequest | undefined, exception?: LoadFileError | undefined) => void) | undefined): IFileRequest;
    protected _parseFileAsync(arrayBuffer: ArrayBuffer): Promise<BpmxObject>;
    protected _getProgressTaskCosts(state: BpmxLoadState, modelObject: BpmxObject): ProgressTask[];
    protected _buildGeometryAsync(state: BpmxLoadState, modelObject: BpmxObject, rootMesh: Mesh, scene: Scene, assetContainer: Nullable<AssetContainer>, progress: Progress): Promise<BpmxBuildGeometryResult>;
    protected _buildMaterialAsync(state: BpmxLoadState, modelObject: BpmxObject, rootMesh: Mesh, meshes: Mesh[], textureNameMap: Nullable<Map<BaseTexture, string>>, scene: Scene, assetContainer: Nullable<AssetContainer>, rootUrl: string, progress: Progress): Promise<BuildMaterialResult>;
    protected _buildSkeletonAsync(state: BpmxLoadState, modelObject: BpmxObject, meshes: Mesh[], scene: Scene, assetContainer: Nullable<AssetContainer>, bonesMetadata: MmdModelMetadata.Bone[] | MmdModelMetadata.SerializationBone[], progress: Progress): Promise<Nullable<Skeleton>>;
    protected _buildMorphAsync(state: BpmxLoadState, modelObject: BpmxObject, buildGeometryResult: BpmxBuildGeometryResult, scene: Scene, assetContainer: Nullable<AssetContainer>, morphsMetadata: MmdModelMetadata.Morph[], progress: Progress): Promise<MorphTargetManager[]>;
}
export {};
