use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;
use crate::*;
extern "C" {
pub static MTLCaptureErrorDomain: &'static NSErrorDomain;
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MTLCaptureError(pub NSInteger);
impl MTLCaptureError {
#[doc(alias = "MTLCaptureErrorNotSupported")]
pub const NotSupported: Self = Self(1);
#[doc(alias = "MTLCaptureErrorAlreadyCapturing")]
pub const AlreadyCapturing: Self = Self(2);
#[doc(alias = "MTLCaptureErrorInvalidDescriptor")]
pub const InvalidDescriptor: Self = Self(3);
}
unsafe impl Encode for MTLCaptureError {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for MTLCaptureError {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MTLCaptureDestination(pub NSInteger);
impl MTLCaptureDestination {
#[doc(alias = "MTLCaptureDestinationDeveloperTools")]
pub const DeveloperTools: Self = Self(1);
#[doc(alias = "MTLCaptureDestinationGPUTraceDocument")]
pub const GPUTraceDocument: Self = Self(2);
}
unsafe impl Encode for MTLCaptureDestination {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for MTLCaptureDestination {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct MTLCaptureDescriptor;
);
extern_conformance!(
unsafe impl NSCopying for MTLCaptureDescriptor {}
);
unsafe impl CopyingHelper for MTLCaptureDescriptor {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for MTLCaptureDescriptor {}
);
impl MTLCaptureDescriptor {
extern_methods!(
#[unsafe(method(captureObject))]
#[unsafe(method_family = none)]
pub fn captureObject(&self) -> Option<Retained<AnyObject>>;
#[unsafe(method(setCaptureObject:))]
#[unsafe(method_family = none)]
pub unsafe fn setCaptureObject(&self, capture_object: Option<&AnyObject>);
#[unsafe(method(destination))]
#[unsafe(method_family = none)]
pub fn destination(&self) -> MTLCaptureDestination;
#[unsafe(method(setDestination:))]
#[unsafe(method_family = none)]
pub fn setDestination(&self, destination: MTLCaptureDestination);
#[unsafe(method(outputURL))]
#[unsafe(method_family = none)]
pub fn outputURL(&self) -> Option<Retained<NSURL>>;
#[unsafe(method(setOutputURL:))]
#[unsafe(method_family = none)]
pub fn setOutputURL(&self, output_url: Option<&NSURL>);
);
}
impl MTLCaptureDescriptor {
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>;
);
}
impl DefaultRetained for MTLCaptureDescriptor {
#[inline]
fn default_retained() -> Retained<Self> {
Self::new()
}
}
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct MTLCaptureManager;
);
extern_conformance!(
unsafe impl NSObjectProtocol for MTLCaptureManager {}
);
impl MTLCaptureManager {
extern_methods!(
#[unsafe(method(sharedCaptureManager))]
#[unsafe(method_family = none)]
pub unsafe fn sharedCaptureManager() -> Retained<MTLCaptureManager>;
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub fn init(this: Allocated<Self>) -> Retained<Self>;
#[cfg(all(feature = "MTLCaptureScope", feature = "MTLDevice"))]
#[unsafe(method(newCaptureScopeWithDevice:))]
#[unsafe(method_family = new)]
pub fn newCaptureScopeWithDevice(
&self,
device: &ProtocolObject<dyn MTLDevice>,
) -> Retained<ProtocolObject<dyn MTLCaptureScope>>;
#[cfg(all(feature = "MTLCaptureScope", feature = "MTLCommandQueue"))]
#[unsafe(method(newCaptureScopeWithCommandQueue:))]
#[unsafe(method_family = new)]
pub fn newCaptureScopeWithCommandQueue(
&self,
command_queue: &ProtocolObject<dyn MTLCommandQueue>,
) -> Retained<ProtocolObject<dyn MTLCaptureScope>>;
#[cfg(all(feature = "MTL4CommandQueue", feature = "MTLCaptureScope"))]
#[unsafe(method(newCaptureScopeWithMTL4CommandQueue:))]
#[unsafe(method_family = new)]
pub fn newCaptureScopeWithMTL4CommandQueue(
&self,
command_queue: &ProtocolObject<dyn MTL4CommandQueue>,
) -> Retained<ProtocolObject<dyn MTLCaptureScope>>;
#[unsafe(method(supportsDestination:))]
#[unsafe(method_family = none)]
pub fn supportsDestination(&self, destination: MTLCaptureDestination) -> bool;
#[unsafe(method(startCaptureWithDescriptor:error:_))]
#[unsafe(method_family = none)]
pub fn startCaptureWithDescriptor_error(
&self,
descriptor: &MTLCaptureDescriptor,
) -> Result<(), Retained<NSError>>;
#[cfg(feature = "MTLDevice")]
#[deprecated = "Use startCaptureWithDescriptor:error: instead"]
#[unsafe(method(startCaptureWithDevice:))]
#[unsafe(method_family = none)]
pub fn startCaptureWithDevice(&self, device: &ProtocolObject<dyn MTLDevice>);
#[cfg(feature = "MTLCommandQueue")]
#[deprecated = "Use startCaptureWithDescriptor:error: instead"]
#[unsafe(method(startCaptureWithCommandQueue:))]
#[unsafe(method_family = none)]
pub fn startCaptureWithCommandQueue(
&self,
command_queue: &ProtocolObject<dyn MTLCommandQueue>,
);
#[cfg(feature = "MTLCaptureScope")]
#[deprecated = "Use startCaptureWithDescriptor:error: instead"]
#[unsafe(method(startCaptureWithScope:))]
#[unsafe(method_family = none)]
pub fn startCaptureWithScope(&self, capture_scope: &ProtocolObject<dyn MTLCaptureScope>);
#[unsafe(method(stopCapture))]
#[unsafe(method_family = none)]
pub fn stopCapture(&self);
#[cfg(feature = "MTLCaptureScope")]
#[unsafe(method(defaultCaptureScope))]
#[unsafe(method_family = none)]
pub fn defaultCaptureScope(&self) -> Option<Retained<ProtocolObject<dyn MTLCaptureScope>>>;
#[cfg(feature = "MTLCaptureScope")]
#[unsafe(method(setDefaultCaptureScope:))]
#[unsafe(method_family = none)]
pub fn setDefaultCaptureScope(
&self,
default_capture_scope: Option<&ProtocolObject<dyn MTLCaptureScope>>,
);
#[unsafe(method(isCapturing))]
#[unsafe(method_family = none)]
pub fn isCapturing(&self) -> bool;
);
}
impl MTLCaptureManager {
extern_methods!(
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new() -> Retained<Self>;
);
}
impl DefaultRetained for MTLCaptureManager {
#[inline]
fn default_retained() -> Retained<Self> {
Self::new()
}
}