pub struct MDLSubmeshTopology { /* private fields */ }MDLSubmesh only.Expand description
Implementations§
Source§impl MDLSubmeshTopology
impl MDLSubmeshTopology
Sourcepub unsafe fn initWithSubmesh(
this: Allocated<Self>,
submesh: &MDLSubmesh,
) -> Retained<Self>
pub unsafe fn initWithSubmesh( this: Allocated<Self>, submesh: &MDLSubmesh, ) -> Retained<Self>
create a topology object corresponding to the topology in the submesh
Sourcepub unsafe fn faceTopology(
&self,
) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn faceTopology( &self, ) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.A buffer of 8 bit unsigned integer values, where each entry corresponds to the number of vertices making up a face.
A submesh containing two triangles, a four sided polygon, and a line, would contain the data 3 3 4 2. If geometryType is of a fixed type, such as triangles, the buffer is optional, and will be created on demand if read.
Indices to the vertex buffer will be stored in the index buffer correspondingly. In the example above, the indices would be stored in order, three indices for the first triangle, followed by three for the second, followed by four for the polygon, and finally two indices for the line.
Sourcepub unsafe fn setFaceTopology(
&self,
face_topology: Option<&ProtocolObject<dyn MDLMeshBuffer>>,
)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setFaceTopology( &self, face_topology: Option<&ProtocolObject<dyn MDLMeshBuffer>>, )
MDLMeshBuffer only.Setter for faceTopology.
Sourcepub unsafe fn faceCount(&self) -> NSUInteger
pub unsafe fn faceCount(&self) -> NSUInteger
The number of faces encoded in faceTopologyBuffer
Sourcepub unsafe fn setFaceCount(&self, face_count: NSUInteger)
pub unsafe fn setFaceCount(&self, face_count: NSUInteger)
Setter for faceCount.
Sourcepub unsafe fn vertexCreaseIndices(
&self,
) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn vertexCreaseIndices( &self, ) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.A crease value at a vertex to be applied during subdivision. Vertex creases A zero value is smooth, a one value is peaked. It is intended to be used with an index buffer, where the index buffer entries are vertex indices. The corresponding values in the corner sharpness attribute indicate the corner sharpness of those vertices. The index buffer is sparse. If a mesh has three sharp vertices, then the index buffer will have three entries. Since the number of entries in this vertex buffer is likely to be different than the number of entries in any other vertex buffer, it shouldn’t be interleaved with other data.
Sourcepub unsafe fn setVertexCreaseIndices(
&self,
vertex_crease_indices: Option<&ProtocolObject<dyn MDLMeshBuffer>>,
)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setVertexCreaseIndices( &self, vertex_crease_indices: Option<&ProtocolObject<dyn MDLMeshBuffer>>, )
MDLMeshBuffer only.Setter for vertexCreaseIndices.
pub unsafe fn vertexCreases( &self, ) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.Sourcepub unsafe fn setVertexCreases(
&self,
vertex_creases: Option<&ProtocolObject<dyn MDLMeshBuffer>>,
)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setVertexCreases( &self, vertex_creases: Option<&ProtocolObject<dyn MDLMeshBuffer>>, )
MDLMeshBuffer only.Setter for vertexCreases.
Sourcepub unsafe fn vertexCreaseCount(&self) -> NSUInteger
pub unsafe fn vertexCreaseCount(&self) -> NSUInteger
The number of vertex creases encoded in vertexCreases
Sourcepub unsafe fn setVertexCreaseCount(&self, vertex_crease_count: NSUInteger)
pub unsafe fn setVertexCreaseCount(&self, vertex_crease_count: NSUInteger)
Setter for vertexCreaseCount.
Sourcepub unsafe fn edgeCreaseIndices(
&self,
) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn edgeCreaseIndices( &self, ) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.A crease value at an edge to be applied during subdivision. Edge creases A zero value is smooth, a one value is peaked. It is intended to be used with an index buffer, where the index buffer entries are edge index pairs. Accordingly, there will be two index entries for each edge sharpness entry, and the sharpness entry corresponds to the edge itself. The corresponding values in the edge sharpness attribute indicate the edge sharpness of those edges. The index buffer is sparse. If a mesh has three sharp edges, then the index buffer will have six entries. Since the number of entries in this vertex buffer is likely to be different than the number of entries in any other vertex buffer, it shouldn’t be interleaved with other data.
Sourcepub unsafe fn setEdgeCreaseIndices(
&self,
edge_crease_indices: Option<&ProtocolObject<dyn MDLMeshBuffer>>,
)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setEdgeCreaseIndices( &self, edge_crease_indices: Option<&ProtocolObject<dyn MDLMeshBuffer>>, )
MDLMeshBuffer only.Setter for edgeCreaseIndices.
pub unsafe fn edgeCreases( &self, ) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.Sourcepub unsafe fn setEdgeCreases(
&self,
edge_creases: Option<&ProtocolObject<dyn MDLMeshBuffer>>,
)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setEdgeCreases( &self, edge_creases: Option<&ProtocolObject<dyn MDLMeshBuffer>>, )
MDLMeshBuffer only.Setter for edgeCreases.
Sourcepub unsafe fn edgeCreaseCount(&self) -> NSUInteger
pub unsafe fn edgeCreaseCount(&self) -> NSUInteger
The number of edge creases encoded in edgeCreases
Sourcepub unsafe fn setEdgeCreaseCount(&self, edge_crease_count: NSUInteger)
pub unsafe fn setEdgeCreaseCount(&self, edge_crease_count: NSUInteger)
Setter for edgeCreaseCount.
Sourcepub unsafe fn holes(
&self,
) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
Available on crate feature MDLMeshBuffer only.
pub unsafe fn holes( &self, ) -> Option<Retained<ProtocolObject<dyn MDLMeshBuffer>>>
MDLMeshBuffer only.The hole attribute is a vertex attribute of single integer values where each integer is an index of a face that is to be used as a hole. If there are two holes in a mesh, then the vertex buffer will have two entries. Since the number of entries in this vertex buffer is likely to be different than the number of entries in any other vertex buffer, it shouldn’t be interleaved with other data.
Sourcepub unsafe fn setHoles(&self, holes: Option<&ProtocolObject<dyn MDLMeshBuffer>>)
Available on crate feature MDLMeshBuffer only.
pub unsafe fn setHoles(&self, holes: Option<&ProtocolObject<dyn MDLMeshBuffer>>)
MDLMeshBuffer only.Setter for holes.
Sourcepub unsafe fn holeCount(&self) -> NSUInteger
pub unsafe fn holeCount(&self) -> NSUInteger
The number of holes encoded in holes
Sourcepub unsafe fn setHoleCount(&self, hole_count: NSUInteger)
pub unsafe fn setHoleCount(&self, hole_count: NSUInteger)
Setter for holeCount.
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 AsRef<AnyObject> for MDLSubmeshTopology
impl AsRef<AnyObject> for MDLSubmeshTopology
Source§impl AsRef<MDLSubmeshTopology> for MDLSubmeshTopology
impl AsRef<MDLSubmeshTopology> for MDLSubmeshTopology
Source§impl AsRef<NSObject> for MDLSubmeshTopology
impl AsRef<NSObject> for MDLSubmeshTopology
Source§impl Borrow<AnyObject> for MDLSubmeshTopology
impl Borrow<AnyObject> for MDLSubmeshTopology
Source§impl Borrow<NSObject> for MDLSubmeshTopology
impl Borrow<NSObject> for MDLSubmeshTopology
Source§impl ClassType for MDLSubmeshTopology
impl ClassType for MDLSubmeshTopology
Source§const NAME: &'static str = "MDLSubmeshTopology"
const NAME: &'static str = "MDLSubmeshTopology"
Source§type ThreadKind = <<MDLSubmeshTopology as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<MDLSubmeshTopology as ClassType>::Super as ClassType>::ThreadKind
Source§impl Debug for MDLSubmeshTopology
impl Debug for MDLSubmeshTopology
Source§impl Deref for MDLSubmeshTopology
impl Deref for MDLSubmeshTopology
Source§impl Hash for MDLSubmeshTopology
impl Hash for MDLSubmeshTopology
Source§impl Message for MDLSubmeshTopology
impl Message for MDLSubmeshTopology
Source§impl NSObjectProtocol for MDLSubmeshTopology
impl NSObjectProtocol for MDLSubmeshTopology
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