objc2_metal/
acceleration_structure_types.rs1use core::ffi::c_float;
2
3use objc2::encode::{Encode, Encoding, RefEncode};
4
5#[repr(C)]
11#[derive(Clone, Copy, Debug, PartialEq)]
12pub struct MTLPackedFloat3 {
13 pub x: c_float,
14 pub y: c_float,
15 pub z: c_float,
16}
17
18unsafe impl Encode for MTLPackedFloat3 {
19 const ENCODING: Encoding = Encoding::Struct(
20 "_MTLPackedFloat3",
21 &[Encoding::Union(
22 "?",
23 &[
24 Encoding::Struct(
25 "?",
26 &[c_float::ENCODING, c_float::ENCODING, c_float::ENCODING],
27 ),
28 Encoding::Array(3, &c_float::ENCODING),
29 ],
30 )],
31 );
32}
33
34unsafe impl RefEncode for MTLPackedFloat3 {
35 const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
36}
37
38#[cfg(test)]
39#[cfg(feature = "alloc")]
40mod tests {
41 use alloc::string::ToString;
42 use objc2::encode::Encode;
43
44 use crate::MTLPackedFloat4x3;
45
46 #[test]
47 fn test_packed_float() {
48 assert_eq!(
49 MTLPackedFloat4x3::ENCODING.to_string(),
50 "{_MTLPackedFloat4x3=[4{_MTLPackedFloat3=(?={?=fff}[3f])}]}",
51 );
52 }
53}