pub struct MDLAsset { /* private fields */ }MDLAsset only.Expand description
An MDLAsset represents the contents of a model file.
Each asset contains a collection of hierarchies of objects, where each object in the asset is the top level of a hierarchy. Objects include transforms, lights, cameras, and meshes.
MDLAssets are typically instantiated from NSURLs that refer to a model resource.
The model resource may represented timed information, for example, a series of mesh morphs. If the asset is timed, then the framerate will be non-zero, and the firstFrame and lastFrame properties will indicate the range for which sample data exists. Samples before or after that range will be clamped. Some model resource representations allow continuous sampling, others are discrete. In the discrete case, if a requested sample time is not on a discrete boundary the returned sample will be the sample exactly on the sample time, or if no such is available, the immediately preceding sample. If no time is specified for a sample, the first data will be returned.
An asset’s bounding box can be queried without traversing the hierarchy of objects.
Fast enumeration of an MDLAsset iterates the top level objects contained within.
See also Apple’s documentation
Implementations§
Source§impl MDLAsset
impl MDLAsset
Sourcepub unsafe fn initWithURL(this: Allocated<Self>, url: &NSURL) -> Retained<Self>
pub unsafe fn initWithURL(this: Allocated<Self>, url: &NSURL) -> Retained<Self>
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.
Sourcepub unsafe fn initWithURL_vertexDescriptor_bufferAllocator(
this: Allocated<Self>,
url: Option<&NSURL>,
vertex_descriptor: Option<&MDLVertexDescriptor>,
buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>,
) -> Retained<Self>
Available on crate features MDLMeshBuffer and MDLVertexDescriptor only.
pub unsafe fn initWithURL_vertexDescriptor_bufferAllocator( this: Allocated<Self>, url: Option<&NSURL>, vertex_descriptor: Option<&MDLVertexDescriptor>, buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>
MDLMeshBuffer and MDLVertexDescriptor only.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.
Sourcepub unsafe fn initWithBufferAllocator(
this: Allocated<Self>,
buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>,
) -> Retained<Self>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn initWithBufferAllocator( this: Allocated<Self>, buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, ) -> Retained<Self>
MDLMeshBuffer only.Initialize an empty MDLAsset with a buffer allocator to be used during other operations.
Sourcepub unsafe fn initWithURL_vertexDescriptor_bufferAllocator_preserveTopology_error(
this: Allocated<Self>,
url: &NSURL,
vertex_descriptor: Option<&MDLVertexDescriptor>,
buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>,
preserve_topology: bool,
error: Option<&mut Option<Retained<NSError>>>,
) -> Retained<Self>
Available on crate features MDLMeshBuffer and MDLVertexDescriptor only.
pub unsafe fn initWithURL_vertexDescriptor_bufferAllocator_preserveTopology_error( this: Allocated<Self>, url: &NSURL, vertex_descriptor: Option<&MDLVertexDescriptor>, buffer_allocator: Option<&ProtocolObject<dyn MDLMeshBufferAllocator>>, preserve_topology: bool, error: Option<&mut Option<Retained<NSError>>>, ) -> Retained<Self>
MDLMeshBuffer and MDLVertexDescriptor only.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.
Sourcepub unsafe fn exportAssetToURL(&self, url: &NSURL) -> bool
pub unsafe fn exportAssetToURL(&self, url: &NSURL) -> bool
Export an asset to the specified URL.
Returns: YES is returned if exporting proceeded successfully,
Sourcepub unsafe fn exportAssetToURL_error(
&self,
url: &NSURL,
) -> Result<(), Retained<NSError>>
pub unsafe fn exportAssetToURL_error( &self, url: &NSURL, ) -> Result<(), Retained<NSError>>
Export an asset to the specified URL.
Returns: YES is returned if exporting proceeded successfully,
Sourcepub unsafe fn objectAtPath(&self, path: &NSString) -> Retained<MDLObject>
Available on crate feature MDLObject only.
pub unsafe fn objectAtPath(&self, path: &NSString) -> Retained<MDLObject>
MDLObject only.Return the object at the specified path, or nil if none exists there
Sourcepub unsafe fn canImportFileExtension(extension: &NSString) -> bool
pub unsafe fn canImportFileExtension(extension: &NSString) -> bool
Indicates whether MDLAsset object can be initialized with resource with the given extension
Returns: YES is returned if MDLAsset is able to load and represent assets with the given extension
Sourcepub unsafe fn canExportFileExtension(extension: &NSString) -> bool
pub unsafe fn canExportFileExtension(extension: &NSString) -> bool
Indicates whether MDLAsset object can export asset to resource with the given extension
Returns: YES is returned if MDLAsset is able is able to export assets to resources with the given extension
Sourcepub unsafe fn childObjectsOfClass(
&self,
object_class: &AnyClass,
) -> Retained<NSArray<MDLObject>>
Available on crate feature MDLObject only.
pub unsafe fn childObjectsOfClass( &self, object_class: &AnyClass, ) -> Retained<NSArray<MDLObject>>
MDLObject only.Inspects an asset’s hierarchy for objects of the specified class type
Returns: 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.
§Safety
object_class probably has further requirements.
Sourcepub unsafe fn loadTextures(&self)
pub unsafe fn loadTextures(&self)
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.
Sourcepub unsafe fn frameInterval(&self) -> NSTimeInterval
pub unsafe fn frameInterval(&self) -> NSTimeInterval
Inherent frame rate of an asset
If no framerate was specified by resource or resource uncapable of specifying framerate, this value defaults to 0
Sourcepub unsafe fn setFrameInterval(&self, frame_interval: NSTimeInterval)
pub unsafe fn setFrameInterval(&self, frame_interval: NSTimeInterval)
Setter for frameInterval.
Sourcepub unsafe fn startTime(&self) -> NSTimeInterval
pub unsafe fn startTime(&self) -> NSTimeInterval
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.
Sourcepub unsafe fn setStartTime(&self, start_time: NSTimeInterval)
pub unsafe fn setStartTime(&self, start_time: NSTimeInterval)
Setter for startTime.
Sourcepub unsafe fn endTime(&self) -> NSTimeInterval
pub unsafe fn endTime(&self) -> NSTimeInterval
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.
Sourcepub unsafe fn setEndTime(&self, end_time: NSTimeInterval)
pub unsafe fn setEndTime(&self, end_time: NSTimeInterval)
Setter for endTime.
Sourcepub unsafe fn URL(&self) -> Option<Retained<NSURL>>
pub unsafe fn URL(&self) -> Option<Retained<NSURL>>
URL used to create the asset
If the asset was not created with a URL, nil will be returned.
Sourcepub unsafe fn resolver(
&self,
) -> Option<Retained<ProtocolObject<dyn MDLAssetResolver>>>
Available on crate feature MDLAssetResolver only.
pub unsafe fn resolver( &self, ) -> Option<Retained<ProtocolObject<dyn MDLAssetResolver>>>
MDLAssetResolver only.Resolver asset that helps find associated files
The default asset resolver is the RelativeAssetResolver
Sourcepub unsafe fn setResolver(
&self,
resolver: Option<&ProtocolObject<dyn MDLAssetResolver>>,
)
Available on crate feature MDLAssetResolver only.
pub unsafe fn setResolver( &self, resolver: Option<&ProtocolObject<dyn MDLAssetResolver>>, )
MDLAssetResolver only.Setter for resolver.
Sourcepub unsafe fn bufferAllocator(
&self,
) -> Retained<ProtocolObject<dyn MDLMeshBufferAllocator>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn bufferAllocator( &self, ) -> Retained<ProtocolObject<dyn MDLMeshBufferAllocator>>
MDLMeshBuffer only.Allocator used to create vertex and index buffers
Sourcepub unsafe fn vertexDescriptor(&self) -> Option<Retained<MDLVertexDescriptor>>
Available on crate feature MDLVertexDescriptor only.
pub unsafe fn vertexDescriptor(&self) -> Option<Retained<MDLVertexDescriptor>>
MDLVertexDescriptor only.Vertex descriptor set upon asset initialization
Will be nil if there was no descriptor set
Sourcepub unsafe fn addObject(&self, object: &MDLObject)
Available on crate feature MDLObject only.
pub unsafe fn addObject(&self, object: &MDLObject)
MDLObject only.Add a top level object to an asset.
If the object was already in the asset, this has no effect.
Sourcepub unsafe fn removeObject(&self, object: &MDLObject)
Available on crate feature MDLObject only.
pub unsafe fn removeObject(&self, object: &MDLObject)
MDLObject only.Remove a top level object from an asset.
If the object not in the asset, this has no effect.
Sourcepub unsafe fn count(&self) -> NSUInteger
pub unsafe fn count(&self) -> NSUInteger
The number of top level objects
Sourcepub unsafe fn objectAtIndexedSubscript(
&self,
index: NSUInteger,
) -> Option<Retained<MDLObject>>
Available on crate feature MDLObject only.
pub unsafe fn objectAtIndexedSubscript( &self, index: NSUInteger, ) -> Option<Retained<MDLObject>>
MDLObject only.return the indexed top level object
Sourcepub unsafe fn objectAtIndex(&self, index: NSUInteger) -> Retained<MDLObject>
Available on crate feature MDLObject only.
pub unsafe fn objectAtIndex(&self, index: NSUInteger) -> Retained<MDLObject>
MDLObject only.return the indexed top level object
pub unsafe fn masters( &self, ) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
MDLTypes only.Sourcepub unsafe fn setMasters(
&self,
masters: &ProtocolObject<dyn MDLObjectContainerComponent>,
)
👎DeprecatedAvailable on crate feature MDLTypes only.
pub unsafe fn setMasters( &self, masters: &ProtocolObject<dyn MDLObjectContainerComponent>, )
MDLTypes only.Setter for masters.
Sourcepub unsafe fn originals(
&self,
) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
Available on crate feature MDLTypes only.
pub unsafe fn originals( &self, ) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
MDLTypes only.Original objects that can be instanced into the asset’s object hierarchy
See: MDLObjectContainerComponent
Sourcepub unsafe fn setOriginals(
&self,
originals: &ProtocolObject<dyn MDLObjectContainerComponent>,
)
Available on crate feature MDLTypes only.
pub unsafe fn setOriginals( &self, originals: &ProtocolObject<dyn MDLObjectContainerComponent>, )
MDLTypes only.Setter for originals.
Sourcepub unsafe fn animations(
&self,
) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
Available on crate feature MDLTypes only.
pub unsafe fn animations( &self, ) -> Retained<ProtocolObject<dyn MDLObjectContainerComponent>>
MDLTypes only.Animations that can be bound to MDLObjects (
See: MDLAnimationBindComponent)
See: MDLObjectContainerComponent
Sourcepub unsafe fn setAnimations(
&self,
animations: &ProtocolObject<dyn MDLObjectContainerComponent>,
)
Available on crate feature MDLTypes only.
pub unsafe fn setAnimations( &self, animations: &ProtocolObject<dyn MDLObjectContainerComponent>, )
MDLTypes only.Setter for animations.
Source§impl MDLAsset
MDLLightBaking.
impl MDLAsset
MDLLightBaking.
Given a light probe density, method places light probes in the scene according to the passed in placement heuristic type. The higher the density, the greater the number of light probes placed in the scene.
Using the placement heuristic MDLProbePlacementUniformGrid places the light probes in the scene as a uniform grid. The placement heuristic MDLProbePlacementIrradianceDistribution places the light probes in areas of greatest irradiance change.
pub unsafe fn placeLightProbesWithDensity_heuristic_usingIrradianceDataSource( value: c_float, type: MDLProbePlacement, data_source: &ProtocolObject<dyn MDLLightProbeIrradianceDataSource>, ) -> Retained<NSArray<MDLLightProbe>>
MDLLight and MDLObject and MDLTypes only.Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init/new methods).
§Example
Check that an instance of NSObject has the precise class NSObject.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load instead.Use Ivar::load instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T.
See Ivar::load_ptr for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T.
This is the reference-variant. Use Retained::downcast if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString to a NSMutableString,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass: for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject.
§Panics
This works internally by calling isKindOfClass:. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject and
NSProxy implement this method.
§Examples
Cast an NSString back and forth from NSObject.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();Try (and fail) to cast an NSObject to an NSString.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}Trait Implementations§
Source§impl ClassType for MDLAsset
impl ClassType for MDLAsset
Source§const NAME: &'static str = "MDLAsset"
const NAME: &'static str = "MDLAsset"
Source§type ThreadKind = <<MDLAsset as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<MDLAsset as ClassType>::Super as ClassType>::ThreadKind
Source§impl CopyingHelper for MDLAsset
impl CopyingHelper for MDLAsset
Source§impl NSCopying for MDLAsset
impl NSCopying for MDLAsset
Source§impl NSFastEnumeration for MDLAsset
impl NSFastEnumeration for MDLAsset
Source§impl NSObjectProtocol for MDLAsset
impl NSObjectProtocol for MDLAsset
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref