    {-# OPTIONS_HADDOCK hide #-}
    --------------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
    -- Copyright   :  (c) Sven Panne 2002-2019
    -- License     :  BSD3
    --
    -- Maintainer  :  Sven Panne <svenpanne@gmail.com>
    -- Stability   :  stable
    -- Portability :  portable
    --
    -- This is a purely internal module for marshaling texture targets.
    --
    --------------------------------------------------------------------------------

    module Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget (
       -- * Texture Target Classification
       BindableTextureTarget(..),
       ParameterizedTextureTarget(..),
       OneDimensionalTextureTarget(..),
       TwoDimensionalTextureTarget(..),
       ThreeDimensionalTextureTarget(..),
       QueryableTextureTarget(..),
       GettableTextureTarget(..),

       -- * One-Dimensional Texture Targets
       TextureTarget1D(..),

       -- * Two-Dimensional Texture Targets
       TextureTarget2D(..),
       TextureTarget2DMultisample(..),
       TextureTargetCubeMap(..),
       TextureTargetCubeMapFace(..),
       unmarshalTextureTargetCubeMapFace,

       -- * Three-Dimensional Texture Targets
       TextureTarget3D(..),
       TextureTarget2DMultisampleArray(..),

       -- * Texture Buffer Target
       TextureTargetBuffer(..)
    ) where

    import Graphics.Rendering.OpenGL.GL.Capability
    import Graphics.Rendering.OpenGL.GL.PixelRectangles.ColorTable
    import Graphics.Rendering.OpenGL.GL.QueryUtils.PName
    import Graphics.GL

    --------------------------------------------------------------------------------

    class BindableTextureTarget t where
       marshalBindableTextureTarget :: t -> GLenum
       marshalBindableTextureTargetPName1I :: t -> PName1I

    class ParameterizedTextureTarget t where
       marshalParameterizedTextureTarget :: t -> GLenum
       marshalParameterizedTextureTargetProxy :: t -> GLenum
       marshalParameterizedTextureTargetEnableCap :: t -> EnableCap

    class OneDimensionalTextureTarget t where
       marshalOneDimensionalTextureTarget :: Proxy -> t -> GLenum

    class TwoDimensionalTextureTarget t where
       marshalTwoDimensionalTextureTarget :: Proxy -> t -> GLenum

    class ThreeDimensionalTextureTarget t where
       marshalThreeDimensionalTextureTarget :: Proxy -> t -> GLenum

    class QueryableTextureTarget t where
       marshalQueryableTextureTarget :: t -> GLenum

    class GettableTextureTarget t where
       marshalGettableTextureTarget :: t -> GLenum

    --------------------------------------------------------------------------------

    data TextureTarget1D = Texture1D
       deriving ( TextureTarget1D -> TextureTarget1D -> Bool
    (TextureTarget1D -> TextureTarget1D -> Bool)
    -> (TextureTarget1D -> TextureTarget1D -> Bool)
    -> Eq TextureTarget1D
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTarget1D -> TextureTarget1D -> Bool
    == :: TextureTarget1D -> TextureTarget1D -> Bool
    $c/= :: TextureTarget1D -> TextureTarget1D -> Bool
    /= :: TextureTarget1D -> TextureTarget1D -> Bool
    Eq, Eq TextureTarget1D
    Eq TextureTarget1D =>
    (TextureTarget1D -> TextureTarget1D -> Ordering)
    -> (TextureTarget1D -> TextureTarget1D -> Bool)
    -> (TextureTarget1D -> TextureTarget1D -> Bool)
    -> (TextureTarget1D -> TextureTarget1D -> Bool)
    -> (TextureTarget1D -> TextureTarget1D -> Bool)
    -> (TextureTarget1D -> TextureTarget1D -> TextureTarget1D)
    -> (TextureTarget1D -> TextureTarget1D -> TextureTarget1D)
    -> Ord TextureTarget1D
    TextureTarget1D -> TextureTarget1D -> Bool
    TextureTarget1D -> TextureTarget1D -> Ordering
    TextureTarget1D -> TextureTarget1D -> TextureTarget1D
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTarget1D -> TextureTarget1D -> Ordering
    compare :: TextureTarget1D -> TextureTarget1D -> Ordering
    $c< :: TextureTarget1D -> TextureTarget1D -> Bool
    < :: TextureTarget1D -> TextureTarget1D -> Bool
    $c<= :: TextureTarget1D -> TextureTarget1D -> Bool
    <= :: TextureTarget1D -> TextureTarget1D -> Bool
    $c> :: TextureTarget1D -> TextureTarget1D -> Bool
    > :: TextureTarget1D -> TextureTarget1D -> Bool
    $c>= :: TextureTarget1D -> TextureTarget1D -> Bool
    >= :: TextureTarget1D -> TextureTarget1D -> Bool
    $cmax :: TextureTarget1D -> TextureTarget1D -> TextureTarget1D
    max :: TextureTarget1D -> TextureTarget1D -> TextureTarget1D
    $cmin :: TextureTarget1D -> TextureTarget1D -> TextureTarget1D
    min :: TextureTarget1D -> TextureTarget1D -> TextureTarget1D
    Ord, Int -> TextureTarget1D -> ShowS
    [TextureTarget1D] -> ShowS
    TextureTarget1D -> String
    (Int -> TextureTarget1D -> ShowS)
    -> (TextureTarget1D -> String)
    -> ([TextureTarget1D] -> ShowS)
    -> Show TextureTarget1D
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTarget1D -> ShowS
    showsPrec :: Int -> TextureTarget1D -> ShowS
    $cshow :: TextureTarget1D -> String
    show :: TextureTarget1D -> String
    $cshowList :: [TextureTarget1D] -> ShowS
    showList :: [TextureTarget1D] -> ShowS
    Show )

    instance BindableTextureTarget TextureTarget1D where
       marshalBindableTextureTarget :: TextureTarget1D -> GLenum
    marshalBindableTextureTarget = TextureTarget1D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
       marshalBindableTextureTargetPName1I :: TextureTarget1D -> PName1I
    marshalBindableTextureTargetPName1I TextureTarget1D
    t = case TextureTarget1D
    t of
          TextureTarget1D
    Texture1D -> PName1I
    GetTextureBinding1D

    instance ParameterizedTextureTarget TextureTarget1D where
       marshalParameterizedTextureTarget :: TextureTarget1D -> GLenum
    marshalParameterizedTextureTarget TextureTarget1D
    t = case TextureTarget1D
    t of
          TextureTarget1D
    Texture1D -> GLenum
    GL_TEXTURE_1D
       marshalParameterizedTextureTargetProxy :: TextureTarget1D -> GLenum
    marshalParameterizedTextureTargetProxy TextureTarget1D
    t = case TextureTarget1D
    t of
          TextureTarget1D
    Texture1D -> GLenum
    GL_PROXY_TEXTURE_1D
       marshalParameterizedTextureTargetEnableCap :: TextureTarget1D -> EnableCap
    marshalParameterizedTextureTargetEnableCap TextureTarget1D
    t = case TextureTarget1D
    t of
          TextureTarget1D
    Texture1D -> EnableCap
    CapTexture1D

    instance OneDimensionalTextureTarget TextureTarget1D where
       marshalOneDimensionalTextureTarget :: Proxy -> TextureTarget1D -> GLenum
    marshalOneDimensionalTextureTarget Proxy
    p = case Proxy
    p of
          Proxy
    NoProxy -> TextureTarget1D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
          Proxy
    Proxy -> TextureTarget1D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTargetProxy

    instance QueryableTextureTarget TextureTarget1D where
       marshalQueryableTextureTarget :: TextureTarget1D -> GLenum
    marshalQueryableTextureTarget = TextureTarget1D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    instance GettableTextureTarget TextureTarget1D where
       marshalGettableTextureTarget :: TextureTarget1D -> GLenum
    marshalGettableTextureTarget = TextureTarget1D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    --------------------------------------------------------------------------------

    data TextureTarget2D =
         Texture2D
       | Texture1DArray
       | TextureRectangle
       deriving ( TextureTarget2D -> TextureTarget2D -> Bool
    (TextureTarget2D -> TextureTarget2D -> Bool)
    -> (TextureTarget2D -> TextureTarget2D -> Bool)
    -> Eq TextureTarget2D
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTarget2D -> TextureTarget2D -> Bool
    == :: TextureTarget2D -> TextureTarget2D -> Bool
    $c/= :: TextureTarget2D -> TextureTarget2D -> Bool
    /= :: TextureTarget2D -> TextureTarget2D -> Bool
    Eq, Eq TextureTarget2D
    Eq TextureTarget2D =>
    (TextureTarget2D -> TextureTarget2D -> Ordering)
    -> (TextureTarget2D -> TextureTarget2D -> Bool)
    -> (TextureTarget2D -> TextureTarget2D -> Bool)
    -> (TextureTarget2D -> TextureTarget2D -> Bool)
    -> (TextureTarget2D -> TextureTarget2D -> Bool)
    -> (TextureTarget2D -> TextureTarget2D -> TextureTarget2D)
    -> (TextureTarget2D -> TextureTarget2D -> TextureTarget2D)
    -> Ord TextureTarget2D
    TextureTarget2D -> TextureTarget2D -> Bool
    TextureTarget2D -> TextureTarget2D -> Ordering
    TextureTarget2D -> TextureTarget2D -> TextureTarget2D
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTarget2D -> TextureTarget2D -> Ordering
    compare :: TextureTarget2D -> TextureTarget2D -> Ordering
    $c< :: TextureTarget2D -> TextureTarget2D -> Bool
    < :: TextureTarget2D -> TextureTarget2D -> Bool
    $c<= :: TextureTarget2D -> TextureTarget2D -> Bool
    <= :: TextureTarget2D -> TextureTarget2D -> Bool
    $c> :: TextureTarget2D -> TextureTarget2D -> Bool
    > :: TextureTarget2D -> TextureTarget2D -> Bool
    $c>= :: TextureTarget2D -> TextureTarget2D -> Bool
    >= :: TextureTarget2D -> TextureTarget2D -> Bool
    $cmax :: TextureTarget2D -> TextureTarget2D -> TextureTarget2D
    max :: TextureTarget2D -> TextureTarget2D -> TextureTarget2D
    $cmin :: TextureTarget2D -> TextureTarget2D -> TextureTarget2D
    min :: TextureTarget2D -> TextureTarget2D -> TextureTarget2D
    Ord, Int -> TextureTarget2D -> ShowS
    [TextureTarget2D] -> ShowS
    TextureTarget2D -> String
    (Int -> TextureTarget2D -> ShowS)
    -> (TextureTarget2D -> String)
    -> ([TextureTarget2D] -> ShowS)
    -> Show TextureTarget2D
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTarget2D -> ShowS
    showsPrec :: Int -> TextureTarget2D -> ShowS
    $cshow :: TextureTarget2D -> String
    show :: TextureTarget2D -> String
    $cshowList :: [TextureTarget2D] -> ShowS
    showList :: [TextureTarget2D] -> ShowS
    Show )

    instance BindableTextureTarget TextureTarget2D where
       marshalBindableTextureTarget :: TextureTarget2D -> GLenum
    marshalBindableTextureTarget = TextureTarget2D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
       marshalBindableTextureTargetPName1I :: TextureTarget2D -> PName1I
    marshalBindableTextureTargetPName1I TextureTarget2D
    t = case TextureTarget2D
    t of
          TextureTarget2D
    Texture2D -> PName1I
    GetTextureBinding2D
          TextureTarget2D
    Texture1DArray -> PName1I
    GetTextureBinding1DArray
          TextureTarget2D
    TextureRectangle -> PName1I
    GetTextureBindingRectangle

    instance ParameterizedTextureTarget TextureTarget2D where
       marshalParameterizedTextureTarget :: TextureTarget2D -> GLenum
    marshalParameterizedTextureTarget TextureTarget2D
    t = case TextureTarget2D
    t of
          TextureTarget2D
    Texture2D -> GLenum
    GL_TEXTURE_2D
          TextureTarget2D
    Texture1DArray -> GLenum
    GL_TEXTURE_1D_ARRAY
          TextureTarget2D
    TextureRectangle -> GLenum
    GL_TEXTURE_RECTANGLE
       marshalParameterizedTextureTargetProxy :: TextureTarget2D -> GLenum
    marshalParameterizedTextureTargetProxy TextureTarget2D
    t = case TextureTarget2D
    t of
          TextureTarget2D
    Texture2D -> GLenum
    GL_PROXY_TEXTURE_2D
          TextureTarget2D
    Texture1DArray -> GLenum
    GL_PROXY_TEXTURE_1D_ARRAY
          TextureTarget2D
    TextureRectangle -> GLenum
    GL_PROXY_TEXTURE_RECTANGLE
       marshalParameterizedTextureTargetEnableCap :: TextureTarget2D -> EnableCap
    marshalParameterizedTextureTargetEnableCap TextureTarget2D
    t = case TextureTarget2D
    t of
          TextureTarget2D
    Texture2D -> EnableCap
    CapTexture2D
          TextureTarget2D
    Texture1DArray -> EnableCap
    CapTexture1DArray
          TextureTarget2D
    TextureRectangle -> EnableCap
    CapTextureRectangle

    instance TwoDimensionalTextureTarget TextureTarget2D where
       marshalTwoDimensionalTextureTarget :: Proxy -> TextureTarget2D -> GLenum
    marshalTwoDimensionalTextureTarget Proxy
    p = case Proxy
    p of
          Proxy
    NoProxy -> TextureTarget2D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
          Proxy
    Proxy -> TextureTarget2D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTargetProxy

    instance QueryableTextureTarget TextureTarget2D where
       marshalQueryableTextureTarget :: TextureTarget2D -> GLenum
    marshalQueryableTextureTarget = TextureTarget2D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    instance GettableTextureTarget TextureTarget2D where
       marshalGettableTextureTarget :: TextureTarget2D -> GLenum
    marshalGettableTextureTarget = TextureTarget2D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    --------------------------------------------------------------------------------

    data TextureTarget2DMultisample = Texture2DMultisample
       deriving ( TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    (TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> Bool)
    -> Eq TextureTarget2DMultisample
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    == :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    $c/= :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    /= :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    Eq, Eq TextureTarget2DMultisample
    Eq TextureTarget2DMultisample =>
    (TextureTarget2DMultisample
     -> TextureTarget2DMultisample -> Ordering)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> Bool)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> Bool)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> Bool)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> Bool)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> TextureTarget2DMultisample)
    -> (TextureTarget2DMultisample
        -> TextureTarget2DMultisample -> TextureTarget2DMultisample)
    -> Ord TextureTarget2DMultisample
    TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> Ordering
    TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> TextureTarget2DMultisample
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> Ordering
    compare :: TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> Ordering
    $c< :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    < :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    $c<= :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    <= :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    $c> :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    > :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    $c>= :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    >= :: TextureTarget2DMultisample -> TextureTarget2DMultisample -> Bool
    $cmax :: TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> TextureTarget2DMultisample
    max :: TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> TextureTarget2DMultisample
    $cmin :: TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> TextureTarget2DMultisample
    min :: TextureTarget2DMultisample
    -> TextureTarget2DMultisample -> TextureTarget2DMultisample
    Ord, Int -> TextureTarget2DMultisample -> ShowS
    [TextureTarget2DMultisample] -> ShowS
    TextureTarget2DMultisample -> String
    (Int -> TextureTarget2DMultisample -> ShowS)
    -> (TextureTarget2DMultisample -> String)
    -> ([TextureTarget2DMultisample] -> ShowS)
    -> Show TextureTarget2DMultisample
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTarget2DMultisample -> ShowS
    showsPrec :: Int -> TextureTarget2DMultisample -> ShowS
    $cshow :: TextureTarget2DMultisample -> String
    show :: TextureTarget2DMultisample -> String
    $cshowList :: [TextureTarget2DMultisample] -> ShowS
    showList :: [TextureTarget2DMultisample] -> ShowS
    Show )

    instance BindableTextureTarget TextureTarget2DMultisample where
       marshalBindableTextureTarget :: TextureTarget2DMultisample -> GLenum
    marshalBindableTextureTarget = TextureTarget2DMultisample -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
       marshalBindableTextureTargetPName1I :: TextureTarget2DMultisample -> PName1I
    marshalBindableTextureTargetPName1I TextureTarget2DMultisample
    t = case TextureTarget2DMultisample
    t of
          TextureTarget2DMultisample
    Texture2DMultisample -> PName1I
    GetTextureBinding2DMultisample

    instance ParameterizedTextureTarget TextureTarget2DMultisample where
       marshalParameterizedTextureTarget :: TextureTarget2DMultisample -> GLenum
    marshalParameterizedTextureTarget TextureTarget2DMultisample
    t = case TextureTarget2DMultisample
    t of
          TextureTarget2DMultisample
    Texture2DMultisample -> GLenum
    GL_TEXTURE_2D_MULTISAMPLE
       marshalParameterizedTextureTargetProxy :: TextureTarget2DMultisample -> GLenum
    marshalParameterizedTextureTargetProxy TextureTarget2DMultisample
    t = case TextureTarget2DMultisample
    t of
          TextureTarget2DMultisample
    Texture2DMultisample -> GLenum
    GL_PROXY_TEXTURE_2D_MULTISAMPLE
       marshalParameterizedTextureTargetEnableCap :: TextureTarget2DMultisample -> EnableCap
    marshalParameterizedTextureTargetEnableCap TextureTarget2DMultisample
    t = case TextureTarget2DMultisample
    t of
          TextureTarget2DMultisample
    Texture2DMultisample -> EnableCap
    CapTexture2DMultisample

    instance QueryableTextureTarget TextureTarget2DMultisample where
       marshalQueryableTextureTarget :: TextureTarget2DMultisample -> GLenum
    marshalQueryableTextureTarget = TextureTarget2DMultisample -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    --------------------------------------------------------------------------------

    data TextureTargetCubeMap = TextureCubeMap
       deriving ( TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    (TextureTargetCubeMap -> TextureTargetCubeMap -> Bool)
    -> (TextureTargetCubeMap -> TextureTargetCubeMap -> Bool)
    -> Eq TextureTargetCubeMap
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    == :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    $c/= :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    /= :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    Eq, Eq TextureTargetCubeMap
    Eq TextureTargetCubeMap =>
    (TextureTargetCubeMap -> TextureTargetCubeMap -> Ordering)
    -> (TextureTargetCubeMap -> TextureTargetCubeMap -> Bool)
    -> (TextureTargetCubeMap -> TextureTargetCubeMap -> Bool)
    -> (TextureTargetCubeMap -> TextureTargetCubeMap -> Bool)
    -> (TextureTargetCubeMap -> TextureTargetCubeMap -> Bool)
    -> (TextureTargetCubeMap
        -> TextureTargetCubeMap -> TextureTargetCubeMap)
    -> (TextureTargetCubeMap
        -> TextureTargetCubeMap -> TextureTargetCubeMap)
    -> Ord TextureTargetCubeMap
    TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    TextureTargetCubeMap -> TextureTargetCubeMap -> Ordering
    TextureTargetCubeMap
    -> TextureTargetCubeMap -> TextureTargetCubeMap
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTargetCubeMap -> TextureTargetCubeMap -> Ordering
    compare :: TextureTargetCubeMap -> TextureTargetCubeMap -> Ordering
    $c< :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    < :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    $c<= :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    <= :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    $c> :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    > :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    $c>= :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    >= :: TextureTargetCubeMap -> TextureTargetCubeMap -> Bool
    $cmax :: TextureTargetCubeMap
    -> TextureTargetCubeMap -> TextureTargetCubeMap
    max :: TextureTargetCubeMap
    -> TextureTargetCubeMap -> TextureTargetCubeMap
    $cmin :: TextureTargetCubeMap
    -> TextureTargetCubeMap -> TextureTargetCubeMap
    min :: TextureTargetCubeMap
    -> TextureTargetCubeMap -> TextureTargetCubeMap
    Ord, Int -> TextureTargetCubeMap -> ShowS
    [TextureTargetCubeMap] -> ShowS
    TextureTargetCubeMap -> String
    (Int -> TextureTargetCubeMap -> ShowS)
    -> (TextureTargetCubeMap -> String)
    -> ([TextureTargetCubeMap] -> ShowS)
    -> Show TextureTargetCubeMap
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTargetCubeMap -> ShowS
    showsPrec :: Int -> TextureTargetCubeMap -> ShowS
    $cshow :: TextureTargetCubeMap -> String
    show :: TextureTargetCubeMap -> String
    $cshowList :: [TextureTargetCubeMap] -> ShowS
    showList :: [TextureTargetCubeMap] -> ShowS
    Show )

    instance BindableTextureTarget TextureTargetCubeMap where
       marshalBindableTextureTarget :: TextureTargetCubeMap -> GLenum
    marshalBindableTextureTarget = TextureTargetCubeMap -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
       marshalBindableTextureTargetPName1I :: TextureTargetCubeMap -> PName1I
    marshalBindableTextureTargetPName1I TextureTargetCubeMap
    t = case TextureTargetCubeMap
    t of
          TextureTargetCubeMap
    TextureCubeMap -> PName1I
    GetTextureBindingCubeMap

    instance ParameterizedTextureTarget TextureTargetCubeMap where
       marshalParameterizedTextureTarget :: TextureTargetCubeMap -> GLenum
    marshalParameterizedTextureTarget TextureTargetCubeMap
    t = case TextureTargetCubeMap
    t of
          TextureTargetCubeMap
    TextureCubeMap -> GLenum
    GL_TEXTURE_CUBE_MAP
       marshalParameterizedTextureTargetProxy :: TextureTargetCubeMap -> GLenum
    marshalParameterizedTextureTargetProxy TextureTargetCubeMap
    t = case TextureTargetCubeMap
    t of
          TextureTargetCubeMap
    TextureCubeMap -> GLenum
    GL_PROXY_TEXTURE_CUBE_MAP
       marshalParameterizedTextureTargetEnableCap :: TextureTargetCubeMap -> EnableCap
    marshalParameterizedTextureTargetEnableCap TextureTargetCubeMap
    t = case TextureTargetCubeMap
    t of
          TextureTargetCubeMap
    TextureCubeMap -> EnableCap
    CapTextureCubeMap

    instance TwoDimensionalTextureTarget TextureTargetCubeMap where
       marshalTwoDimensionalTextureTarget :: Proxy -> TextureTargetCubeMap -> GLenum
    marshalTwoDimensionalTextureTarget Proxy
    p = case Proxy
    p of
          Proxy
    NoProxy -> \TextureTargetCubeMap
    t -> String -> GLenum
    forall a. HasCallStack => String -> a
    error (String
    "No non-proxy target for " String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ TextureTargetCubeMap -> String
    forall a. Show a => a -> String
    show TextureTargetCubeMap
    t)
          Proxy
    Proxy -> TextureTargetCubeMap -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTargetProxy

    --------------------------------------------------------------------------------

    data TextureTargetCubeMapFace =
         TextureCubeMapPositiveX
       | TextureCubeMapNegativeX
       | TextureCubeMapPositiveY
       | TextureCubeMapNegativeY
       | TextureCubeMapPositiveZ
       | TextureCubeMapNegativeZ
       deriving ( TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool)
    -> (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool)
    -> Eq TextureTargetCubeMapFace
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    == :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    $c/= :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    /= :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    Eq, Eq TextureTargetCubeMapFace
    Eq TextureTargetCubeMapFace =>
    (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Ordering)
    -> (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool)
    -> (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool)
    -> (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool)
    -> (TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool)
    -> (TextureTargetCubeMapFace
        -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace)
    -> (TextureTargetCubeMapFace
        -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace)
    -> Ord TextureTargetCubeMapFace
    TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Ordering
    TextureTargetCubeMapFace
    -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Ordering
    compare :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Ordering
    $c< :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    < :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    $c<= :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    <= :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    $c> :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    > :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    $c>= :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    >= :: TextureTargetCubeMapFace -> TextureTargetCubeMapFace -> Bool
    $cmax :: TextureTargetCubeMapFace
    -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace
    max :: TextureTargetCubeMapFace
    -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace
    $cmin :: TextureTargetCubeMapFace
    -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace
    min :: TextureTargetCubeMapFace
    -> TextureTargetCubeMapFace -> TextureTargetCubeMapFace
    Ord, Int -> TextureTargetCubeMapFace -> ShowS
    [TextureTargetCubeMapFace] -> ShowS
    TextureTargetCubeMapFace -> String
    (Int -> TextureTargetCubeMapFace -> ShowS)
    -> (TextureTargetCubeMapFace -> String)
    -> ([TextureTargetCubeMapFace] -> ShowS)
    -> Show TextureTargetCubeMapFace
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTargetCubeMapFace -> ShowS
    showsPrec :: Int -> TextureTargetCubeMapFace -> ShowS
    $cshow :: TextureTargetCubeMapFace -> String
    show :: TextureTargetCubeMapFace -> String
    $cshowList :: [TextureTargetCubeMapFace] -> ShowS
    showList :: [TextureTargetCubeMapFace] -> ShowS
    Show )

    instance TwoDimensionalTextureTarget TextureTargetCubeMapFace where
       marshalTwoDimensionalTextureTarget :: Proxy -> TextureTargetCubeMapFace -> GLenum
    marshalTwoDimensionalTextureTarget Proxy
    p = case Proxy
    p of
          Proxy
    NoProxy -> TextureTargetCubeMapFace -> GLenum
    forall t. QueryableTextureTarget t => t -> GLenum
    marshalQueryableTextureTarget
          -- We could silently map this to TextureCubeMap if we wanted.
          Proxy
    Proxy -> \TextureTargetCubeMapFace
    t -> String -> GLenum
    forall a. HasCallStack => String -> a
    error (String
    "No proxy target for " String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ TextureTargetCubeMapFace -> String
    forall a. Show a => a -> String
    show TextureTargetCubeMapFace
    t)

    instance QueryableTextureTarget TextureTargetCubeMapFace where
       marshalQueryableTextureTarget :: TextureTargetCubeMapFace -> GLenum
    marshalQueryableTextureTarget TextureTargetCubeMapFace
    t = case TextureTargetCubeMapFace
    t of
          TextureTargetCubeMapFace
    TextureCubeMapPositiveX -> GLenum
    GL_TEXTURE_CUBE_MAP_POSITIVE_X
          TextureTargetCubeMapFace
    TextureCubeMapNegativeX -> GLenum
    GL_TEXTURE_CUBE_MAP_NEGATIVE_X
          TextureTargetCubeMapFace
    TextureCubeMapPositiveY -> GLenum
    GL_TEXTURE_CUBE_MAP_POSITIVE_Y
          TextureTargetCubeMapFace
    TextureCubeMapNegativeY -> GLenum
    GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
          TextureTargetCubeMapFace
    TextureCubeMapPositiveZ -> GLenum
    GL_TEXTURE_CUBE_MAP_POSITIVE_Z
          TextureTargetCubeMapFace
    TextureCubeMapNegativeZ -> GLenum
    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

    instance GettableTextureTarget TextureTargetCubeMapFace where
       marshalGettableTextureTarget :: TextureTargetCubeMapFace -> GLenum
    marshalGettableTextureTarget = TextureTargetCubeMapFace -> GLenum
    forall t. QueryableTextureTarget t => t -> GLenum
    marshalQueryableTextureTarget

    unmarshalTextureTargetCubeMapFace :: GLenum -> TextureTargetCubeMapFace
    unmarshalTextureTargetCubeMapFace :: GLenum -> TextureTargetCubeMapFace
    unmarshalTextureTargetCubeMapFace GLenum
    x
       | GLenum
    x GLenum -> GLenum -> Bool
    forall a. Eq a => a -> a -> Bool
    == GLenum
    GL_TEXTURE_CUBE_MAP_POSITIVE_X = TextureTargetCubeMapFace
    TextureCubeMapPositiveX
       | GLenum
    x GLenum -> GLenum -> Bool
    forall a. Eq a => a -> a -> Bool
    == GLenum
    GL_TEXTURE_CUBE_MAP_NEGATIVE_X = TextureTargetCubeMapFace
    TextureCubeMapNegativeX
       | GLenum
    x GLenum -> GLenum -> Bool
    forall a. Eq a => a -> a -> Bool
    == GLenum
    GL_TEXTURE_CUBE_MAP_POSITIVE_Y = TextureTargetCubeMapFace
    TextureCubeMapPositiveY
       | GLenum
    x GLenum -> GLenum -> Bool
    forall a. Eq a => a -> a -> Bool
    == GLenum
    GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = TextureTargetCubeMapFace
    TextureCubeMapNegativeY
       | GLenum
    x GLenum -> GLenum -> Bool
    forall a. Eq a => a -> a -> Bool
    == GLenum
    GL_TEXTURE_CUBE_MAP_POSITIVE_Z = TextureTargetCubeMapFace
    TextureCubeMapPositiveZ
       | GLenum
    x GLenum -> GLenum -> Bool
    forall a. Eq a => a -> a -> Bool
    == GLenum
    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = TextureTargetCubeMapFace
    TextureCubeMapNegativeZ
       | Bool
    otherwise = String -> TextureTargetCubeMapFace
    forall a. HasCallStack => String -> a
    error (String -> TextureTargetCubeMapFace)
    -> String -> TextureTargetCubeMapFace
    forall a b. (a -> b) -> a -> b
    $ String
    "unmarshalTextureTargetCubeMapFace: unknown enum " String -> ShowS
    forall a. [a] -> [a] -> [a]
    ++ GLenum -> String
    forall a. Show a => a -> String
    show GLenum
    x

    --------------------------------------------------------------------------------

    data TextureTarget3D =
         Texture3D
       | Texture2DArray
       | TextureCubeMapArray
       deriving ( TextureTarget3D -> TextureTarget3D -> Bool
    (TextureTarget3D -> TextureTarget3D -> Bool)
    -> (TextureTarget3D -> TextureTarget3D -> Bool)
    -> Eq TextureTarget3D
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTarget3D -> TextureTarget3D -> Bool
    == :: TextureTarget3D -> TextureTarget3D -> Bool
    $c/= :: TextureTarget3D -> TextureTarget3D -> Bool
    /= :: TextureTarget3D -> TextureTarget3D -> Bool
    Eq, Eq TextureTarget3D
    Eq TextureTarget3D =>
    (TextureTarget3D -> TextureTarget3D -> Ordering)
    -> (TextureTarget3D -> TextureTarget3D -> Bool)
    -> (TextureTarget3D -> TextureTarget3D -> Bool)
    -> (TextureTarget3D -> TextureTarget3D -> Bool)
    -> (TextureTarget3D -> TextureTarget3D -> Bool)
    -> (TextureTarget3D -> TextureTarget3D -> TextureTarget3D)
    -> (TextureTarget3D -> TextureTarget3D -> TextureTarget3D)
    -> Ord TextureTarget3D
    TextureTarget3D -> TextureTarget3D -> Bool
    TextureTarget3D -> TextureTarget3D -> Ordering
    TextureTarget3D -> TextureTarget3D -> TextureTarget3D
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTarget3D -> TextureTarget3D -> Ordering
    compare :: TextureTarget3D -> TextureTarget3D -> Ordering
    $c< :: TextureTarget3D -> TextureTarget3D -> Bool
    < :: TextureTarget3D -> TextureTarget3D -> Bool
    $c<= :: TextureTarget3D -> TextureTarget3D -> Bool
    <= :: TextureTarget3D -> TextureTarget3D -> Bool
    $c> :: TextureTarget3D -> TextureTarget3D -> Bool
    > :: TextureTarget3D -> TextureTarget3D -> Bool
    $c>= :: TextureTarget3D -> TextureTarget3D -> Bool
    >= :: TextureTarget3D -> TextureTarget3D -> Bool
    $cmax :: TextureTarget3D -> TextureTarget3D -> TextureTarget3D
    max :: TextureTarget3D -> TextureTarget3D -> TextureTarget3D
    $cmin :: TextureTarget3D -> TextureTarget3D -> TextureTarget3D
    min :: TextureTarget3D -> TextureTarget3D -> TextureTarget3D
    Ord, Int -> TextureTarget3D -> ShowS
    [TextureTarget3D] -> ShowS
    TextureTarget3D -> String
    (Int -> TextureTarget3D -> ShowS)
    -> (TextureTarget3D -> String)
    -> ([TextureTarget3D] -> ShowS)
    -> Show TextureTarget3D
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTarget3D -> ShowS
    showsPrec :: Int -> TextureTarget3D -> ShowS
    $cshow :: TextureTarget3D -> String
    show :: TextureTarget3D -> String
    $cshowList :: [TextureTarget3D] -> ShowS
    showList :: [TextureTarget3D] -> ShowS
    Show )

    instance BindableTextureTarget TextureTarget3D where
       marshalBindableTextureTarget :: TextureTarget3D -> GLenum
    marshalBindableTextureTarget = TextureTarget3D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
       marshalBindableTextureTargetPName1I :: TextureTarget3D -> PName1I
    marshalBindableTextureTargetPName1I TextureTarget3D
    t = case TextureTarget3D
    t of
          TextureTarget3D
    Texture3D -> PName1I
    GetTextureBinding3D
          TextureTarget3D
    Texture2DArray -> PName1I
    GetTextureBinding2DArray
          TextureTarget3D
    TextureCubeMapArray -> PName1I
    GetTextureBindingCubeMapArray

    instance ParameterizedTextureTarget TextureTarget3D where
       marshalParameterizedTextureTarget :: TextureTarget3D -> GLenum
    marshalParameterizedTextureTarget TextureTarget3D
    t = case TextureTarget3D
    t of
          TextureTarget3D
    Texture3D -> GLenum
    GL_TEXTURE_3D
          TextureTarget3D
    Texture2DArray -> GLenum
    GL_TEXTURE_2D_ARRAY
          TextureTarget3D
    TextureCubeMapArray -> GLenum
    GL_TEXTURE_CUBE_MAP_ARRAY
       marshalParameterizedTextureTargetProxy :: TextureTarget3D -> GLenum
    marshalParameterizedTextureTargetProxy TextureTarget3D
    t = case TextureTarget3D
    t of
          TextureTarget3D
    Texture3D -> GLenum
    GL_PROXY_TEXTURE_3D
          TextureTarget3D
    Texture2DArray -> GLenum
    GL_PROXY_TEXTURE_2D_ARRAY
          TextureTarget3D
    TextureCubeMapArray -> GLenum
    GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
       marshalParameterizedTextureTargetEnableCap :: TextureTarget3D -> EnableCap
    marshalParameterizedTextureTargetEnableCap TextureTarget3D
    t = case TextureTarget3D
    t of
          TextureTarget3D
    Texture3D -> EnableCap
    CapTexture3D
          TextureTarget3D
    Texture2DArray -> EnableCap
    CapTexture2DArray
          TextureTarget3D
    TextureCubeMapArray -> EnableCap
    CapTextureCubeMapArray

    instance ThreeDimensionalTextureTarget TextureTarget3D where
       marshalThreeDimensionalTextureTarget :: Proxy -> TextureTarget3D -> GLenum
    marshalThreeDimensionalTextureTarget Proxy
    p = case Proxy
    p of
          Proxy
    NoProxy -> TextureTarget3D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
          Proxy
    Proxy -> TextureTarget3D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTargetProxy

    instance QueryableTextureTarget TextureTarget3D where
       marshalQueryableTextureTarget :: TextureTarget3D -> GLenum
    marshalQueryableTextureTarget = TextureTarget3D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    instance GettableTextureTarget TextureTarget3D where
       marshalGettableTextureTarget :: TextureTarget3D -> GLenum
    marshalGettableTextureTarget = TextureTarget3D -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    --------------------------------------------------------------------------------

    data TextureTarget2DMultisampleArray = Texture2DMultisampleArray
       deriving ( TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    (TextureTarget2DMultisampleArray
     -> TextureTarget2DMultisampleArray -> Bool)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray -> Bool)
    -> Eq TextureTarget2DMultisampleArray
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    == :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    $c/= :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    /= :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    Eq, Eq TextureTarget2DMultisampleArray
    Eq TextureTarget2DMultisampleArray =>
    (TextureTarget2DMultisampleArray
     -> TextureTarget2DMultisampleArray -> Ordering)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray -> Bool)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray -> Bool)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray -> Bool)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray -> Bool)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray)
    -> (TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray
        -> TextureTarget2DMultisampleArray)
    -> Ord TextureTarget2DMultisampleArray
    TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Ordering
    TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Ordering
    compare :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Ordering
    $c< :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    < :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    $c<= :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    <= :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    $c> :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    > :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    $c>= :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    >= :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray -> Bool
    $cmax :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    max :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    $cmin :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    min :: TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    -> TextureTarget2DMultisampleArray
    Ord, Int -> TextureTarget2DMultisampleArray -> ShowS
    [TextureTarget2DMultisampleArray] -> ShowS
    TextureTarget2DMultisampleArray -> String
    (Int -> TextureTarget2DMultisampleArray -> ShowS)
    -> (TextureTarget2DMultisampleArray -> String)
    -> ([TextureTarget2DMultisampleArray] -> ShowS)
    -> Show TextureTarget2DMultisampleArray
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTarget2DMultisampleArray -> ShowS
    showsPrec :: Int -> TextureTarget2DMultisampleArray -> ShowS
    $cshow :: TextureTarget2DMultisampleArray -> String
    show :: TextureTarget2DMultisampleArray -> String
    $cshowList :: [TextureTarget2DMultisampleArray] -> ShowS
    showList :: [TextureTarget2DMultisampleArray] -> ShowS
    Show )

    instance BindableTextureTarget TextureTarget2DMultisampleArray where
       marshalBindableTextureTarget :: TextureTarget2DMultisampleArray -> GLenum
    marshalBindableTextureTarget = TextureTarget2DMultisampleArray -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget
       marshalBindableTextureTargetPName1I :: TextureTarget2DMultisampleArray -> PName1I
    marshalBindableTextureTargetPName1I TextureTarget2DMultisampleArray
    t = case TextureTarget2DMultisampleArray
    t of
          TextureTarget2DMultisampleArray
    Texture2DMultisampleArray -> PName1I
    GetTextureBinding2DMultisampleArray

    instance ParameterizedTextureTarget TextureTarget2DMultisampleArray where
       marshalParameterizedTextureTarget :: TextureTarget2DMultisampleArray -> GLenum
    marshalParameterizedTextureTarget TextureTarget2DMultisampleArray
    t = case TextureTarget2DMultisampleArray
    t of
          TextureTarget2DMultisampleArray
    Texture2DMultisampleArray -> GLenum
    GL_TEXTURE_2D_MULTISAMPLE_ARRAY
       marshalParameterizedTextureTargetProxy :: TextureTarget2DMultisampleArray -> GLenum
    marshalParameterizedTextureTargetProxy TextureTarget2DMultisampleArray
    t = case TextureTarget2DMultisampleArray
    t of
          TextureTarget2DMultisampleArray
    Texture2DMultisampleArray -> GLenum
    GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY
       marshalParameterizedTextureTargetEnableCap :: TextureTarget2DMultisampleArray -> EnableCap
    marshalParameterizedTextureTargetEnableCap TextureTarget2DMultisampleArray
    t = case TextureTarget2DMultisampleArray
    t of
          TextureTarget2DMultisampleArray
    Texture2DMultisampleArray -> EnableCap
    CapTexture2DMultisampleArray

    instance QueryableTextureTarget TextureTarget2DMultisampleArray where
       marshalQueryableTextureTarget :: TextureTarget2DMultisampleArray -> GLenum
    marshalQueryableTextureTarget = TextureTarget2DMultisampleArray -> GLenum
    forall t. ParameterizedTextureTarget t => t -> GLenum
    marshalParameterizedTextureTarget

    --------------------------------------------------------------------------------

    data TextureTargetBuffer = TextureBuffer'
       deriving ( TextureTargetBuffer -> TextureTargetBuffer -> Bool
    (TextureTargetBuffer -> TextureTargetBuffer -> Bool)
    -> (TextureTargetBuffer -> TextureTargetBuffer -> Bool)
    -> Eq TextureTargetBuffer
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    == :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    $c/= :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    /= :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    Eq, Eq TextureTargetBuffer
    Eq TextureTargetBuffer =>
    (TextureTargetBuffer -> TextureTargetBuffer -> Ordering)
    -> (TextureTargetBuffer -> TextureTargetBuffer -> Bool)
    -> (TextureTargetBuffer -> TextureTargetBuffer -> Bool)
    -> (TextureTargetBuffer -> TextureTargetBuffer -> Bool)
    -> (TextureTargetBuffer -> TextureTargetBuffer -> Bool)
    -> (TextureTargetBuffer
        -> TextureTargetBuffer -> TextureTargetBuffer)
    -> (TextureTargetBuffer
        -> TextureTargetBuffer -> TextureTargetBuffer)
    -> Ord TextureTargetBuffer
    TextureTargetBuffer -> TextureTargetBuffer -> Bool
    TextureTargetBuffer -> TextureTargetBuffer -> Ordering
    TextureTargetBuffer -> TextureTargetBuffer -> TextureTargetBuffer
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TextureTargetBuffer -> TextureTargetBuffer -> Ordering
    compare :: TextureTargetBuffer -> TextureTargetBuffer -> Ordering
    $c< :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    < :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    $c<= :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    <= :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    $c> :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    > :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    $c>= :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    >= :: TextureTargetBuffer -> TextureTargetBuffer -> Bool
    $cmax :: TextureTargetBuffer -> TextureTargetBuffer -> TextureTargetBuffer
    max :: TextureTargetBuffer -> TextureTargetBuffer -> TextureTargetBuffer
    $cmin :: TextureTargetBuffer -> TextureTargetBuffer -> TextureTargetBuffer
    min :: TextureTargetBuffer -> TextureTargetBuffer -> TextureTargetBuffer
    Ord, Int -> TextureTargetBuffer -> ShowS
    [TextureTargetBuffer] -> ShowS
    TextureTargetBuffer -> String
    (Int -> TextureTargetBuffer -> ShowS)
    -> (TextureTargetBuffer -> String)
    -> ([TextureTargetBuffer] -> ShowS)
    -> Show TextureTargetBuffer
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TextureTargetBuffer -> ShowS
    showsPrec :: Int -> TextureTargetBuffer -> ShowS
    $cshow :: TextureTargetBuffer -> String
    show :: TextureTargetBuffer -> String
    $cshowList :: [TextureTargetBuffer] -> ShowS
    showList :: [TextureTargetBuffer] -> ShowS
    Show )

    instance BindableTextureTarget TextureTargetBuffer where
       marshalBindableTextureTarget :: TextureTargetBuffer -> GLenum
    marshalBindableTextureTarget TextureTargetBuffer
    t = case TextureTargetBuffer
    t of
          TextureTargetBuffer
    TextureBuffer' -> GLenum
    GL_TEXTURE_BUFFER
       marshalBindableTextureTargetPName1I :: TextureTargetBuffer -> PName1I
    marshalBindableTextureTargetPName1I TextureTargetBuffer
    t = case TextureTargetBuffer
    t of
          TextureTargetBuffer
    TextureBuffer' -> PName1I
    GetTextureBindingBuffer