objc2_metal/
capture.rs

1#![allow(unused_imports)]
2use crate::*;
3use objc2::runtime::{AnyObject, ProtocolObject};
4
5// SAFETY: The documentation for captureObject specifies that the object
6// may be one of these three:
7// <https://developer.apple.com/documentation/metal/mtlcapturedescriptor/3237248-captureobject?language=objc>
8impl MTLCaptureDescriptor {
9    #[doc(alias = "setCaptureObject")]
10    #[cfg(feature = "MTLDevice")]
11    pub fn set_capture_device(&self, device: &ProtocolObject<dyn MTLDevice>) {
12        let device: *const _ = device;
13        let device: *const AnyObject = device.cast();
14        unsafe { self.setCaptureObject(Some(&*device)) }
15    }
16
17    #[doc(alias = "setCaptureObject")]
18    #[cfg(feature = "MTLCaptureScope")]
19    pub fn set_capture_scope(&self, scope: &ProtocolObject<dyn MTLCaptureScope>) {
20        let scope: *const _ = scope;
21        let scope: *const AnyObject = scope.cast();
22        unsafe { self.setCaptureObject(Some(&*scope)) }
23    }
24
25    #[doc(alias = "setCaptureObject")]
26    #[cfg(feature = "MTLCommandQueue")]
27    pub fn set_capture_command_queue(&self, command_queue: &ProtocolObject<dyn MTLCommandQueue>) {
28        let command_queue: *const _ = command_queue;
29        let command_queue: *const AnyObject = command_queue.cast();
30        unsafe { self.setCaptureObject(Some(&*command_queue)) }
31    }
32}