use objc2::{
extern_class, extern_conformance, extern_methods,
rc::{Allocated, Retained},
runtime::{NSObject, ProtocolObject},
};
use objc2_foundation::{CopyingHelper, NSArray, NSCopying, NSObjectProtocol};
use crate::{
MTLAccelerationStructure, MTLAccelerationStructureDescriptor, MTLAccelerationStructureInstanceDescriptorType,
MTLBuffer, MTLMatrixLayout, MTLTransformType,
};
extern_class!(
#[unsafe(super(MTLAccelerationStructureDescriptor, NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct MTLInstanceAccelerationStructureDescriptor;
);
extern_conformance!(
unsafe impl NSCopying for MTLInstanceAccelerationStructureDescriptor {}
);
unsafe impl CopyingHelper for MTLInstanceAccelerationStructureDescriptor {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for MTLInstanceAccelerationStructureDescriptor {}
);
impl MTLInstanceAccelerationStructureDescriptor {
extern_methods!(
#[unsafe(method(instanceDescriptorBuffer))]
#[unsafe(method_family = none)]
pub fn instance_descriptor_buffer(&self) -> Option<Retained<ProtocolObject<dyn MTLBuffer>>>;
#[unsafe(method(setInstanceDescriptorBuffer:))]
#[unsafe(method_family = none)]
pub fn set_instance_descriptor_buffer(
&self,
instance_descriptor_buffer: Option<&ProtocolObject<dyn MTLBuffer>>,
);
#[unsafe(method(instanceDescriptorBufferOffset))]
#[unsafe(method_family = none)]
pub fn instance_descriptor_buffer_offset(&self) -> usize;
#[unsafe(method(setInstanceDescriptorBufferOffset:))]
#[unsafe(method_family = none)]
pub fn set_instance_descriptor_buffer_offset(
&self,
instance_descriptor_buffer_offset: usize,
);
#[unsafe(method(instanceDescriptorStride))]
#[unsafe(method_family = none)]
pub fn instance_descriptor_stride(&self) -> usize;
#[unsafe(method(setInstanceDescriptorStride:))]
#[unsafe(method_family = none)]
pub fn set_instance_descriptor_stride(
&self,
instance_descriptor_stride: usize,
);
#[unsafe(method(instanceCount))]
#[unsafe(method_family = none)]
pub fn instance_count(&self) -> usize;
#[unsafe(method(setInstanceCount:))]
#[unsafe(method_family = none)]
pub fn set_instance_count(
&self,
instance_count: usize,
);
#[unsafe(method(instancedAccelerationStructures))]
#[unsafe(method_family = none)]
pub fn instanced_acceleration_structures(
&self
) -> Option<Retained<NSArray<ProtocolObject<dyn MTLAccelerationStructure>>>>;
#[unsafe(method(setInstancedAccelerationStructures:))]
#[unsafe(method_family = none)]
pub fn set_instanced_acceleration_structures(
&self,
instanced_acceleration_structures: Option<&NSArray<ProtocolObject<dyn MTLAccelerationStructure>>>,
);
#[unsafe(method(instanceDescriptorType))]
#[unsafe(method_family = none)]
pub fn instance_descriptor_type(&self) -> MTLAccelerationStructureInstanceDescriptorType;
#[unsafe(method(setInstanceDescriptorType:))]
#[unsafe(method_family = none)]
pub fn set_instance_descriptor_type(
&self,
instance_descriptor_type: MTLAccelerationStructureInstanceDescriptorType,
);
#[unsafe(method(motionTransformBuffer))]
#[unsafe(method_family = none)]
pub fn motion_transform_buffer(&self) -> Option<Retained<ProtocolObject<dyn MTLBuffer>>>;
#[unsafe(method(setMotionTransformBuffer:))]
#[unsafe(method_family = none)]
pub fn set_motion_transform_buffer(
&self,
motion_transform_buffer: Option<&ProtocolObject<dyn MTLBuffer>>,
);
#[unsafe(method(motionTransformBufferOffset))]
#[unsafe(method_family = none)]
pub fn motion_transform_buffer_offset(&self) -> usize;
#[unsafe(method(setMotionTransformBufferOffset:))]
#[unsafe(method_family = none)]
pub fn set_motion_transform_buffer_offset(
&self,
motion_transform_buffer_offset: usize,
);
#[unsafe(method(motionTransformCount))]
#[unsafe(method_family = none)]
pub fn motion_transform_count(&self) -> usize;
#[unsafe(method(setMotionTransformCount:))]
#[unsafe(method_family = none)]
pub fn set_motion_transform_count(
&self,
motion_transform_count: usize,
);
#[unsafe(method(instanceTransformationMatrixLayout))]
#[unsafe(method_family = none)]
pub fn instance_transformation_matrix_layout(&self) -> MTLMatrixLayout;
#[unsafe(method(setInstanceTransformationMatrixLayout:))]
#[unsafe(method_family = none)]
pub fn set_instance_transformation_matrix_layout(
&self,
instance_transformation_matrix_layout: MTLMatrixLayout,
);
#[unsafe(method(motionTransformType))]
#[unsafe(method_family = none)]
pub fn motion_transform_type(&self) -> MTLTransformType;
#[unsafe(method(setMotionTransformType:))]
#[unsafe(method_family = none)]
pub fn set_motion_transform_type(
&self,
motion_transform_type: MTLTransformType,
);
#[unsafe(method(motionTransformStride))]
#[unsafe(method_family = none)]
pub fn motion_transform_stride(&self) -> usize;
#[unsafe(method(setMotionTransformStride:))]
#[unsafe(method_family = none)]
pub fn set_motion_transform_stride(
&self,
motion_transform_stride: usize,
);
#[unsafe(method(descriptor))]
#[unsafe(method_family = none)]
pub fn descriptor() -> Retained<Self>;
);
}
impl MTLInstanceAccelerationStructureDescriptor {
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>;
);
}