objc2-metal-performance-shaders 0.3.2

Bindings to the MetalPerformanceShaders framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;
use objc2_metal::*;

use crate::*;

extern_class!(
    /// Dependencies: This depends on Metal.framework
    ///
    /// The MPSNNResizeBilinear filter resizes the source image  using bilinear interpolation to
    /// a destination whose dimensions are given by resizeWidth and resizeHeight
    ///
    /// The number of output feature channels remains the same as the number of input feature
    /// channels.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/metalperformanceshaders/mpsnnresizebilinear?language=objc)
    #[unsafe(super(MPSCNNKernel, MPSKernel, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
    pub struct MPSNNResizeBilinear;
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSCoding for MPSNNResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSCopying for MPSNNResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
unsafe impl CopyingHelper for MPSNNResizeBilinear {
    type Result = Self;
}

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSObjectProtocol for MPSNNResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSSecureCoding for MPSNNResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
impl MPSNNResizeBilinear {
    extern_methods!(
        /// The resize width.
        #[unsafe(method(resizeWidth))]
        #[unsafe(method_family = none)]
        pub unsafe fn resizeWidth(&self) -> NSUInteger;

        /// The resize height.
        #[unsafe(method(resizeHeight))]
        #[unsafe(method_family = none)]
        pub unsafe fn resizeHeight(&self) -> NSUInteger;

        /// If YES, the centers of the 4 corner pixels of the input and output regions are aligned,
        /// preserving the values at the corner pixels.
        /// The default is NO.
        #[unsafe(method(alignCorners))]
        #[unsafe(method_family = none)]
        pub unsafe fn alignCorners(&self) -> bool;

        #[unsafe(method(initWithDevice:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Retained<Self>;

        /// Initialize the resize bilinear filter.
        ///
        /// Parameter `device`: The device the filter will run on.
        ///
        /// Parameter `resizeWidth`: The destination resize width in pixels
        ///
        /// Parameter `resizeHeight`: The destination resize height in pixels
        ///
        /// Parameter `alignCorners`: Specifier whether the centers of the 4 corner pixels of the input and output regions are aligned,
        /// preserving the values at the corner pixels.
        ///
        /// Returns: A valid MPSNNResizeBilinear object or nil, if failure.
        #[unsafe(method(initWithDevice:resizeWidth:resizeHeight:alignCorners:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice_resizeWidth_resizeHeight_alignCorners(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
            resize_width: NSUInteger,
            resize_height: NSUInteger,
            align_corners: bool,
        ) -> Retained<Self>;

        /// NSSecureCoding compatability
        ///
        /// See
        /// MPSKernel#initWithCoder.
        /// Parameter `aDecoder`: The NSCoder subclass with your serialized MPSNNResizeBilinear
        ///
        /// Parameter `device`: The MTLDevice on which to make the MPSNNResizeBilinear
        ///
        /// Returns: A new MPSNNResizeBilinear object, or nil if failure.
        ///
        /// # Safety
        ///
        /// `a_decoder` possibly has further requirements.
        #[unsafe(method(initWithCoder:device:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder_device(
            this: Allocated<Self>,
            a_decoder: &NSCoder,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `MPSKernel`.
#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
impl MPSNNResizeBilinear {
    extern_methods!(
        /// Called by NSCoder to decode MPSKernels
        ///
        /// This isn't the right interface to decode a MPSKernel, but
        /// it is the one that NSCoder uses. To enable your NSCoder
        /// (e.g. NSKeyedUnarchiver) to set which device to use
        /// extend the object to adopt the MPSDeviceProvider
        /// protocol. Otherwise, the Metal system default device
        /// will be used.
        ///
        /// # Safety
        ///
        /// `a_decoder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            a_decoder: &NSCoder,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
impl MPSNNResizeBilinear {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}

extern_class!(
    /// Dependencies: This depends on Metal.framework
    ///
    /// The MPSNNCropAndResizeBilinear filter resizes the source image  using bilinear interpolation to
    /// a destination whose dimensions are given by resizeWidth and resizeHeight
    ///
    /// The number of output feature channels remains the same as the number of input feature
    /// channels.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/metalperformanceshaders/mpsnncropandresizebilinear?language=objc)
    #[unsafe(super(MPSCNNKernel, MPSKernel, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
    pub struct MPSNNCropAndResizeBilinear;
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSCoding for MPSNNCropAndResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSCopying for MPSNNCropAndResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
unsafe impl CopyingHelper for MPSNNCropAndResizeBilinear {
    type Result = Self;
}

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSObjectProtocol for MPSNNCropAndResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
extern_conformance!(
    unsafe impl NSSecureCoding for MPSNNCropAndResizeBilinear {}
);

#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
impl MPSNNCropAndResizeBilinear {
    extern_methods!(
        /// The resize width.
        #[unsafe(method(resizeWidth))]
        #[unsafe(method_family = none)]
        pub unsafe fn resizeWidth(&self) -> NSUInteger;

        /// The resize height.
        #[unsafe(method(resizeHeight))]
        #[unsafe(method_family = none)]
        pub unsafe fn resizeHeight(&self) -> NSUInteger;

        /// the number of bounding box i.e. regions to resize.
        #[unsafe(method(numberOfRegions))]
        #[unsafe(method_family = none)]
        pub unsafe fn numberOfRegions(&self) -> NSUInteger;

        #[cfg(feature = "MPSCoreTypes")]
        /// This is a pointer to "numberOfRegions" boxes which specify the locations in the
        /// source image to use for each box/region to perform the resize operation.
        /// The coordinates specified are normalized values.  A normalized region outside the
        /// [0, 1] range is allowed, in which case we use extrapolation_value to extrapolate
        /// the input image values.
        #[unsafe(method(regions))]
        #[unsafe(method_family = none)]
        pub unsafe fn regions(&self) -> NonNull<MPSRegion>;

        #[unsafe(method(initWithDevice:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Retained<Self>;

        #[cfg(feature = "MPSCoreTypes")]
        /// Initialize the crop and resize bilinear filter.
        ///
        /// Parameter `device`: The device the filter will run on.
        ///
        /// Parameter `resizeWidth`: The destination resize width in pixels
        ///
        /// Parameter `resizeHeight`: The destination resize height in pixels
        ///
        /// Parameter `numberOfRegions`: Specifies the number of bounding box i.e. regions to resize
        ///
        /// Parameter `regions`: This is a pointer to "numberOfRegions" boxes which specify the locations in the
        /// source image to use for each box/region to perform the resize operation.
        ///
        /// Returns: A valid MPSNNCropAndResizeBilinear object or nil, if failure.
        ///
        /// # Safety
        ///
        /// `regions` must be a valid pointer.
        #[unsafe(method(initWithDevice:resizeWidth:resizeHeight:numberOfRegions:regions:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice_resizeWidth_resizeHeight_numberOfRegions_regions(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
            resize_width: NSUInteger,
            resize_height: NSUInteger,
            number_of_regions: NSUInteger,
            regions: NonNull<MPSRegion>,
        ) -> Retained<Self>;

        /// NSSecureCoding compatability
        ///
        /// See
        /// MPSKernel#initWithCoder.
        /// Parameter `aDecoder`: The NSCoder subclass with your serialized MPSNNCropAndResizeBilinear
        ///
        /// Parameter `device`: The MTLDevice on which to make the MPSNNCropAndResizeBilinear
        ///
        /// Returns: A new MPSNNResizeBilinear object, or nil if failure.
        ///
        /// # Safety
        ///
        /// `a_decoder` possibly has further requirements.
        #[unsafe(method(initWithCoder:device:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder_device(
            this: Allocated<Self>,
            a_decoder: &NSCoder,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `MPSKernel`.
#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
impl MPSNNCropAndResizeBilinear {
    extern_methods!(
        /// Called by NSCoder to decode MPSKernels
        ///
        /// This isn't the right interface to decode a MPSKernel, but
        /// it is the one that NSCoder uses. To enable your NSCoder
        /// (e.g. NSKeyedUnarchiver) to set which device to use
        /// extend the object to adopt the MPSDeviceProvider
        /// protocol. Otherwise, the Metal system default device
        /// will be used.
        ///
        /// # Safety
        ///
        /// `a_decoder` possibly has further requirements.
        #[unsafe(method(initWithCoder:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCoder(
            this: Allocated<Self>,
            a_decoder: &NSCoder,
        ) -> Option<Retained<Self>>;
    );
}

/// Methods declared on superclass `NSObject`.
#[cfg(all(feature = "MPSCNNKernel", feature = "MPSCore", feature = "MPSKernel"))]
impl MPSNNCropAndResizeBilinear {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}