import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSFastEnumeration } from "../Foundation/NSFastEnumeration.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _NSURL } from "../Foundation/NSURL.js";
import type { _MDLAssetResolver } from "./MDLAssetResolver.js";
import type { _MDLBundleAssetResolver } from "./MDLBundleAssetResolver.js";
import type { _MDLLightProbeIrradianceDataSource } from "./MDLLightProbeIrradianceDataSource.js";
import type { _MDLMeshBufferAllocator } from "./MDLMeshBufferAllocator.js";
import type { _MDLMeshBufferDataAllocator } from "./MDLMeshBufferDataAllocator.js";
import type { _MDLObject } from "./MDLObject.js";
import type { _MDLObjectContainer } from "./MDLObjectContainer.js";
import type { _MDLObjectContainerComponent } from "./MDLObjectContainerComponent.js";
import type { _MDLPathAssetResolver } from "./MDLPathAssetResolver.js";
import type { _MDLRelativeAssetResolver } from "./MDLRelativeAssetResolver.js";
import type { _MDLVertexDescriptor } from "./MDLVertexDescriptor.js";
import type { _GLKMeshBufferAllocator } from "../GLKit/GLKMeshBufferAllocator.js";
import type { _MTKMeshBufferAllocator } from "../MetalKit/MTKMeshBufferAllocator.js";
import type { MDLAxisAlignedBoundingBox } from "../structs/MDLAxisAlignedBoundingBox.js";
import type { MDLProbePlacement } from "./MDLProbePlacement.js";
export declare class _MDLAsset extends _NSObject {
    static alloc(): _MDLAsset;
    static new(): _MDLAsset;
    init(): _MDLAsset;
    /**
     * Indicates whether MDLAsset object can be initialized with resource with the given extension YES is returned if MDLAsset is able to load and represent assets with the given extension
     */
    static canImportFileExtension$(extension: _NSString): boolean;
    /**
     * Indicates whether MDLAsset object can export asset to resource with the given extension YES is returned if MDLAsset is able is able to export assets to resources with the given extension
     */
    static canExportFileExtension$(extension: _NSString): boolean;
    static placeLightProbesWithDensity$heuristic$usingIrradianceDataSource$(value: number, type: MDLProbePlacement, dataSource: _MDLLightProbeIrradianceDataSource): _NSArray;
    /**
     * Initialize an MDLAsset using the contents of the resource located at the indicated URL Vertex layout (i.e. vertexDescriptor) will be specified by ModelIO depending on attributes of the resource. Buffers will be allocated using a default NSData based allocator Submeshes will be converted to triangle topology.
     */
    initWithURL$(URL: _NSURL): _MDLAsset;
    /**
     * Initialize an MDLAsset using the contents of the resource located at URL, ensuring that the asset conforms to the supplied vertexDescriptor, and buffers are allocated in the supplied allocator The default behavior is to triangulate any discovered meshes and to conform the mesh to the supplied vertexDescriptor. If nil is passed as the vertexDescriptor, then a vertexDescriptor will be created according to the attributes of the resource. If nil is passed as the bufferAllocator, buffers will be allocated using a default NSData based allocator. Submeshes will be converted to triangle topology.
     */
    initWithURL$vertexDescriptor$bufferAllocator$(URL: _NSURL | null, vertexDescriptor: _MDLVertexDescriptor | null, bufferAllocator: _MDLMeshBufferAllocator | null): _MDLAsset;
    /**
     * Initialize an empty MDLAsset with a buffer allocator to be used during other operations.
     */
    initWithBufferAllocator$(bufferAllocator: _MDLMeshBufferAllocator | null): _MDLAsset;
    /**
     * Same as initWithURL:vertexDescriptor:bufferAllocator: except that if preserveTopology is YES, a topology buffer might be created on the submeshes. If all faces in a submesh have the same vertex count, then the submesh will a geometry type corresponding to that vertex count. For example, if all faces have four vertices, then the geometry type will be MDLGeometryTypeQuads. If faces have a varying number of vertices, then the the submesh type will be MDLGeometryTypeVariableTopology, and a faceTopologyBuffer will be created.
     */
    initWithURL$vertexDescriptor$bufferAllocator$preserveTopology$error$(URL: _NSURL, vertexDescriptor: _MDLVertexDescriptor | null, bufferAllocator: _MDLMeshBufferAllocator | null, preserveTopology: boolean, error: NobjcObject | null): _MDLAsset;
    /**
     * Export an asset to the specified URL. YES is returned if exporting proceeded successfully,
     */
    exportAssetToURL$(URL: _NSURL): boolean;
    /**
     * Export an asset to the specified URL. YES is returned if exporting proceeded successfully,
     */
    exportAssetToURL$error$(URL: _NSURL, error: NobjcObject | null): boolean;
    /** Return the object at the specified path, or nil if none exists there */
    objectAtPath$(path: _NSString): _MDLObject;
    /**
     * Inspects an asset's hierarchy for objects of the specified class type returns an NSArray of all objects in the asset matching the requested class This can be used to get references to all MDLMesh objects, MDLLights, etc. if objectClass is not a subclass of MDLObject, an exception will be raised.
     */
    childObjectsOfClass$(objectClass: NobjcObject): _NSArray;
    /**
     * Iterates over all material properties on all materials. If they are string values or NSURL values, and can be resolved as textures, then the string and NSURL values will be replaced by MDLTextureSampler values.
     */
    loadTextures(): void;
    /** The bounds of the MDLAsset at the specified time */
    boundingBoxAtTime$(time: number): MDLAxisAlignedBoundingBox;
    /**
     * Add a top level object to an asset. If the object was already in the asset, this has no effect.
     */
    addObject$(object_: _MDLObject): void;
    /**
     * Remove a top level object from an asset. If the object not in the asset, this has no effect.
     */
    removeObject$(object_: _MDLObject): void;
    /** return the indexed top level object */
    objectAtIndexedSubscript$(index: number): _MDLObject | null;
    /**
     * return the indexed top level object
     * @deprecated originals
     */
    objectAtIndex$(index: number): _MDLObject;
    /** The bounds of the MDLAsset at the earliest time sample */
    boundingBox(): MDLAxisAlignedBoundingBox;
    /**
     * Inherent frame rate of an asset If no framerate was specified by resource or resource uncapable of specifying framerate, this value defaults to 0
     */
    frameInterval(): number;
    setFrameInterval$(value: number): void;
    /**
     * Start time bracket of animation data If no animation data was specified by resource or resource incapable of specifying animation data, this value defaults to 0. If startTime was set explicitly, then the value of startTime will be the lesser of the set value and the animated values.
     */
    startTime(): number;
    setStartTime$(value: number): void;
    /**
     * End time bracket of animation data If no animation data was specified by resource or resource incapable of specifying animation data, this value defaults to 0. If the endTime was set explicitly, then the value of endTime will be the greater of the set value and the animated values.
     */
    endTime(): number;
    setEndTime$(value: number): void;
    /**
     * Scene up axis Some imported formats specify a scene up axis. By default Y-axis (0, 1, 0) is used but other values are supported.
     */
    upAxis(): NobjcObject;
    setUpAxis$(value: NobjcObject): void;
    /**
     * URL used to create the asset If the asset was not created with a URL, nil will be returned.
     */
    URL(): _NSURL | null;
    /**
     * Resolver asset that helps find associated files The default asset resolver is the RelativeAssetResolver
     */
    resolver(): _MDLBundleAssetResolver | _MDLPathAssetResolver | _MDLRelativeAssetResolver | null;
    setResolver$(value: _MDLAssetResolver | null): void;
    /** Allocator used to create vertex and index buffers */
    bufferAllocator(): _GLKMeshBufferAllocator | _MDLMeshBufferDataAllocator | _MTKMeshBufferAllocator;
    /**
     * Vertex descriptor set upon asset initialization Will be nil if there was no descriptor set
     */
    vertexDescriptor(): _MDLVertexDescriptor | null;
    /** The number of top level objects */
    count(): number;
    /** @deprecated originals */
    masters(): _MDLObjectContainer;
    setMasters$(value: _MDLObjectContainerComponent): void;
    /**
     * Original objects that can be instanced into the asset's object hierarchy MDLObjectContainerComponent
     */
    originals(): _MDLObjectContainer;
    setOriginals$(value: _MDLObjectContainerComponent): void;
    /**
     * Animations that can be bound to MDLObjects ( MDLAnimationBindComponent) MDLObjectContainerComponent
     */
    animations(): _MDLObjectContainer;
    setAnimations$(value: _MDLObjectContainerComponent): void;
}
export interface _MDLAsset extends _NSCopying, _NSFastEnumeration {
}
