import { type Geometry } from "../Meshes/geometry.js";
import { type Scene } from "../scene.js";
import { type TransformNode } from "../Meshes/transformNode.js";
import { type AbstractMesh } from "../Meshes/abstractMesh.js";
/**
 *SceneSerializerOptions
 */
export interface ISceneSerializerOptions {
    /**
     * User side serialization
     * @param serializationObject
     */
    customExtraSerialize?: (serializationObject: Record<string, any>) => void;
    /**
     * Decide if the mesh should be exported
     * @param mesh
     */
    shouldExportMesh?: (mesh: AbstractMesh) => boolean | void;
    /**
     * Decide if the geometry should be exported
     * @param geometry
     */
    shouldExportGeometry?: (geometry: Geometry) => boolean | void;
    /**
     * Decide if the transformNode should be exported
     * @param transformNode
     */
    shouldExportTransformNode?: (transformNode: TransformNode) => boolean | void;
}
/**
 * Class used to serialize a scene into a string
 */
export declare class SceneSerializer {
    /**
     * Clear cache used by a previous serialization
     */
    static ClearCache(): void;
    /**
     * Serialize a scene into a JSON compatible object
     * Note that if the current engine does not support synchronous texture reading (like WebGPU), you should use SerializeAsync instead
     * as else you may not retrieve the proper base64 encoded texture data (when using the Texture.ForceSerializeBuffers flag)
     * @param scene defines the scene to serialize
     * @param options define the serializer options
     * @returns a JSON compatible object
     */
    static Serialize(scene: Scene, options?: ISceneSerializerOptions): any;
    private static _Serialize;
    /**
     * Serialize a scene into a JSON compatible object
     * @param scene defines the scene to serialize
     * @param options define the serializer options
     * @returns a JSON promise compatible object
     */
    static SerializeAsync(scene: Scene, options?: ISceneSerializerOptions): Promise<any>;
    private static _CollectPromises;
    /**
     * Serialize a mesh into a JSON compatible object
     * @param toSerialize defines the mesh to serialize
     * @param withParents defines if parents must be serialized as well
     * @param withChildren defines if children must be serialized as well
     * @returns a JSON compatible object
     */
    static SerializeMesh(toSerialize: any, withParents?: boolean, withChildren?: boolean): any;
}
