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::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
#[cfg(feature = "objc2-core-graphics")]
use objc2_core_graphics::*;
use objc2_foundation::*;
use objc2_metal::*;

use crate::*;

extern_class!(
    /// The MPSImageConversion filter performs a conversion from source to destination
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/metalperformanceshaders/mpsimageconversion?language=objc)
    #[unsafe(super(MPSUnaryImageKernel, MPSKernel, NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
    pub struct MPSImageConversion;
);

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

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

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

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

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

#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
impl MPSImageConversion {
    extern_methods!(
        #[cfg(feature = "MPSImageTypes")]
        /// Premultiplication description for the source texture
        ///
        /// Most colorspace conversion operations can not work directly on premultiplied data.
        /// Use this property to tag premultiplied data so that the source texture can
        /// be unpremultiplied prior to application of these transforms.
        /// Default: MPSPixelAlpha_AlphaIsOne
        #[unsafe(method(sourceAlpha))]
        #[unsafe(method_family = none)]
        pub unsafe fn sourceAlpha(&self) -> MPSAlphaType;

        #[cfg(feature = "MPSImageTypes")]
        /// Premultiplication description for the destinationAlpha texture
        ///
        /// Colorspace conversion operations produce non-premultiplied data.
        /// Use this property to tag cases where premultiplied results are required.
        /// If MPSPixelAlpha_AlphaIsOne is used, the alpha channel will be set to 1.
        /// Default: MPSPixelAlpha_AlphaIsOne
        #[unsafe(method(destinationAlpha))]
        #[unsafe(method_family = none)]
        pub unsafe fn destinationAlpha(&self) -> MPSAlphaType;

        #[cfg(all(
            feature = "MPSImageTypes",
            feature = "objc2-core-foundation",
            feature = "objc2-core-graphics"
        ))]
        /// Create a converter that can convert texture colorspace, alpha and texture format
        ///
        /// Create a converter that can convert texture colorspace, alpha and MTLPixelFormat.
        /// Optimized cases exist for NULL color space converter and no alpha conversion.
        ///
        /// Parameter `device`: The device the filter will run on
        ///
        /// Parameter `srcAlpha`: The alpha encoding for the source texture
        ///
        /// Parameter `destAlpha`: The alpha encoding for the destination texture
        ///
        /// Parameter `backgroundColor`: An array of CGFloats giving the background color to use when flattening an image.
        /// The color is in the source colorspace.  The length of the array is the number
        /// of color channels in the src colorspace. If NULL, use {0}.
        ///
        /// Parameter `conversionInfo`: The colorspace conversion to use. May be NULL, indicating no
        /// color space conversions need to be done.
        ///
        ///
        /// Returns: An initialized MPSImageConversion object.
        ///
        /// # Safety
        ///
        /// `background_color` must be a valid pointer or null.
        #[unsafe(method(initWithDevice:srcAlpha:destAlpha:backgroundColor:conversionInfo:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice_srcAlpha_destAlpha_backgroundColor_conversionInfo(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
            src_alpha: MPSAlphaType,
            dest_alpha: MPSAlphaType,
            background_color: *mut CGFloat,
            conversion_info: Option<&CGColorConversionInfo>,
        ) -> Retained<Self>;
    );
}

/// Methods declared on superclass `MPSUnaryImageKernel`.
#[cfg(all(feature = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
impl MPSImageConversion {
    extern_methods!(
        /// Standard init with default properties per filter type
        ///
        /// Parameter `device`: The device that the filter will be used on. May not be NULL.
        ///
        /// Returns: a pointer to the newly initialized object. This will fail, returning
        /// nil if the device is not supported. Devices must be
        /// MTLFeatureSet_iOS_GPUFamily2_v1 or later.
        #[unsafe(method(initWithDevice:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithDevice(
            this: Allocated<Self>,
            device: &ProtocolObject<dyn MTLDevice>,
        ) -> Retained<Self>;

        /// NSSecureCoding compatability
        ///
        /// While the standard NSSecureCoding/NSCoding method
        /// -initWithCoder: should work, since the file can't
        /// know which device your data is allocated on, we
        /// have to guess and may guess incorrectly.  To avoid
        /// that problem, use initWithCoder:device instead.
        ///
        /// Parameter `aDecoder`: The NSCoder subclass with your serialized MPSKernel
        ///
        /// Parameter `device`: The MTLDevice on which to make the MPSKernel
        ///
        /// Returns: A new MPSKernel 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 = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
impl MPSImageConversion {
    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 = "MPSCore", feature = "MPSImageKernel", feature = "MPSKernel"))]
impl MPSImageConversion {
    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>;
    );
}