import { IGXC_Object, Scene, Transform } from "../IGXC";
import { ResourcesLoadMode } from ".";
import { ResourceAtlas } from "./ResourceAtlas";
import { ITextureMapping } from "../Material";
export declare type NativeObject = object;
export interface ObjectLoaderCapabilities {
    nodeUpdates?: boolean;
    geometryUpdates?: boolean;
}
export interface ObjectLoaderOptions {
    loadMode: ResourcesLoadMode;
    computeNormals: boolean;
}
export interface SetComponentMaterialParams {
    material?: string;
    preview?: boolean;
    geometryNormalMap?: string;
    aoTransform?: number[];
    aoMapFileName?: string;
    geoUvMapping?: ITextureMapping;
}
export interface IObjectLoader<Component = NativeObject, Context = any> {
    capabilities: ObjectLoaderCapabilities;
    preloadResources?(igxc: Scene, options: ObjectLoaderOptions, context: Context, resourceAtlas: ResourceAtlas): Promise<void>;
    getComponentState(component: Component): Pick<IGXC_Object, "Transform" | "Material" | "Geometry" | "MaterialCategory" | "GeometryParameters" | "AOTransform"> & {
        AOMap?: string;
    };
    createContext?(igxc: Scene): Context;
    createComponent(componentId: string, parent: Component, options: ObjectLoaderOptions, context: Context): Component;
    setComponentData(component: Component, properties: IGXC_Object, options: ObjectLoaderOptions, context: Context): void;
    setComponentTransform(component: Component, transform: Required<Transform>, options: ObjectLoaderOptions, context: Context): void;
    setComponentMaterials(component: Component, properties: SetComponentMaterialParams, options: ObjectLoaderOptions, context: Context): Promise<void>;
    setComponentGeometry(component: Component, properties: IGXC_Object, options: ObjectLoaderOptions, context: Context): Promise<void>;
    postProcessRootComponent?(component: Component, options: ObjectLoaderOptions, context: Context): void;
}
