//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-open-gl")]
#[cfg(target_vendor = "apple")]
use objc2_open_gl::*;

use crate::*;

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglglobaloption?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSOpenGLGlobalOption(pub u32);
impl NSOpenGLGlobalOption {
    #[doc(alias = "NSOpenGLGOFormatCacheSize")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const GLGOFormatCacheSize: Self = Self(501);
    #[doc(alias = "NSOpenGLGOClearFormatCache")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const GLGOClearFormatCache: Self = Self(502);
    #[doc(alias = "NSOpenGLGORetainRenderers")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const GLGORetainRenderers: Self = Self(503);
    #[doc(alias = "NSOpenGLGOUseBuildCache")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const GLGOUseBuildCache: Self = Self(506);
    #[doc(alias = "NSOpenGLGOResetLibrary")]
    #[deprecated]
    pub const GLGOResetLibrary: Self = Self(504);
}

unsafe impl Encode for NSOpenGLGlobalOption {
    const ENCODING: Encoding = u32::ENCODING;
}

unsafe impl RefEncode for NSOpenGLGlobalOption {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

#[cfg(feature = "objc2-open-gl")]
#[cfg(target_vendor = "apple")]
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
#[inline]
pub extern "C-unwind" fn NSOpenGLSetOption(pname: NSOpenGLGlobalOption, param: GLint) {
    extern "C-unwind" {
        fn NSOpenGLSetOption(pname: NSOpenGLGlobalOption, param: GLint);
    }
    unsafe { NSOpenGLSetOption(pname, param) }
}

extern "C-unwind" {
    /// # Safety
    ///
    /// `param` must be a valid pointer.
    #[cfg(feature = "objc2-open-gl")]
    #[cfg(target_vendor = "apple")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub fn NSOpenGLGetOption(pname: NSOpenGLGlobalOption, param: NonNull<GLint>);
}

extern "C-unwind" {
    /// # Safety
    ///
    /// - `major` must be a valid pointer or null.
    /// - `minor` must be a valid pointer or null.
    #[cfg(feature = "objc2-open-gl")]
    #[cfg(target_vendor = "apple")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub fn NSOpenGLGetVersion(major: *mut GLint, minor: *mut GLint);
}

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaallrenderers?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAllRenderers: c_uint = 1;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfatriplebuffer?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFATripleBuffer: c_uint = 3;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfadoublebuffer?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFADoubleBuffer: c_uint = 5;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaauxbuffers?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAuxBuffers: c_uint = 7;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfacolorsize?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAColorSize: c_uint = 8;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaalphasize?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAlphaSize: c_uint = 11;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfadepthsize?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFADepthSize: c_uint = 12;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfastencilsize?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAStencilSize: c_uint = 13;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaaccumsize?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAccumSize: c_uint = 14;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaminimumpolicy?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAMinimumPolicy: c_uint = 51;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfamaximumpolicy?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAMaximumPolicy: c_uint = 52;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfasamplebuffers?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFASampleBuffers: c_uint = 55;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfasamples?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFASamples: c_uint = 56;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaauxdepthstencil?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAuxDepthStencil: c_uint = 57;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfacolorfloat?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAColorFloat: c_uint = 58;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfamultisample?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAMultisample: c_uint = 59;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfasupersample?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFASupersample: c_uint = 60;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfasamplealpha?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFASampleAlpha: c_uint = 61;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfarendererid?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFARendererID: c_uint = 70;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfanorecovery?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFANoRecovery: c_uint = 72;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaaccelerated?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAccelerated: c_uint = 73;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaclosestpolicy?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAClosestPolicy: c_uint = 74;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfabackingstore?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFABackingStore: c_uint = 76;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfascreenmask?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAScreenMask: c_uint = 84;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaallowofflinerenderers?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAllowOfflineRenderers: c_uint = 96;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaacceleratedcompute?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAAcceleratedCompute: c_uint = 97;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaopenglprofile?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAOpenGLProfile: c_uint = 99;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfavirtualscreencount?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLPFAVirtualScreenCount: c_uint = 128;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfastereo?language=objc)
#[deprecated]
pub const NSOpenGLPFAStereo: c_uint = 6;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaoffscreen?language=objc)
#[deprecated]
pub const NSOpenGLPFAOffScreen: c_uint = 53;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfafullscreen?language=objc)
#[deprecated]
pub const NSOpenGLPFAFullScreen: c_uint = 54;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfasinglerenderer?language=objc)
#[deprecated]
pub const NSOpenGLPFASingleRenderer: c_uint = 71;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfarobust?language=objc)
#[deprecated]
pub const NSOpenGLPFARobust: c_uint = 75;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfampsafe?language=objc)
#[deprecated]
pub const NSOpenGLPFAMPSafe: c_uint = 78;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfawindow?language=objc)
#[deprecated]
pub const NSOpenGLPFAWindow: c_uint = 80;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfamultiscreen?language=objc)
#[deprecated]
pub const NSOpenGLPFAMultiScreen: c_uint = 81;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfacompliant?language=objc)
#[deprecated]
pub const NSOpenGLPFACompliant: c_uint = 83;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfapixelbuffer?language=objc)
#[deprecated]
pub const NSOpenGLPFAPixelBuffer: c_uint = 90;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpfaremotepixelbuffer?language=objc)
#[deprecated]
pub const NSOpenGLPFARemotePixelBuffer: c_uint = 91;

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpixelformatattribute?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub type NSOpenGLPixelFormatAttribute = u32;

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglprofileversionlegacy?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLProfileVersionLegacy: c_uint = 0x1000;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglprofileversion3_2core?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLProfileVersion3_2Core: c_uint = 0x3200;
/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglprofileversion4_1core?language=objc)
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
pub const NSOpenGLProfileVersion4_1Core: c_uint = 0x4100;

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpixelformat?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Please use Metal or MetalKit."]
    pub struct NSOpenGLPixelFormat;
);

extern_conformance!(
    unsafe impl NSCoding for NSOpenGLPixelFormat {}
);

extern_conformance!(
    unsafe impl NSObjectProtocol for NSOpenGLPixelFormat {}
);

impl NSOpenGLPixelFormat {
    extern_methods!(
        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `format` must be a valid pointer.
        #[unsafe(method(initWithCGLPixelFormatObj:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCGLPixelFormatObj(
            this: Allocated<Self>,
            format: CGLPixelFormatObj,
        ) -> Option<Retained<NSOpenGLPixelFormat>>;

        /// # Safety
        ///
        /// `attribs` must be a valid pointer.
        #[unsafe(method(initWithAttributes:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithAttributes(
            this: Allocated<Self>,
            attribs: NonNull<NSOpenGLPixelFormatAttribute>,
        ) -> Option<Retained<Self>>;

        /// # Safety
        ///
        /// `attribs` might not allow `None`.
        #[deprecated = "Use -initWithAttributes: instead"]
        #[unsafe(method(initWithData:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithData(
            this: Allocated<Self>,
            attribs: Option<&NSData>,
        ) -> Option<Retained<Self>>;

        #[deprecated]
        #[unsafe(method(attributes))]
        #[unsafe(method_family = none)]
        pub fn attributes(&self) -> Option<Retained<NSData>>;

        /// # Safety
        ///
        /// `attribs` might not allow `None`.
        #[deprecated]
        #[unsafe(method(setAttributes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setAttributes(&self, attribs: Option<&NSData>);

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `vals` must be a valid pointer.
        #[unsafe(method(getValues:forAttribute:forVirtualScreen:))]
        #[unsafe(method_family = none)]
        pub unsafe fn getValues_forAttribute_forVirtualScreen(
            &self,
            vals: NonNull<GLint>,
            attrib: NSOpenGLPixelFormatAttribute,
            screen: GLint,
        );

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[unsafe(method(numberOfVirtualScreens))]
        #[unsafe(method_family = none)]
        pub fn numberOfVirtualScreens(&self) -> GLint;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[unsafe(method(CGLPixelFormatObj))]
        #[unsafe(method_family = none)]
        pub fn CGLPixelFormatObj(&self) -> CGLPixelFormatObj;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSOpenGLPixelFormat {
    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 NSOpenGLPixelFormat {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}

extern_class!(
    /// *******************
    /// * NSOpenGLPixelBuffer
    /// *******************
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglpixelbuffer?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Use GL_EXT_framebuffer_object instead"]
    pub struct NSOpenGLPixelBuffer;
);

extern_conformance!(
    unsafe impl NSObjectProtocol for NSOpenGLPixelBuffer {}
);

impl NSOpenGLPixelBuffer {
    extern_methods!(
        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(initWithTextureTarget:textureInternalFormat:textureMaxMipMapLevel:pixelsWide:pixelsHigh:))]
        #[unsafe(method_family = init)]
        pub fn initWithTextureTarget_textureInternalFormat_textureMaxMipMapLevel_pixelsWide_pixelsHigh(
            this: Allocated<Self>,
            target: GLenum,
            format: GLenum,
            max_level: GLint,
            pixels_wide: GLsizei,
            pixels_high: GLsizei,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `pbuffer` must be a valid pointer.
        #[deprecated]
        #[unsafe(method(initWithCGLPBufferObj:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCGLPBufferObj(
            this: Allocated<Self>,
            pbuffer: CGLPBufferObj,
        ) -> Option<Retained<NSOpenGLPixelBuffer>>;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[unsafe(method(CGLPBufferObj))]
        #[unsafe(method_family = none)]
        pub fn CGLPBufferObj(&self) -> CGLPBufferObj;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(pixelsWide))]
        #[unsafe(method_family = none)]
        pub fn pixelsWide(&self) -> GLsizei;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(pixelsHigh))]
        #[unsafe(method_family = none)]
        pub fn pixelsHigh(&self) -> GLsizei;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(textureTarget))]
        #[unsafe(method_family = none)]
        pub fn textureTarget(&self) -> GLenum;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(textureInternalFormat))]
        #[unsafe(method_family = none)]
        pub fn textureInternalFormat(&self) -> GLenum;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(textureMaxMipMapLevel))]
        #[unsafe(method_family = none)]
        pub fn textureMaxMipMapLevel(&self) -> GLint;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSOpenGLPixelBuffer {
    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 NSOpenGLPixelBuffer {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}

/// ***************
/// * NSOpenGLContext
/// ***************
///
/// See also [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcontextparameter?language=objc)
// NS_ENUM
#[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSOpenGLContextParameter(pub NSInteger);
impl NSOpenGLContextParameter {
    #[doc(alias = "NSOpenGLContextParameterSwapInterval")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const SwapInterval: Self = Self(222);
    #[doc(alias = "NSOpenGLContextParameterSurfaceOrder")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const SurfaceOrder: Self = Self(235);
    #[doc(alias = "NSOpenGLContextParameterSurfaceOpacity")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const SurfaceOpacity: Self = Self(236);
    #[doc(alias = "NSOpenGLContextParameterSurfaceBackingSize")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const SurfaceBackingSize: Self = Self(304);
    #[doc(alias = "NSOpenGLContextParameterReclaimResources")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const ReclaimResources: Self = Self(308);
    #[doc(alias = "NSOpenGLContextParameterCurrentRendererID")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const CurrentRendererID: Self = Self(309);
    #[doc(alias = "NSOpenGLContextParameterGPUVertexProcessing")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const GPUVertexProcessing: Self = Self(310);
    #[doc(alias = "NSOpenGLContextParameterGPUFragmentProcessing")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const GPUFragmentProcessing: Self = Self(311);
    #[doc(alias = "NSOpenGLContextParameterHasDrawable")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const HasDrawable: Self = Self(314);
    #[doc(alias = "NSOpenGLContextParameterMPSwapsInFlight")]
    #[deprecated = "OpenGL API deprecated; please use Metal and MetalKit.  (Define GL_SILENCE_DEPRECATION to silence these warnings.)"]
    pub const MPSwapsInFlight: Self = Self(315);
    #[doc(alias = "NSOpenGLContextParameterSwapRectangle")]
    #[deprecated]
    pub const SwapRectangle: Self = Self(200);
    #[doc(alias = "NSOpenGLContextParameterSwapRectangleEnable")]
    #[deprecated]
    pub const SwapRectangleEnable: Self = Self(201);
    #[doc(alias = "NSOpenGLContextParameterRasterizationEnable")]
    #[deprecated]
    pub const RasterizationEnable: Self = Self(221);
    #[doc(alias = "NSOpenGLContextParameterStateValidation")]
    #[deprecated]
    pub const StateValidation: Self = Self(301);
    #[doc(alias = "NSOpenGLContextParameterSurfaceSurfaceVolatile")]
    #[deprecated]
    pub const SurfaceSurfaceVolatile: Self = Self(306);
}

unsafe impl Encode for NSOpenGLContextParameter {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for NSOpenGLContextParameter {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    /// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcontext?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "Please use Metal or MetalKit."]
    pub struct NSOpenGLContext;
);

extern_conformance!(
    unsafe impl NSLocking for NSOpenGLContext {}
);

extern_conformance!(
    unsafe impl NSObjectProtocol for NSOpenGLContext {}
);

impl NSOpenGLContext {
    extern_methods!(
        #[unsafe(method(initWithFormat:shareContext:))]
        #[unsafe(method_family = init)]
        pub fn initWithFormat_shareContext(
            this: Allocated<Self>,
            format: &NSOpenGLPixelFormat,
            share: Option<&NSOpenGLContext>,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `context` must be a valid pointer.
        #[unsafe(method(initWithCGLContextObj:))]
        #[unsafe(method_family = init)]
        pub unsafe fn initWithCGLContextObj(
            this: Allocated<Self>,
            context: CGLContextObj,
        ) -> Option<Retained<NSOpenGLContext>>;

        #[unsafe(method(pixelFormat))]
        #[unsafe(method_family = none)]
        pub fn pixelFormat(&self) -> Retained<NSOpenGLPixelFormat>;

        #[cfg(all(feature = "NSResponder", feature = "NSView"))]
        #[deprecated]
        #[unsafe(method(view))]
        #[unsafe(method_family = none)]
        pub fn view(&self, mtm: MainThreadMarker) -> Option<Retained<NSView>>;

        #[cfg(all(feature = "NSResponder", feature = "NSView"))]
        /// Setter for [`view`][Self::view].
        ///
        /// This is a [weak property][objc2::topics::weak_property].
        #[deprecated]
        #[unsafe(method(setView:))]
        #[unsafe(method_family = none)]
        pub fn setView(&self, view: Option<&NSView>, mtm: MainThreadMarker);

        #[deprecated = "Use a fullscreen NSOpenGLView instead"]
        #[unsafe(method(setFullScreen))]
        #[unsafe(method_family = none)]
        pub fn setFullScreen(&self);

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `baseaddr` must be a valid pointer.
        #[deprecated]
        #[unsafe(method(setOffScreen:width:height:rowbytes:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setOffScreen_width_height_rowbytes(
            &self,
            baseaddr: NonNull<c_void>,
            width: GLsizei,
            height: GLsizei,
            rowbytes: GLint,
        );

        #[unsafe(method(clearDrawable))]
        #[unsafe(method_family = none)]
        pub fn clearDrawable(&self);

        #[unsafe(method(update))]
        #[unsafe(method_family = none)]
        pub fn update(&self, mtm: MainThreadMarker);

        #[unsafe(method(flushBuffer))]
        #[unsafe(method_family = none)]
        pub fn flushBuffer(&self);

        #[unsafe(method(makeCurrentContext))]
        #[unsafe(method_family = none)]
        pub fn makeCurrentContext(&self);

        #[unsafe(method(clearCurrentContext))]
        #[unsafe(method_family = none)]
        pub fn clearCurrentContext();

        #[unsafe(method(currentContext))]
        #[unsafe(method_family = none)]
        pub fn currentContext() -> Option<Retained<NSOpenGLContext>>;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(copyAttributesFromContext:withMask:))]
        #[unsafe(method_family = none)]
        pub fn copyAttributesFromContext_withMask(
            &self,
            context: &NSOpenGLContext,
            mask: GLbitfield,
        );

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `vals` must be a valid pointer.
        #[unsafe(method(setValues:forParameter:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setValues_forParameter(
            &self,
            vals: NonNull<GLint>,
            param: NSOpenGLContextParameter,
        );

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// # Safety
        ///
        /// `vals` must be a valid pointer.
        #[unsafe(method(getValues:forParameter:))]
        #[unsafe(method_family = none)]
        pub unsafe fn getValues_forParameter(
            &self,
            vals: NonNull<GLint>,
            param: NSOpenGLContextParameter,
        );

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[unsafe(method(currentVirtualScreen))]
        #[unsafe(method_family = none)]
        pub fn currentVirtualScreen(&self) -> GLint;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        /// Setter for [`currentVirtualScreen`][Self::currentVirtualScreen].
        #[unsafe(method(setCurrentVirtualScreen:))]
        #[unsafe(method_family = none)]
        pub fn setCurrentVirtualScreen(&self, current_virtual_screen: GLint);

        #[cfg(all(feature = "NSResponder", feature = "NSView", feature = "objc2-open-gl"))]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(createTexture:fromView:internalFormat:))]
        #[unsafe(method_family = none)]
        pub fn createTexture_fromView_internalFormat(
            &self,
            target: GLenum,
            view: &NSView,
            format: GLenum,
        );

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[unsafe(method(CGLContextObj))]
        #[unsafe(method_family = none)]
        pub fn CGLContextObj(&self) -> CGLContextObj;
    );
}

/// Methods declared on superclass `NSObject`.
impl NSOpenGLContext {
    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 NSOpenGLContext {
    #[inline]
    fn default_retained() -> Retained<Self> {
        Self::new()
    }
}

/// NSOpenGLPixelBuffer.
impl NSOpenGLContext {
    extern_methods!(
        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(setPixelBuffer:cubeMapFace:mipMapLevel:currentVirtualScreen:))]
        #[unsafe(method_family = none)]
        pub fn setPixelBuffer_cubeMapFace_mipMapLevel_currentVirtualScreen(
            &self,
            pixel_buffer: &NSOpenGLPixelBuffer,
            face: GLenum,
            level: GLint,
            screen: GLint,
        );

        #[deprecated]
        #[unsafe(method(pixelBuffer))]
        #[unsafe(method_family = none)]
        pub fn pixelBuffer(&self) -> Option<Retained<NSOpenGLPixelBuffer>>;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(pixelBufferCubeMapFace))]
        #[unsafe(method_family = none)]
        pub fn pixelBufferCubeMapFace(&self) -> GLenum;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(pixelBufferMipMapLevel))]
        #[unsafe(method_family = none)]
        pub fn pixelBufferMipMapLevel(&self) -> GLint;

        #[cfg(feature = "objc2-open-gl")]
        #[cfg(target_vendor = "apple")]
        #[deprecated]
        #[unsafe(method(setTextureImageToPixelBuffer:colorBuffer:))]
        #[unsafe(method_family = none)]
        pub fn setTextureImageToPixelBuffer_colorBuffer(
            &self,
            pixel_buffer: &NSOpenGLPixelBuffer,
            source: GLenum,
        );
    );
}

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpswapinterval?language=objc)
#[deprecated]
pub static NSOpenGLCPSwapInterval: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SwapInterval.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpsurfaceorder?language=objc)
#[deprecated]
pub static NSOpenGLCPSurfaceOrder: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SurfaceOrder.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpsurfaceopacity?language=objc)
#[deprecated]
pub static NSOpenGLCPSurfaceOpacity: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SurfaceOpacity.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpsurfacebackingsize?language=objc)
#[deprecated]
pub static NSOpenGLCPSurfaceBackingSize: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SurfaceBackingSize.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpreclaimresources?language=objc)
#[deprecated]
pub static NSOpenGLCPReclaimResources: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::ReclaimResources.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpcurrentrendererid?language=objc)
#[deprecated]
pub static NSOpenGLCPCurrentRendererID: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::CurrentRendererID.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpgpuvertexprocessing?language=objc)
#[deprecated]
pub static NSOpenGLCPGPUVertexProcessing: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::GPUVertexProcessing.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpgpufragmentprocessing?language=objc)
#[deprecated]
pub static NSOpenGLCPGPUFragmentProcessing: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::GPUFragmentProcessing.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcphasdrawable?language=objc)
#[deprecated]
pub static NSOpenGLCPHasDrawable: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::HasDrawable.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpmpswapsinflight?language=objc)
#[deprecated]
pub static NSOpenGLCPMPSwapsInFlight: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::MPSwapsInFlight.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpswaprectangle?language=objc)
#[deprecated]
pub static NSOpenGLCPSwapRectangle: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SwapRectangle.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpswaprectangleenable?language=objc)
#[deprecated]
pub static NSOpenGLCPSwapRectangleEnable: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SwapRectangleEnable.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcprasterizationenable?language=objc)
#[deprecated]
pub static NSOpenGLCPRasterizationEnable: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::RasterizationEnable.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpstatevalidation?language=objc)
#[deprecated]
pub static NSOpenGLCPStateValidation: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::StateValidation.0);

/// [Apple's documentation](https://developer.apple.com/documentation/appkit/nsopenglcpsurfacesurfacevolatile?language=objc)
#[deprecated]
pub static NSOpenGLCPSurfaceSurfaceVolatile: NSOpenGLContextParameter =
    NSOpenGLContextParameter(NSOpenGLContextParameter::SurfaceSurfaceVolatile.0);
