use core::ffi::c_float;
use objc2::{
extern_class, extern_conformance, extern_methods,
rc::{Allocated, Retained},
runtime::NSObject,
};
use objc2_foundation::{CopyingHelper, NSArray, NSCopying, NSObjectProtocol};
use crate::{MTLAccelerationStructureDescriptor, MTLAccelerationStructureGeometryDescriptor, MTLMotionBorderMode};
extern_class!(
#[unsafe(super(MTLAccelerationStructureDescriptor, NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct MTLPrimitiveAccelerationStructureDescriptor;
);
extern_conformance!(
unsafe impl NSCopying for MTLPrimitiveAccelerationStructureDescriptor {}
);
unsafe impl CopyingHelper for MTLPrimitiveAccelerationStructureDescriptor {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for MTLPrimitiveAccelerationStructureDescriptor {}
);
impl MTLPrimitiveAccelerationStructureDescriptor {
extern_methods!(
#[unsafe(method(geometryDescriptors))]
#[unsafe(method_family = none)]
pub fn geometry_descriptors(&self) -> Option<Retained<NSArray<MTLAccelerationStructureGeometryDescriptor>>>;
#[unsafe(method(setGeometryDescriptors:))]
#[unsafe(method_family = none)]
pub fn set_geometry_descriptors(
&self,
geometry_descriptors: Option<&NSArray<MTLAccelerationStructureGeometryDescriptor>>,
);
#[unsafe(method(motionStartBorderMode))]
#[unsafe(method_family = none)]
pub fn motion_start_border_mode(&self) -> MTLMotionBorderMode;
#[unsafe(method(setMotionStartBorderMode:))]
#[unsafe(method_family = none)]
pub fn set_motion_start_border_mode(
&self,
motion_start_border_mode: MTLMotionBorderMode,
);
#[unsafe(method(motionEndBorderMode))]
#[unsafe(method_family = none)]
pub fn motion_end_border_mode(&self) -> MTLMotionBorderMode;
#[unsafe(method(setMotionEndBorderMode:))]
#[unsafe(method_family = none)]
pub fn set_motion_end_border_mode(
&self,
motion_end_border_mode: MTLMotionBorderMode,
);
#[unsafe(method(motionStartTime))]
#[unsafe(method_family = none)]
pub fn motion_start_time(&self) -> c_float;
#[unsafe(method(setMotionStartTime:))]
#[unsafe(method_family = none)]
pub fn set_motion_start_time(
&self,
motion_start_time: c_float,
);
#[unsafe(method(motionEndTime))]
#[unsafe(method_family = none)]
pub fn motion_end_time(&self) -> c_float;
#[unsafe(method(setMotionEndTime:))]
#[unsafe(method_family = none)]
pub fn set_motion_end_time(
&self,
motion_end_time: c_float,
);
#[unsafe(method(motionKeyframeCount))]
#[unsafe(method_family = none)]
pub fn motion_keyframe_count(&self) -> usize;
#[unsafe(method(setMotionKeyframeCount:))]
#[unsafe(method_family = none)]
pub fn set_motion_keyframe_count(
&self,
motion_keyframe_count: usize,
);
#[unsafe(method(descriptor))]
#[unsafe(method_family = none)]
pub fn descriptor() -> Retained<Self>;
);
}
impl MTLPrimitiveAccelerationStructureDescriptor {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}