{-# OPTIONS_HADDOCK hide #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenGL.GL.QueryUtils.PName
-- Copyright   :  (c) Sven Panne 2002-2019, Lars Corbijn 2013
-- License     :  BSD3
--
-- Maintainer  :  Sven Panne <svenpanne@gmail.com>, Jason Dagit <dagitj@gmail.com>
-- Stability   :  stable
-- Portability :  portable
--
-----------------------------------------------------------------------------

module Graphics.Rendering.OpenGL.GL.QueryUtils.PName (
    GetPName(..),
    GetPName1I(..), GetPName1F(..), GetIPName1I(..),
    GetPName2I(..), GetPName2F(..),
    GetPName3I(..), GetPName3F(..),
    GetPName4I(..), GetPName4F(..), GetIPName4I(..),
    GetPNameNI(..),

    PName1I(..), PName1F(..), IPName1I(..),
    PName2I(..), PName2F(..),
    PName3F(..),
    PName4I(..), PName4F(..), PName4ISemiIndexed(..),
    PNameNI(..),

    GetPNameMatrix(..),
    PNameMatrix(..),

    clipPlaneIndexToEnum,

    GetPointervPName(..), getPointer
) where

import Foreign.Marshal.Alloc ( alloca )
import Foreign.Marshal.Array ( allocaArray, peekArray )
import Foreign.Marshal.Utils ( with )
import Foreign.Ptr ( Ptr, nullPtr, castPtr )
import Foreign.Storable ( Storable(peek) )
import Graphics.Rendering.OpenGL.GL.PeekPoke
import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
import Graphics.GL

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

class GetPName p where
    marshalGetPName :: p -> Maybe GLenum

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

getBooleanv :: GetPName p => p-> Ptr GLboolean -> IO ()
getBooleanv :: p -> Ptr GLboolean -> IO ()
getBooleanv = (GLenum -> Ptr GLboolean -> IO ()) -> p -> Ptr GLboolean -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter GLenum -> Ptr GLboolean -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLboolean -> m ()
glGetBooleanv

getIntegerv :: GetPName p => p -> Ptr GLint -> IO ()
getIntegerv :: p -> Ptr GLint -> IO ()
getIntegerv = (GLenum -> Ptr GLint -> IO ()) -> p -> Ptr GLint -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter GLenum -> Ptr GLint -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLint -> m ()
glGetIntegerv

getInteger64v :: GetPName p => p -> Ptr GLint64 -> IO ()
getInteger64v :: p -> Ptr GLint64 -> IO ()
getInteger64v = (GLenum -> Ptr GLint64 -> IO ()) -> p -> Ptr GLint64 -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter GLenum -> Ptr GLint64 -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLint64 -> m ()
glGetInteger64v

getFloatv :: GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv :: p -> Ptr GLfloat -> IO ()
getFloatv = (GLenum -> Ptr GLfloat -> IO ()) -> p -> Ptr GLfloat -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter GLenum -> Ptr GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLfloat -> m ()
glGetFloatv

getDoublev :: GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev :: p -> Ptr GLdouble -> IO ()
getDoublev = (GLenum -> Ptr GLdouble -> IO ()) -> p -> Ptr GLdouble -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter GLenum -> Ptr GLdouble -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLdouble -> m ()
glGetDoublev

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

getBooleaniv :: GetPName p => p -> GLuint -> Ptr GLboolean -> IO ()
getBooleaniv :: p -> GLenum -> Ptr GLboolean -> IO ()
getBooleaniv p :: p
p i :: GLenum
i = (GLenum -> Ptr GLboolean -> IO ()) -> p -> Ptr GLboolean -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter (\e :: GLenum
e -> GLenum -> GLenum -> Ptr GLboolean -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> Ptr GLboolean -> m ()
glGetBooleani_v GLenum
e GLenum
i) p
p

getIntegeriv :: GetPName p => p -> GLuint -> Ptr GLint -> IO ()
getIntegeriv :: p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv p :: p
p i :: GLenum
i =  (GLenum -> Ptr GLint -> IO ()) -> p -> Ptr GLint -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter (\e :: GLenum
e -> GLenum -> GLenum -> Ptr GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> Ptr GLint -> m ()
glGetIntegeri_v GLenum
e GLenum
i) p
p

getInteger64iv :: GetPName p => p -> GLuint -> Ptr GLint64 -> IO ()
getInteger64iv :: p -> GLenum -> Ptr GLint64 -> IO ()
getInteger64iv p :: p
p i :: GLenum
i =  (GLenum -> Ptr GLint64 -> IO ()) -> p -> Ptr GLint64 -> IO ()
forall p a.
GetPName p =>
(GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter (\e :: GLenum
e -> GLenum -> GLenum -> Ptr GLint64 -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> Ptr GLint64 -> m ()
glGetInteger64i_v GLenum
e GLenum
i) p
p

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

{-# INLINE makeGetter #-}
makeGetter :: GetPName p => (GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter :: (GLenum -> Ptr a -> IO ()) -> p -> Ptr a -> IO ()
makeGetter f :: GLenum -> Ptr a -> IO ()
f = (Ptr a -> IO ())
-> (GLenum -> Ptr a -> IO ()) -> Maybe GLenum -> Ptr a -> IO ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (IO () -> Ptr a -> IO ()
forall a b. a -> b -> a
const IO ()
recordInvalidEnum) GLenum -> Ptr a -> IO ()
f (Maybe GLenum -> Ptr a -> IO ())
-> (p -> Maybe GLenum) -> p -> Ptr a -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p -> Maybe GLenum
forall p. GetPName p => p -> Maybe GLenum
marshalGetPName

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

class GetPName p => GetPName1I p where
    getBoolean1 :: (GLboolean -> a) -> p -> IO a
    getBoolean1 = (p -> Ptr GLboolean -> IO ()) -> (GLboolean -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLboolean -> IO ()
forall p. GetPName p => p -> Ptr GLboolean -> IO ()
getBooleanv

    getInteger1 :: (GLint -> a) -> p -> IO a
    getInteger1 = (p -> Ptr GLint -> IO ()) -> (GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getEnum1 :: (GLenum -> a) -> p -> IO a
    getEnum1 = (p -> Ptr GLint -> IO ()) -> (GLenum -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getSizei1 :: (GLsizei -> a) -> p -> IO a
    getSizei1 = (p -> Ptr GLint -> IO ()) -> (GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getInteger64 :: (GLint64 -> a) -> p -> IO a
    getInteger64 = (p -> Ptr GLint64 -> IO ()) -> (GLint64 -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLint64 -> IO ()
forall p. GetPName p => p -> Ptr GLint64 -> IO ()
getInteger64v

class GetPName p => GetPName1F p where
    getFloat1 :: (GLfloat -> a) -> p -> IO a
    getFloat1 = (p -> Ptr GLfloat -> IO ()) -> (GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getClampf1 :: (GLclampf -> a) -> p -> IO a
    getClampf1 = (p -> Ptr GLfloat -> IO ()) -> (GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getDouble1 :: (GLdouble -> a) -> p -> IO a
    getDouble1 = (p -> Ptr GLdouble -> IO ()) -> (GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

    getClampd1 :: (GLclampd -> a) -> p -> IO a
    getClampd1 = (p -> Ptr GLdouble -> IO ()) -> (GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

-- | Helper function for the get*1 functions.
get1 :: (Storable b, Storable c)
    => (p -> Ptr c -> IO ())
    -> (b -> a) -- ^ Conversion from the casted value to the return value
    -> p -> IO a
get1 :: (p -> Ptr c -> IO ()) -> (b -> a) -> p -> IO a
get1 g :: p -> Ptr c -> IO ()
g f :: b -> a
f n :: p
n = (Ptr c -> IO a) -> IO a
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr c -> IO a) -> IO a) -> (Ptr c -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr c
buf -> do
    p -> Ptr c -> IO ()
g p
n Ptr c
buf
    (b -> a) -> Ptr b -> IO a
forall a b. Storable a => (a -> b) -> Ptr a -> IO b
peek1 b -> a
f (Ptr c -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr c
buf)

class GetPName p => GetIPName1I p where
    getBoolean1i :: (GLboolean -> a) -> p -> GLuint -> IO a
    getBoolean1i = (p -> GLenum -> Ptr GLboolean -> IO ())
-> (GLboolean -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ()) -> (b -> a) -> p -> GLenum -> IO a
get1i p -> GLenum -> Ptr GLboolean -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLboolean -> IO ()
getBooleaniv

    getInteger1i :: (GLint -> a) -> p -> GLuint -> IO a
    getInteger1i = (p -> GLenum -> Ptr GLint -> IO ())
-> (GLint -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ()) -> (b -> a) -> p -> GLenum -> IO a
get1i p -> GLenum -> Ptr GLint -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv

    getEnum1i :: (GLenum -> a) -> p -> GLuint -> IO a
    getEnum1i = (p -> GLenum -> Ptr GLint -> IO ())
-> (GLenum -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ()) -> (b -> a) -> p -> GLenum -> IO a
get1i p -> GLenum -> Ptr GLint -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv

    getSizei1i :: (GLsizei -> a) -> p -> GLuint -> IO a
    getSizei1i = (p -> GLenum -> Ptr GLint -> IO ())
-> (GLint -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ()) -> (b -> a) -> p -> GLenum -> IO a
get1i p -> GLenum -> Ptr GLint -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv

    getInteger641i :: (GLint64 -> a) -> p -> GLuint -> IO a
    getInteger641i = (p -> GLenum -> Ptr GLint64 -> IO ())
-> (GLint64 -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ()) -> (b -> a) -> p -> GLenum -> IO a
get1i p -> GLenum -> Ptr GLint64 -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint64 -> IO ()
getInteger64iv

-- Indexed helper
get1i :: (Storable b, Storable c)
    => (p -> GLuint -> Ptr c -> IO ())
    -> (b -> a) -- ^ Conversion from the casted value to the return value
    -> p -> GLuint -> IO a
get1i :: (p -> GLenum -> Ptr c -> IO ()) -> (b -> a) -> p -> GLenum -> IO a
get1i g :: p -> GLenum -> Ptr c -> IO ()
g f :: b -> a
f n :: p
n i :: GLenum
i = (Ptr c -> IO a) -> IO a
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr c -> IO a) -> IO a) -> (Ptr c -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr c
buf -> do
    p -> GLenum -> Ptr c -> IO ()
g p
n GLenum
i Ptr c
buf
    (b -> a) -> Ptr b -> IO a
forall a b. Storable a => (a -> b) -> Ptr a -> IO b
peek1 b -> a
f (Ptr c -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr c
buf)

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

class GetPName p => GetPName2I p where
    getBoolean2 :: (GLboolean -> GLboolean -> a) -> p -> IO a
    getBoolean2 = (p -> Ptr GLboolean -> IO ())
-> (GLboolean -> GLboolean -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLboolean -> IO ()
forall p. GetPName p => p -> Ptr GLboolean -> IO ()
getBooleanv

    getInteger2 :: (GLint -> GLint -> a) -> p -> IO a
    getInteger2 = (p -> Ptr GLint -> IO ()) -> (GLint -> GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getEnum2 :: (GLenum -> GLenum -> a) -> p -> IO a
    getEnum2 = (p -> Ptr GLint -> IO ()) -> (GLenum -> GLenum -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getSizei2 :: (GLsizei -> GLsizei -> a) -> p -> IO a
    getSizei2 = (p -> Ptr GLint -> IO ()) -> (GLint -> GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

class GetPName p => GetPName2F p where
    getFloat2 :: (GLfloat -> GLfloat -> a) -> p -> IO a
    getFloat2 = (p -> Ptr GLfloat -> IO ())
-> (GLfloat -> GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getClampf2 :: (GLclampf -> GLclampf -> a) -> p -> IO a
    getClampf2 = (p -> Ptr GLfloat -> IO ())
-> (GLfloat -> GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getDouble2 :: (GLdouble -> GLdouble -> a) -> p -> IO a
    getDouble2 = (p -> Ptr GLdouble -> IO ())
-> (GLdouble -> GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

    getClampd2 :: (GLclampd -> GLclampd -> a) -> p -> IO a
    getClampd2 = (p -> Ptr GLdouble -> IO ())
-> (GLdouble -> GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

-- | Helper function for the get*2 functions.
get2 :: (Storable b, Storable c)
    => (p -> Ptr c -> IO ())
    -> (b -> b -> a) -- ^ Conversion from the casted value to the return value
    -> p -> IO a
get2 :: (p -> Ptr c -> IO ()) -> (b -> b -> a) -> p -> IO a
get2 g :: p -> Ptr c -> IO ()
g f :: b -> b -> a
f n :: p
n = Int -> (Ptr c -> IO a) -> IO a
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray 2 ((Ptr c -> IO a) -> IO a) -> (Ptr c -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr c
buf -> do
    p -> Ptr c -> IO ()
g p
n Ptr c
buf
    (b -> b -> a) -> Ptr b -> IO a
forall a b. Storable a => (a -> a -> b) -> Ptr a -> IO b
peek2 b -> b -> a
f (Ptr c -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr c
buf)

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

class GetPName p => GetPName3I p where
    getBoolean3 :: (GLboolean -> GLboolean -> GLboolean -> a) -> p -> IO a
    getBoolean3 = (p -> Ptr GLboolean -> IO ())
-> (GLboolean -> GLboolean -> GLboolean -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLboolean -> IO ()
forall p. GetPName p => p -> Ptr GLboolean -> IO ()
getBooleanv

    getInteger3 :: (GLint -> GLint -> GLint -> a) -> p -> IO a
    getInteger3 = (p -> Ptr GLint -> IO ())
-> (GLint -> GLint -> GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getEnum3 :: (GLenum -> GLenum -> GLenum -> a) -> p -> IO a
    getEnum3 = (p -> Ptr GLint -> IO ())
-> (GLenum -> GLenum -> GLenum -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getSizei3 :: (GLsizei -> GLsizei -> GLsizei -> a) -> p -> IO a
    getSizei3 = (p -> Ptr GLint -> IO ())
-> (GLint -> GLint -> GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

class GetPName p => GetPName3F p where
    getFloat3 :: (GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
    getFloat3 = (p -> Ptr GLfloat -> IO ())
-> (GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getClampf3 :: (GLclampf -> GLclampf -> GLclampf -> a) -> p -> IO a
    getClampf3 = (p -> Ptr GLfloat -> IO ())
-> (GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getDouble3 :: (GLdouble -> GLdouble -> GLdouble -> a) -> p -> IO a
    getDouble3 = (p -> Ptr GLdouble -> IO ())
-> (GLdouble -> GLdouble -> GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

    getClampd3 :: (GLclampd -> GLclampd -> GLclampd -> a) -> p -> IO a
    getClampd3 = (p -> Ptr GLdouble -> IO ())
-> (GLdouble -> GLdouble -> GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

-- | Helper function for the get*3 functions.
get3 :: (Storable b, Storable c)
    => (p -> Ptr c -> IO ())
    -> (b -> b -> b -> a) -- ^ Conversion from the casted value to the return value
    -> p -> IO a
get3 :: (p -> Ptr c -> IO ()) -> (b -> b -> b -> a) -> p -> IO a
get3 g :: p -> Ptr c -> IO ()
g f :: b -> b -> b -> a
f n :: p
n = Int -> (Ptr c -> IO a) -> IO a
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray 3 ((Ptr c -> IO a) -> IO a) -> (Ptr c -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr c
buf -> do
    p -> Ptr c -> IO ()
g p
n Ptr c
buf
    (b -> b -> b -> a) -> Ptr b -> IO a
forall a b. Storable a => (a -> a -> a -> b) -> Ptr a -> IO b
peek3 b -> b -> b -> a
f (Ptr c -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr c
buf)

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

class GetPName p => GetPName4I p where
    getBoolean4 :: (GLboolean -> GLboolean -> GLboolean -> GLboolean -> a) -> p -> IO a
    getBoolean4 = (p -> Ptr GLboolean -> IO ())
-> (GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> p
-> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLboolean -> IO ()
forall p. GetPName p => p -> Ptr GLboolean -> IO ()
getBooleanv

    getInteger4 :: (GLint -> GLint -> GLint -> GLint -> a) -> p -> IO a
    getInteger4 = (p -> Ptr GLint -> IO ())
-> (GLint -> GLint -> GLint -> GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getEnum4 :: (GLenum -> GLenum -> GLenum -> GLenum -> a) -> p -> IO a
    getEnum4 = (p -> Ptr GLint -> IO ())
-> (GLenum -> GLenum -> GLenum -> GLenum -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

    getSizei4 :: (GLsizei -> GLsizei -> GLsizei -> GLsizei -> a) -> p -> IO a
    getSizei4 = (p -> Ptr GLint -> IO ())
-> (GLint -> GLint -> GLint -> GLint -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv

class GetPName p => GetPName4F p where
    getFloat4 :: (GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
    getFloat4 = (p -> Ptr GLfloat -> IO ())
-> (GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getClampf4 :: (GLclampf -> GLclampf -> GLclampf -> GLclampf -> a) -> p -> IO a
    getClampf4 = (p -> Ptr GLfloat -> IO ())
-> (GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv

    getDouble4 :: (GLdouble -> GLdouble -> GLdouble -> GLdouble -> a) -> p -> IO a
    getDouble4 = (p -> Ptr GLdouble -> IO ())
-> (GLdouble -> GLdouble -> GLdouble -> GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

    getClampd4 :: (GLclampd -> GLclampd -> GLclampd -> GLclampd -> a) -> p -> IO a
    getClampd4 = (p -> Ptr GLdouble -> IO ())
-> (GLdouble -> GLdouble -> GLdouble -> GLdouble -> a) -> p -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

-- | Helper function for the get*4 functions.
get4 :: (Storable b, Storable c)
    => (p -> Ptr c -> IO ())
    -> (b -> b -> b -> b -> a) -- ^ Conversion from the casted value to the return value
    -> p -> IO a
get4 :: (p -> Ptr c -> IO ()) -> (b -> b -> b -> b -> a) -> p -> IO a
get4 g :: p -> Ptr c -> IO ()
g f :: b -> b -> b -> b -> a
f n :: p
n = Int -> (Ptr c -> IO a) -> IO a
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray 4 ((Ptr c -> IO a) -> IO a) -> (Ptr c -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr c
buf -> do
    p -> Ptr c -> IO ()
g p
n Ptr c
buf
    (b -> b -> b -> b -> a) -> Ptr b -> IO a
forall a b. Storable a => (a -> a -> a -> a -> b) -> Ptr a -> IO b
peek4 b -> b -> b -> b -> a
f (Ptr c -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr c
buf)

class GetPName p => GetIPName4I p where
    getBoolean4i :: (GLboolean -> GLboolean -> GLboolean -> GLboolean -> a) -> p -> GLuint -> IO a
    getBoolean4i = (p -> GLenum -> Ptr GLboolean -> IO ())
-> (GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> p
-> GLenum
-> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ())
-> (b -> b -> b -> b -> a) -> p -> GLenum -> IO a
get4i p -> GLenum -> Ptr GLboolean -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLboolean -> IO ()
getBooleaniv

    getInteger4i :: (GLint -> GLint -> GLint -> GLint -> a) -> p -> GLuint -> IO a
    getInteger4i = (p -> GLenum -> Ptr GLint -> IO ())
-> (GLint -> GLint -> GLint -> GLint -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ())
-> (b -> b -> b -> b -> a) -> p -> GLenum -> IO a
get4i p -> GLenum -> Ptr GLint -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv

    getEnum4i :: (GLenum -> GLenum -> GLenum -> GLenum -> a) -> p -> GLuint -> IO a
    getEnum4i = (p -> GLenum -> Ptr GLint -> IO ())
-> (GLenum -> GLenum -> GLenum -> GLenum -> a)
-> p
-> GLenum
-> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ())
-> (b -> b -> b -> b -> a) -> p -> GLenum -> IO a
get4i p -> GLenum -> Ptr GLint -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv

    getSizei4i :: (GLsizei -> GLsizei -> GLsizei -> GLsizei -> a) -> p -> GLuint -> IO a
    getSizei4i = (p -> GLenum -> Ptr GLint -> IO ())
-> (GLint -> GLint -> GLint -> GLint -> a) -> p -> GLenum -> IO a
forall b c p a.
(Storable b, Storable c) =>
(p -> GLenum -> Ptr c -> IO ())
-> (b -> b -> b -> b -> a) -> p -> GLenum -> IO a
get4i p -> GLenum -> Ptr GLint -> IO ()
forall p. GetPName p => p -> GLenum -> Ptr GLint -> IO ()
getIntegeriv

-- | Helper function for the get*4 functions.
get4i :: (Storable b, Storable c)
    => (p -> GLuint -> Ptr c -> IO ())
    -> (b -> b -> b -> b -> a) -- ^ Conversion from the casted value to the return value
    -> p -> GLuint -> IO a
get4i :: (p -> GLenum -> Ptr c -> IO ())
-> (b -> b -> b -> b -> a) -> p -> GLenum -> IO a
get4i g :: p -> GLenum -> Ptr c -> IO ()
g f :: b -> b -> b -> b -> a
f n :: p
n i :: GLenum
i = Int -> (Ptr c -> IO a) -> IO a
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray 4 ((Ptr c -> IO a) -> IO a) -> (Ptr c -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr c
buf -> do
    p -> GLenum -> Ptr c -> IO ()
g p
n GLenum
i Ptr c
buf
    (b -> b -> b -> b -> a) -> Ptr b -> IO a
forall a b. Storable a => (a -> a -> a -> a -> b) -> Ptr a -> IO b
peek4 b -> b -> b -> b -> a
f (Ptr c -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr c
buf)

class GetPName p => GetPNameNI p where
   getEnumN :: (GLenum -> a) -> p -> Int -> IO [a]
   getEnumN f :: GLenum -> a
f p :: p
p n :: Int
n =
      Int -> (Ptr GLint -> IO [a]) -> IO [a]
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray Int
n ((Ptr GLint -> IO [a]) -> IO [a])
-> (Ptr GLint -> IO [a]) -> IO [a]
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr GLint
buf -> do
         p -> Ptr GLint -> IO ()
forall p. GetPName p => p -> Ptr GLint -> IO ()
getIntegerv p
p Ptr GLint
buf
         ((GLint -> a) -> [GLint] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map (GLenum -> a
f (GLenum -> a) -> (GLint -> GLenum) -> GLint -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral)) ([GLint] -> [a]) -> IO [GLint] -> IO [a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` Int -> Ptr GLint -> IO [GLint]
forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray Int
n Ptr GLint
buf

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

class GetPName p => GetPNameMatrix p where
    getMatrixf :: p -> Ptr GLfloat -> IO ()
    getMatrixf = p -> Ptr GLfloat -> IO ()
forall p. GetPName p => p -> Ptr GLfloat -> IO ()
getFloatv
    getMatrixd :: p -> Ptr GLdouble -> IO ()
    getMatrixd = p -> Ptr GLdouble -> IO ()
forall p. GetPName p => p -> Ptr GLdouble -> IO ()
getDoublev

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

data PName1I
    = GetEdgeFlag           -- ^ bool
    | GetRGBAMode           -- ^ enum
    | GetCurrentIndex       -- ^ int
    | GetMaxTextureUnits    -- ^ enum
    -- displaylist
    | GetListIndex          -- ^ enum
    | GetListMode           -- ^ enum
    | GetMaxListNesting     -- ^ sizei
    | GetListBase           -- ^ enum
    -- rendermode
    | GetRenderMode         -- ^ enum
    -- framebufferbinding
    | GetDrawFramebufferBinding -- ^ int
    | GetReadFramebufferBinding -- ^ int
    | GetFramebufferBinding     -- ^ int
    -- renderbufferbinding
    | GetRenderbufferBinding    -- ^ int
    -- hint
    | GetPerspectiveCorrectionHint -- ^ enum
    | GetPointSmoothHint        -- ^ enum
    | GetLineSmoothHint         -- ^ enum
    | GetPolygonSmoothHint      -- ^ enum
    | GetFogHint                -- ^ enum
    | GetGenerateMipmapHint     -- ^ enum
    | GetTextureCompressionHint -- ^ enum
    | GetPackCMYKHint           -- ^ enum
    | GetUnpackCMYKHint         -- ^ enum
    -- vertexarray
    | GetVertexArrayBinding     -- ^ int
    -- Selction?
    | GetMaxNameStackDepth      -- ^ int
    | GetNameStackDepth         -- ^ int
    -- ContextProfile
    | GetContextProfileMask     -- ^ enum
    -- pixelStorage
    | GetPackSwapBytes      -- ^ bool
    | GetUnpackSwapBytes    -- ^ bool
    | GetPackLSBFirst       -- ^ bool
    | GetUnpackLSBFirst     -- ^ bool
    | GetPackRowLength      -- ^ int
    | GetUnpackRowLength    -- ^ int
    | GetPackSkipRows       -- ^ int
    | GetUnpackSkipRows     -- ^ int
    | GetPackSkipPixels     -- ^ int
    | GetUnpackSkipPixels   -- ^ int
    | GetPackAlignment      -- ^ int
    | GetUnpackAlignment    -- ^ int
    | GetPackImageHeight    -- ^ int
    | GetUnpackImageHeight  -- ^ int
    | GetPackSkipImages     -- ^ int
    | GetUnpackSkipImages   -- ^ int
    -- pixel map
    | GetPixelMapIToISize   -- ^ int
    | GetPixelMapSToSSize   -- ^ int
    | GetPixelMapIToRSize   -- ^ int
    | GetPixelMapIToGSize   -- ^ int
    | GetPixelMapIToBSize   -- ^ int
    | GetPixelMapIToASize   -- ^ int
    | GetPixelMapRToRSize   -- ^ int
    | GetPixelMapGToGSize   -- ^ int
    | GetPixelMapBToBSize   -- ^ int
    | GetPixelMapAToASize   -- ^ int
    | GetMaxPixelMapTable   -- ^ sizei
    -- shader limits
    | GetMaxVertexTextureImageUnits     -- ^ sizei
    | GetMaxTextureImageUnits           -- ^ sizei
    | GetMaxCombinedTextureImageUnits   -- ^ sizei
    | GetMaxTextureCoords               -- ^ sizei
    | GetMaxVertexUniformComponents     -- ^ sizei
    | GetMaxFragmentUniformComponents   -- ^ sizei
    | GetMaxVertexAttribs               -- ^ sizei
    | GetMaxVaryingFloats               -- ^ sizei
    -- tessellation
    | GetPatchVertices                  -- ^ sizei
    | GetMaxPatchVertices               -- ^ sizei
    | GetMaxTessGenLevel                -- ^ sizei
    -- coordtrans
    | GetMatrixMode                 -- ^ enum
    | GetModelviewStackDepth        -- ^ sizei
    | GetProjectionStackDepth       -- ^ sizei
    | GetTextureStackDepth          -- ^ sizei
    | GetColorMatrixStackDepth      -- ^ sizei
    | GetMaxModelviewStackDepth     -- ^ sizei
    | GetMaxProjectionStackDepth    -- ^ sizei
    | GetMaxTextureStackDepth       -- ^ sizei
    | GetMaxColorMatrixStackDepth   -- ^ sizei
    | GetMaxMatrixPaletteStackDepth -- ^ sizei
    | GetCurrentMatrixStackDepth    -- ^ sizei
    | GetActiveTexture              -- ^ enum
    -- VertexArrays
    | GetVertexArraySize    -- ^ int
    | GetVertexArrayType    -- ^ enum
    | GetVertexArrayStride  -- ^ int
    | GetNormalArrayType    -- ^ enum
    | GetNormalArrayStride  -- ^ int
    | GetColorArraySize     -- ^ int
    | GetColorArrayType     -- ^ enum
    | GetColorArrayStride   -- ^ int
    | GetIndexArrayType     -- ^ enum
    | GetIndexArrayStride   -- ^ int
    | GetTextureCoordArraySize      -- ^ int
    | GetTextureCoordArrayType      -- ^ enum
    | GetTextureCoordArrayStride    -- ^ int
    | GetEdgeFlagArrayStride        -- ^ int
    | GetFogCoordArrayType          -- ^ enum
    | GetFogCoordArrayStride        -- ^ int
    | GetSecondaryColorArraySize    -- ^ int
    | GetSecondaryColorArrayType    -- ^ enum
    | GetSecondaryColorArrayStride  -- ^ int
    | GetArrayElementLockCount      -- ^ int
    | GetArrayElementLockFirst      -- ^ int
    | GetClientActiveTexture        -- ^ enum
    | GetMaxElementsVertices        -- ^ sizei
    | GetMaxElementsIndices         -- ^ sizei
    | GetPrimitiveRestartIndex      -- ^ int
    | GetPrimitiveRestartNV         -- ^ bool
    | GetPrimitiveRestartIndexNV    -- ^ int
    -- bufferObjects
    | GetArrayBufferBinding         -- ^ int
    | GetAtomicCounterBufferBinding -- ^ int
    | GetCopyReadBufferBinding      -- ^ int
    | GetCopyWriteBufferBinding     -- ^ int
    | GetDispatchIndirectBufferBinding -- ^ int
    | GetDrawIndirectBufferBinding  -- ^ int
    | GetElementArrayBufferBinding  -- ^ int
    | GetPixelPackBufferBinding     -- ^ int
    | GetPixelUnpackBufferBinding   -- ^ int
    | GetQueryBufferBinding         -- ^ int
    | GetShaderStorageBufferBinding -- ^ int
    | GetTransformFeedbackBufferBinding -- ^ int
    | GetUniformBufferBinding       -- ^ int

    | GetVertexArrayBufferBinding   -- ^ int
    | GetNormalArrayBufferBinding   -- ^ int
    | GetColorArrayBufferBinding    -- ^ int
    | GetIndexArrayBufferBinding    -- ^ int
    | GetTextureCoordArrayBufferBinding -- ^ int
    | GetEdgeFlagArrayBufferBinding -- ^ int
    | GetSecondaryColorArrayBufferBinding   -- ^ int
    | GetFogCoordArrayBufferBinding -- ^ int
    -- clipping
    | GetMaxClipPlanes          -- ^ sizei
    -- Colors
    | GetMaxLights              -- ^ sizei
    | GetFrontFace              -- ^ enum
    | GetLightModelLocalViewer  -- ^ bool
    | GetLightModelTwoSide      -- ^ bool
    | GetLightModelColorControl -- ^ enum
    | GetColorMaterialFace      -- ^ enum
    | GetColorMaterialParameter -- ^ enum
    | GetShadeModel             -- ^ enum
    | GetFragmentColorClamp     -- ^ enum
    | GetVertexColorClamp       -- ^ enum
    | GetReadColorClamp         -- ^ enum
    -- Evaluators
    | GetMaxEvalOrder       -- ^ int
    | GetMap1GridSegments   -- ^ int
    -- Fog
    | GetFogMode            -- ^ int => enum
    | GetFogIndex           -- ^ int
    | GetFogCoordSrc        -- ^ int
    | GetFogDistanceMode    -- ^ int => enum
    -- Framebuffer
    | GetAuxBuffers         -- ^ sizei
    | GetDoublebuffer       -- ^ bool
    | GetStereo             -- ^ bool
    | GetRedBits            -- ^ sizei
    | GetGreenBits          -- ^ sizei
    | GetBlueBits           -- ^ sizei
    | GetAlphaBits          -- ^ sizei
    | GetStencilBits        -- ^ sizei
    | GetDepthBits          -- ^ sizei
    | GetAccumRedBits       -- ^ sizei
    | GetAccumGreenBits     -- ^ sizei
    | GetAccumBlueBits      -- ^ sizei
    | GetAccumAlphaBits     -- ^ sizei
    | GetDrawBuffer         -- ^ enum
    | GetDrawBufferN GLsizei -- enum
    | GetMaxDrawBuffers     -- ^ sizei
    | GetIndexWritemask     -- ^ int
    | GetDepthWritemask     -- ^ bool
    | GetStencilWritemask   -- ^ bool
    | GetStencilBackWritemask   -- ^ bool
    | GetStencilClearValue  -- ^ int
    -- Program
    | GetCurrentProgram     -- ^ int
    -- Transformfeedback
    | GetMaxTransformFeedbackSeparateAttribs        -- ^ int
    | GetMaxTransformFeedbackInterleavedComponents  -- ^ int
    | GetMaxTransformFeedbackSeparateComponents     -- ^ int
    | GetCurrentRasterIndex         -- ^ int
    | GetCurrentRasterPositionValid -- ^ bool
    -- LineSegment
    | GetLineStippleRepeat          -- ^ int
    | GetLineStipplePattern         -- ^ int
    -- PerFragment
    | GetSampleCoverageInvert       -- ^ bool
    | GetAlphaTestFunc              -- ^ enum
    | GetStencilFunc                -- ^ enum
    | GetStencilBackFunc            -- ^ enum
    | GetStencilValueMask           -- ^ int
    | GetStencilBackValueMask       -- ^ int
    | GetStencilRef                 -- ^ int
    | GetStencilBackRef             -- ^ int
    | GetStencilFail                -- ^ enum
    | GetStencilBackFail            -- ^ enum
    | GetStencilPassDepthFail       -- ^ enum
    | GetStencilBackPassDepthFail   -- ^ enum
    | GetStencilPassDepthPass       -- ^ enum
    | GetStencilBackPassDepthPass   -- ^ enum
    | GetActiveStencilFace          -- ^ enum
    | GetLogicOpMode                -- ^ enum
    | GetBlendDst                   -- ^ enum
    | GetBlendSrc                   -- ^ enum
    | GetBlendSrcRGB                -- ^ enum
    | GetBlendSrcAlpha              -- ^ enum
    | GetBlendDstRGB                -- ^ enum
    | GetBlendDstAlpha              -- ^ enum
    | GetBlendEquation              -- ^ enum
    | GetBlendEquationAlpha         -- ^ enum
    | GetDepthFunc                  -- ^ enum
    | GetMapColor                   -- ^ bool
    | GetMapStencil                 -- ^ bool
    | GetIndexShift                 -- ^ int
    | GetIndexOffset                -- ^ int
    -- Polygons                     -- ^ enum
    | GetCullFaceMode
    -- TextureSpecification
    | GetNumCompressedTextureFormats    -- ^ int
    | GetMaxTextureSize                 -- ^ int
    | GetMax3DTextureSize               -- ^ int
    | GetMaxCubeMapTextureSize          -- ^ int
    | GetMaxRectangleTextureSize        -- ^ int
    | GetMaxArrayTextureLayers          -- ^ int
    | GetMaxSampleMaskWords             -- ^ int
    | GetMaxColorTextureSamples         -- ^ int
    | GetMaxDepthTextureSamples         -- ^ int
    | GetMaxIntegerSamples              -- ^ int
    -- ReadCopyPixels
    | GetReadBuffer                 -- ^ enum
    -- Texture Objects
    | GetTextureBinding1D           -- ^ int\/enum
    | GetTextureBinding2D           -- ^ int\/enum
    | GetTextureBinding3D           -- ^ int\/enum
    | GetTextureBinding1DArray      -- ^ int\/enum
    | GetTextureBinding2DArray      -- ^ int\/enum
    | GetTextureBindingCubeMapArray -- ^ int\/enum
    | GetTextureBindingRectangle    -- ^ int\/enum
    | GetTextureBindingBuffer       -- ^ int\/enum
    | GetTextureBindingCubeMap      -- ^ int\/enum
    | GetTextureBinding2DMultisample -- ^ int\/enum
    | GetTextureBinding2DMultisampleArray -- ^ int\/enum
    -- Antialiasing
    | GetSubpixelBits               -- ^ sizei
    | GetSamples                    -- ^ sizei
    | GetSampleBuffers              -- ^ sizei
    -- Sync Objects
    | GetMaxServerWaitTimeout       -- ^ int
    -- Query Objects
    | GetMaxVertexStreams           -- ^ int
    -- GL Time
    | GetTimestamp                  -- ^ int
    -- Shader
    | GetShaderCompiler             -- ^ bool
    | GetNumShaderBinaryFormats     -- ^ int
    | GetNumProgramBinaryFormats    -- ^ int
    -- Debug Output
    | GetMaxDebugMessageLength        -- ^ int
    | GetMaxDebugLoggedMessages       -- ^ int
    | GetDebugLoggedMessages          -- ^ int
    | GetDebugNextLoggedMessageLength -- ^ int
    | GetMaxDebugGroupStackDepth      -- ^ int
    | GetMaxLabelLength               -- ^ int
    -- Extensions
    | GetNumExtensions     -- ^ uint

instance GetPName1I PName1I where

instance GetPName PName1I where
    marshalGetPName :: PName1I -> Maybe GLenum
marshalGetPName pn :: PName1I
pn = case PName1I
pn of
        GetEdgeFlag -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_EDGE_FLAG
        GetRGBAMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RGBA_MODE
        GetCurrentIndex -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_INDEX
        GetMaxTextureUnits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_UNITS
        -- displaylist
        GetListIndex -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIST_INDEX
        GetListMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIST_MODE
        GetMaxListNesting -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_LIST_NESTING
        GetListBase -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIST_BASE
        -- rendermode
        GetRenderMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RENDER_MODE
        -- framebufferbinding
        GetDrawFramebufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DRAW_FRAMEBUFFER_BINDING
        GetReadFramebufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_READ_FRAMEBUFFER_BINDING
        GetFramebufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FRAMEBUFFER_BINDING
        -- renderbufferbinding
        GetRenderbufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RENDERBUFFER_BINDING
        -- hint
        GetPerspectiveCorrectionHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PERSPECTIVE_CORRECTION_HINT
        GetPointSmoothHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_SMOOTH_HINT
        GetLineSmoothHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LINE_SMOOTH_HINT
        GetPolygonSmoothHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POLYGON_SMOOTH_HINT
        GetFogHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_HINT
        GetGenerateMipmapHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_GENERATE_MIPMAP_HINT
        GetTextureCompressionHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COMPRESSION_HINT
        GetPackCMYKHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_CMYK_HINT_EXT
        GetUnpackCMYKHint -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_CMYK_HINT_EXT
        GetVertexArrayBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_VERTEX_ARRAY_BINDING
        -- Selection ?
        GetMaxNameStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_NAME_STACK_DEPTH
        GetNameStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NAME_STACK_DEPTH
        -- ContextProfile
        GetContextProfileMask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CONTEXT_PROFILE_MASK
        --pixel storage
        GetPackSwapBytes -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_SWAP_BYTES
        GetUnpackSwapBytes -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_SWAP_BYTES
        GetPackLSBFirst -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_LSB_FIRST
        GetUnpackLSBFirst -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_LSB_FIRST
        GetPackRowLength -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_ROW_LENGTH
        GetUnpackRowLength -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_ROW_LENGTH
        GetPackSkipRows -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_SKIP_ROWS
        GetUnpackSkipRows -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_SKIP_ROWS
        GetPackSkipPixels -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_SKIP_PIXELS
        GetUnpackSkipPixels -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_SKIP_PIXELS
        GetPackAlignment -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_ALIGNMENT
        GetUnpackAlignment -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_ALIGNMENT
        GetPackSkipImages -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_SKIP_IMAGES
        GetUnpackSkipImages -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_SKIP_IMAGES
        GetPackImageHeight -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PACK_IMAGE_HEIGHT
        GetUnpackImageHeight -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNPACK_IMAGE_HEIGHT
        -- pixelmap
        GetPixelMapIToISize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_I_TO_I_SIZE
        GetPixelMapSToSSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_S_TO_S_SIZE
        GetPixelMapIToRSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_I_TO_R_SIZE
        GetPixelMapIToGSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_I_TO_G_SIZE
        GetPixelMapIToBSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_I_TO_B_SIZE
        GetPixelMapIToASize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_I_TO_A_SIZE
        GetPixelMapRToRSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_R_TO_R_SIZE
        GetPixelMapGToGSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_G_TO_G_SIZE
        GetPixelMapBToBSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_B_TO_B_SIZE
        GetPixelMapAToASize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_MAP_A_TO_A_SIZE
        GetMaxPixelMapTable -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_PIXEL_MAP_TABLE
        -- shader limits
        GetMaxVertexTextureImageUnits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
        GetMaxTextureImageUnits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_IMAGE_UNITS
        GetMaxCombinedTextureImageUnits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
        GetMaxTextureCoords -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_COORDS
        GetMaxVertexUniformComponents -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_VERTEX_UNIFORM_COMPONENTS
        GetMaxFragmentUniformComponents -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
        GetMaxVaryingFloats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_VARYING_COMPONENTS
        GetMaxVertexAttribs -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_VERTEX_ATTRIBS
        -- tessellation
        GetPatchVertices -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PATCH_VERTICES
        GetMaxPatchVertices -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_PATCH_VERTICES
        GetMaxTessGenLevel -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TESS_GEN_LEVEL
        -- coordtrans
        GetMatrixMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MATRIX_MODE
        GetModelviewStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MODELVIEW_STACK_DEPTH
        GetProjectionStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PROJECTION_STACK_DEPTH
        GetTextureStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_STACK_DEPTH
        GetColorMatrixStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_MATRIX_STACK_DEPTH
        GetMaxModelviewStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_MODELVIEW_STACK_DEPTH
        GetMaxProjectionStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_PROJECTION_STACK_DEPTH
        GetMaxTextureStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_STACK_DEPTH
        GetMaxColorMatrixStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_COLOR_MATRIX_STACK_DEPTH
        GetMaxMatrixPaletteStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB
        GetCurrentMatrixStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_MATRIX_STACK_DEPTH_ARB
        GetActiveTexture -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACTIVE_TEXTURE
        -- vertexarrays
        GetVertexArraySize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_VERTEX_ARRAY_SIZE
        GetVertexArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_VERTEX_ARRAY_TYPE
        GetVertexArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_VERTEX_ARRAY_STRIDE
        GetNormalArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NORMAL_ARRAY_TYPE
        GetNormalArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NORMAL_ARRAY_STRIDE
        GetColorArraySize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_ARRAY_SIZE
        GetColorArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_ARRAY_TYPE
        GetColorArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_ARRAY_STRIDE
        GetIndexArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_ARRAY_TYPE
        GetIndexArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_ARRAY_STRIDE
        GetTextureCoordArraySize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COORD_ARRAY_SIZE
        GetTextureCoordArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COORD_ARRAY_TYPE
        GetTextureCoordArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COORD_ARRAY_STRIDE
        GetEdgeFlagArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_EDGE_FLAG_ARRAY_STRIDE
        GetFogCoordArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_COORD_ARRAY_TYPE
        GetFogCoordArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_COORD_ARRAY_STRIDE
        GetSecondaryColorArraySize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SECONDARY_COLOR_ARRAY_SIZE
        GetSecondaryColorArrayType -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SECONDARY_COLOR_ARRAY_TYPE
        GetSecondaryColorArrayStride -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SECONDARY_COLOR_ARRAY_STRIDE
        GetArrayElementLockCount -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ARRAY_ELEMENT_LOCK_COUNT_EXT
        GetArrayElementLockFirst -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ARRAY_ELEMENT_LOCK_FIRST_EXT
        GetClientActiveTexture -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CLIENT_ACTIVE_TEXTURE
        GetMaxElementsVertices -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_ELEMENTS_VERTICES
        GetMaxElementsIndices -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_ELEMENTS_INDICES
        GetPrimitiveRestartIndex -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PRIMITIVE_RESTART_INDEX
        GetPrimitiveRestartNV -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PRIMITIVE_RESTART_NV
        GetPrimitiveRestartIndexNV -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PRIMITIVE_RESTART_INDEX_NV
        -- bufferobjects
        GetArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ARRAY_BUFFER_BINDING
        GetAtomicCounterBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ATOMIC_COUNTER_BUFFER_BINDING
        GetCopyReadBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COPY_READ_BUFFER_BINDING
        GetCopyWriteBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COPY_WRITE_BUFFER_BINDING
        GetDispatchIndirectBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DISPATCH_INDIRECT_BUFFER_BINDING
        GetDrawIndirectBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DRAW_INDIRECT_BUFFER_BINDING
        GetElementArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ELEMENT_ARRAY_BUFFER_BINDING
        GetPixelPackBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_PACK_BUFFER_BINDING
        GetPixelUnpackBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PIXEL_UNPACK_BUFFER_BINDING
        GetQueryBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_QUERY_BUFFER_BINDING
        GetShaderStorageBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADER_STORAGE_BUFFER_BINDING
        GetTransformFeedbackBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
        GetUniformBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNIFORM_BUFFER_BINDING

        GetVertexArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_VERTEX_ARRAY_BUFFER_BINDING
        GetNormalArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NORMAL_ARRAY_BUFFER_BINDING
        GetColorArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_ARRAY_BUFFER_BINDING
        GetIndexArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_ARRAY_BUFFER_BINDING
        GetTextureCoordArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
        GetEdgeFlagArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
        GetSecondaryColorArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
        GetFogCoordArrayBufferBinding -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_COORD_ARRAY_BUFFER_BINDING
        -- clipping
        GetMaxClipPlanes -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_CLIP_DISTANCES
        -- Colors
        GetMaxLights -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_LIGHTS
        GetFrontFace -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FRONT_FACE
        GetLightModelLocalViewer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIGHT_MODEL_LOCAL_VIEWER
        GetLightModelTwoSide -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIGHT_MODEL_TWO_SIDE
        GetLightModelColorControl -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIGHT_MODEL_COLOR_CONTROL
        GetColorMaterialFace -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_MATERIAL_FACE
        GetColorMaterialParameter -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_MATERIAL_PARAMETER
        GetShadeModel -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADE_MODEL
        GetVertexColorClamp -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CLAMP_VERTEX_COLOR
        GetFragmentColorClamp -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CLAMP_FRAGMENT_COLOR
        GetReadColorClamp -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CLAMP_READ_COLOR
        -- Evaluators
        GetMaxEvalOrder -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_EVAL_ORDER
        GetMap1GridSegments -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAP1_GRID_SEGMENTS
        -- Fog
        GetFogMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_MODE
        GetFogIndex -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_INDEX
        GetFogCoordSrc -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_COORD_SRC
        GetFogDistanceMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_DISTANCE_MODE_NV
        -- Framebuffer
        GetAuxBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_AUX_BUFFERS
        GetDoublebuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DOUBLEBUFFER
        GetStereo -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STEREO
        GetRedBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RED_BITS
        GetGreenBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_GREEN_BITS
        GetBlueBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLUE_BITS
        GetAlphaBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALPHA_BITS
        GetDepthBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_BITS
        GetStencilBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BITS
        GetAccumRedBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACCUM_RED_BITS
        GetAccumGreenBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACCUM_GREEN_BITS
        GetAccumBlueBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACCUM_BLUE_BITS
        GetAccumAlphaBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACCUM_ALPHA_BITS
        GetDrawBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DRAW_BUFFER
        GetDrawBufferN i :: GLint
i -> GLint -> Maybe GLenum
drawBufferIndexToEnum GLint
i
        GetMaxDrawBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_DRAW_BUFFERS
        GetIndexWritemask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_WRITEMASK
        GetDepthWritemask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_WRITEMASK
        GetStencilWritemask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_WRITEMASK
        GetStencilBackWritemask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_WRITEMASK
        GetStencilClearValue -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_CLEAR_VALUE
        -- Program
        GetCurrentProgram -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_PROGRAM
        -- Transformfeedback
        GetMaxTransformFeedbackSeparateAttribs -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
        GetMaxTransformFeedbackSeparateComponents -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
        GetMaxTransformFeedbackInterleavedComponents -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
        -- RasterPos
        GetCurrentRasterIndex -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_INDEX
        GetCurrentRasterPositionValid -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_POSITION_VALID
        -- LineSegment
        GetLineStipplePattern -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LINE_STIPPLE_PATTERN
        GetLineStippleRepeat -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LINE_STIPPLE_REPEAT
        -- PerFragment
        GetSampleCoverageInvert -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SAMPLE_COVERAGE_INVERT
        GetAlphaTestFunc -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALPHA_TEST_FUNC
        GetStencilFunc -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_FUNC
        GetStencilBackFunc -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_FUNC
        GetStencilValueMask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_VALUE_MASK
        GetStencilBackValueMask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_VALUE_MASK
        GetStencilRef -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_REF
        GetStencilBackRef -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_REF
        GetStencilFail -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_FAIL
        GetStencilBackFail -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_FAIL
        GetStencilPassDepthFail -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_PASS_DEPTH_FAIL
        GetStencilBackPassDepthFail -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_PASS_DEPTH_FAIL
        GetStencilPassDepthPass -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_PASS_DEPTH_PASS
        GetStencilBackPassDepthPass -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_STENCIL_BACK_PASS_DEPTH_PASS
        GetActiveStencilFace -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACTIVE_STENCIL_FACE_EXT
        GetLogicOpMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LOGIC_OP_MODE
        GetBlendDst -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_DST
        GetBlendSrc -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_SRC
        GetBlendDstRGB -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_DST_RGB
        GetBlendSrcRGB -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_SRC_RGB
        GetBlendDstAlpha -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_DST_ALPHA
        GetBlendSrcAlpha -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_SRC_ALPHA
        GetBlendEquation -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_EQUATION_RGB
        GetBlendEquationAlpha -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_EQUATION_ALPHA
        GetDepthFunc -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_FUNC
        GetMapColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAP_COLOR
        GetMapStencil -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAP_STENCIL
        GetIndexShift -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_SHIFT
        GetIndexOffset -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_OFFSET
        -- Polygons
        GetCullFaceMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CULL_FACE_MODE
        -- Texture specification
        GetNumCompressedTextureFormats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NUM_COMPRESSED_TEXTURE_FORMATS
        GetMaxTextureSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_SIZE
        GetMax3DTextureSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_3D_TEXTURE_SIZE
        GetMaxCubeMapTextureSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_CUBE_MAP_TEXTURE_SIZE
        GetMaxRectangleTextureSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_RECTANGLE_TEXTURE_SIZE
        GetMaxArrayTextureLayers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_ARRAY_TEXTURE_LAYERS
        GetMaxSampleMaskWords -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_SAMPLE_MASK_WORDS
        GetMaxColorTextureSamples -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_COLOR_TEXTURE_SAMPLES
        GetMaxDepthTextureSamples -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_DEPTH_TEXTURE_SAMPLES
        GetMaxIntegerSamples -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_INTEGER_SAMPLES
        -- ReadCopyPixels
        GetReadBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_READ_BUFFER
        -- Texture Objects
        GetTextureBinding1D -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_1D
        GetTextureBinding2D -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_2D
        GetTextureBinding3D -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_3D
        GetTextureBinding1DArray -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_1D_ARRAY
        GetTextureBinding2DArray -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_2D_ARRAY
        GetTextureBindingCubeMapArray -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
        GetTextureBindingRectangle -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_RECTANGLE
        GetTextureBindingBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_BUFFER
        GetTextureBindingCubeMap -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_CUBE_MAP
        GetTextureBinding2DMultisample -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_2D_MULTISAMPLE
        GetTextureBinding2DMultisampleArray -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY
        -- Antialiasing
        GetSubpixelBits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SUBPIXEL_BITS
        GetSampleBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SAMPLE_BUFFERS
        GetSamples -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SAMPLES
         -- Sync Objects
        GetMaxServerWaitTimeout -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_SERVER_WAIT_TIMEOUT
        -- Query Objects
        GetMaxVertexStreams -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_VERTEX_STREAMS
        -- GL Time
        GetTimestamp -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TIMESTAMP
        -- Shader
        GetShaderCompiler -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADER_COMPILER
        GetNumShaderBinaryFormats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NUM_SHADER_BINARY_FORMATS
        GetNumProgramBinaryFormats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NUM_PROGRAM_BINARY_FORMATS
        -- Debug Output
        GetMaxDebugMessageLength -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_DEBUG_MESSAGE_LENGTH
        GetMaxDebugLoggedMessages -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_DEBUG_LOGGED_MESSAGES
        GetDebugLoggedMessages -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEBUG_LOGGED_MESSAGES
        GetDebugNextLoggedMessageLength -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH
        GetMaxDebugGroupStackDepth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_DEBUG_GROUP_STACK_DEPTH
        GetMaxLabelLength -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_LABEL_LENGTH
        GetNumExtensions -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NUM_EXTENSIONS

-- 0x8825 through 0x8834 are reserved for draw buffers

drawBufferIndexToEnum :: GLsizei -> Maybe GLenum
drawBufferIndexToEnum :: GLint -> Maybe GLenum
drawBufferIndexToEnum i :: GLint
i
   | 0 GLint -> GLint -> Bool
forall a. Ord a => a -> a -> Bool
<= GLint
i Bool -> Bool -> Bool
&& GLint
i GLint -> GLint -> Bool
forall a. Ord a => a -> a -> Bool
<= GLint
maxDrawBufferIndex = GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just (GLenum
GL_DRAW_BUFFER0 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
+ GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLint
i)
   | Bool
otherwise = Maybe GLenum
forall a. Maybe a
Nothing

maxDrawBufferIndex :: GLsizei
maxDrawBufferIndex :: GLint
maxDrawBufferIndex = GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral (GLenum
GL_DRAW_BUFFER15 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
- GLenum
GL_DRAW_BUFFER0)


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

data PName1F
    = GetCurrentFogCoord    -- ^ Float1
    -- Rasterization
    | GetZoomX              -- ^ Float
    | GetZoomY              -- ^ Float
    -- Colors
    | GetMaxShininess       -- ^ Float
    | GetMaxSpotExponent    -- ^ Float
    -- Fog
    | GetFogStart           -- ^ float
    | GetFogEnd             -- ^ float
    | GetFogDensity         -- ^ float
    -- Framebuffer
    | GetDepthClearValue    -- ^ clampf
    | GetIndexClearValue    -- ^ float
    -- RasterPos
    | GetCurrentRasterDistance -- ^ float
    -- Point
    | GetPointSizeMin               -- ^ float
    | GetPointSizeMax               -- ^ float
    | GetPointFadeThresholdSize     -- ^ float
    | GetSmoothPointSizeGranularity -- ^ float
    | GetPointSize                  -- ^ float
    -- LineSegment
    | GetLineWidth                  -- ^ float
    | GetSmoothLineWidthGranularity -- ^ float
    -- PerFragment
    | GetSampleCoverageValue        -- ^ clampf
    | GetAlphaTestRef               -- ^ clampf
    -- PixelTransfer
    | GetRedScale                   -- ^ float
    | GetGreenScale                 -- ^ float
    | GetBlueScale                  -- ^ float
    | GetAlphaScale                 -- ^ float
    | GetPostConvolutionRedScale    -- ^ float
    | GetPostConvolutionGreenScale  -- ^ float
    | GetPostConvolutionBlueScale   -- ^ float
    | GetPostConvolutionAlphaScale  -- ^ float
    | GetPostColorMatrixRedScale    -- ^ float
    | GetPostColorMatrixGreenScale  -- ^ float
    | GetPostColorMatrixBlueScale   -- ^ float
    | GetPostColorMatrixAlphaScale  -- ^ float
    | GetRedBias                    -- ^ float
    | GetGreenBias                  -- ^ float
    | GetBlueBias                   -- ^ float
    | GetAlphaBias                  -- ^ float
    | GetPostConvolutionRedBias     -- ^ float
    | GetPostConvolutionGreenBias   -- ^ float
    | GetPostConvolutionBlueBias    -- ^ float
    | GetPostConvolutionAlphaBias   -- ^ float
    | GetPostColorMatrixRedBias     -- ^ float
    | GetPostColorMatrixGreenBias   -- ^ float
    | GetPostColorMatrixBlueBias    -- ^ float
    | GetPostColorMatrixAlphaBias   -- ^ float
    | GetDepthScale                 -- ^ float
    | GetDepthBias                  -- ^ float
    -- Polygons
    | GetPolygonOffsetFactor        -- ^ float
    | GetPolygonOffsetUnits         -- ^ float
    -- Texture parameters
    | GetMaxTextureMaxAnisotropy    -- ^ float
    | GetMaxTextureLODBias          -- ^ float

instance GetPName1F PName1F where

instance GetPName PName1F where
    marshalGetPName :: PName1F -> Maybe GLenum
marshalGetPName pn :: PName1F
pn = case PName1F
pn of
        GetCurrentFogCoord -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_FOG_COORD
        -- Rasterization
        GetZoomX -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ZOOM_X
        GetZoomY -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ZOOM_Y
        -- Colors
        GetMaxShininess -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_SHININESS_NV
        GetMaxSpotExponent -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_SPOT_EXPONENT_NV
        -- Fog
        GetFogStart -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_START
        GetFogEnd -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_END
        GetFogDensity -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_DENSITY
        -- Framebuffer
        GetDepthClearValue -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_CLEAR_VALUE
        GetIndexClearValue -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_INDEX_CLEAR_VALUE
        -- RasterPos
        GetCurrentRasterDistance -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_DISTANCE
        -- Point
        GetPointSizeMin -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_SIZE_MIN
        GetPointSizeMax -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_SIZE_MAX
        GetPointFadeThresholdSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_FADE_THRESHOLD_SIZE
        GetSmoothPointSizeGranularity -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_SIZE_GRANULARITY
        GetPointSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_SIZE
        -- LineSegment
        GetSmoothLineWidthGranularity -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SMOOTH_LINE_WIDTH_GRANULARITY
        GetLineWidth -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LINE_WIDTH
        -- PerFragment
        GetSampleCoverageValue -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SAMPLE_COVERAGE_VALUE
        GetAlphaTestRef -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALPHA_TEST_REF
        -- PixelTransfer
        GetRedScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RED_SCALE
        GetRedBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RED_BIAS
        GetGreenScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_GREEN_SCALE
        GetGreenBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_GREEN_BIAS
        GetBlueScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLUE_SCALE
        GetBlueBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLUE_BIAS
        GetAlphaScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALPHA_SCALE
        GetAlphaBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALPHA_BIAS
        GetPostConvolutionRedScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_RED_SCALE
        GetPostConvolutionGreenScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_GREEN_SCALE
        GetPostConvolutionBlueScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_BLUE_SCALE
        GetPostConvolutionAlphaScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_ALPHA_SCALE
        GetPostConvolutionRedBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_RED_BIAS
        GetPostConvolutionGreenBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_GREEN_BIAS
        GetPostConvolutionBlueBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_BLUE_BIAS
        GetPostConvolutionAlphaBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_ALPHA_BIAS
        GetPostColorMatrixRedScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_RED_SCALE
        GetPostColorMatrixGreenScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_GREEN_SCALE
        GetPostColorMatrixBlueScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_BLUE_SCALE
        GetPostColorMatrixAlphaScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_ALPHA_SCALE
        GetPostColorMatrixRedBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_RED_BIAS
        GetPostColorMatrixGreenBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_GREEN_BIAS
        GetPostColorMatrixBlueBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_BLUE_BIAS
        GetPostColorMatrixAlphaBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_ALPHA_BIAS
        GetDepthScale -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_SCALE
        GetDepthBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_BIAS
        -- Polygons
        GetPolygonOffsetFactor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POLYGON_OFFSET_FACTOR
        GetPolygonOffsetUnits -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POLYGON_OFFSET_UNITS
        -- Texture parameters
        GetMaxTextureMaxAnisotropy -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
        GetMaxTextureLODBias -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_TEXTURE_LOD_BIAS

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

data IPName1I =
      GetAtomicCounterBuffer
    | GetAtomicCounterBufferStart
    | GetAtomicCounterBufferSize
    | GetShaderStorageBuffer
    | GetShaderStorageBufferStart
    | GetShaderStorageBufferSize
    | GetTransformFeedbackBuffer
    | GetTransformFeedbackBufferStart
    | GetTransformFeedbackBufferSize
    | GetUniformBuffer
    | GetUniformBufferStart
    | GetUniformBufferSize

instance GetIPName1I IPName1I where

instance GetPName IPName1I where
    marshalGetPName :: IPName1I -> Maybe GLenum
marshalGetPName pn :: IPName1I
pn = case IPName1I
pn of
        GetAtomicCounterBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ATOMIC_COUNTER_BUFFER
        GetAtomicCounterBufferStart -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ATOMIC_COUNTER_BUFFER_START
        GetAtomicCounterBufferSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ATOMIC_COUNTER_BUFFER_SIZE
        GetShaderStorageBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADER_STORAGE_BUFFER
        GetShaderStorageBufferStart -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADER_STORAGE_BUFFER_START
        GetShaderStorageBufferSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADER_STORAGE_BUFFER_SIZE
        GetTransformFeedbackBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TRANSFORM_FEEDBACK_BUFFER
        GetTransformFeedbackBufferStart -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TRANSFORM_FEEDBACK_BUFFER_START
        GetTransformFeedbackBufferSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
        GetUniformBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNIFORM_BUFFER
        GetUniformBufferStart -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNIFORM_BUFFER_START
        GetUniformBufferSize -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_UNIFORM_BUFFER_SIZE

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

data PName2I
    -- coordtrans
    = GetMaxViewportDims -- ^ sizei
    -- Evaluators
    | GetMap2GridSegments
    -- Polygons
    | GetPolygonMode

instance GetPName2I PName2I where

instance GetPName PName2I where
    marshalGetPName :: PName2I -> Maybe GLenum
marshalGetPName pn :: PName2I
pn = case PName2I
pn of
        -- coordtrans
        GetMaxViewportDims -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAX_VIEWPORT_DIMS
        -- Evaluators
        GetMap2GridSegments -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAP2_GRID_SEGMENTS
        -- Polygons
        GetPolygonMode -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POLYGON_MODE

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

data PName2F
    -- coordtrans
    = GetDepthRange -- ^ clamp
    -- Evaluators
    | GetMap1GridDomain -- ^ float2?
    -- Point
    | GetAliasedPointSizeRange  -- ^ float
    | GetSmoothPointSizeRange   -- ^ float
    -- LineSegments
    | GetAliasedLineWidthRange  -- ^ float
    | GetSmoothLineWidthRange   -- ^ float
    -- PerFragment
    | GetDepthBounds            -- ^ clampd
    -- Tessellation
    | GetPatchDefaultInnerLevel -- ^ float

instance GetPName2F PName2F where

instance GetPName PName2F where
    marshalGetPName :: PName2F -> Maybe GLenum
marshalGetPName pn :: PName2F
pn = case PName2F
pn of
        -- coord trans
        GetDepthRange -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_RANGE
        -- Evaluators
        GetMap1GridDomain -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAP1_GRID_DOMAIN
        -- Point
        GetAliasedPointSizeRange -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALIASED_POINT_SIZE_RANGE
        GetSmoothPointSizeRange -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_SIZE_RANGE
        -- LineSegments
        GetAliasedLineWidthRange -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ALIASED_LINE_WIDTH_RANGE
        GetSmoothLineWidthRange -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SMOOTH_LINE_WIDTH_RANGE
        -- PerFragment
        GetDepthBounds -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_DEPTH_BOUNDS_EXT
        -- Tessellation
        GetPatchDefaultInnerLevel -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PATCH_DEFAULT_INNER_LEVEL

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

data PName3F
    = GetCurrentNormal -- ^ Float3
    -- Point
    | GetPointDistanceAttenuation -- ^ float

instance GetPName3F PName3F where

instance GetPName PName3F where
    marshalGetPName :: PName3F -> Maybe GLenum
marshalGetPName pn :: PName3F
pn = case PName3F
pn of
        GetCurrentNormal -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_NORMAL
        -- Point
        GetPointDistanceAttenuation -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_POINT_DISTANCE_ATTENUATION

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

data PName4I
    -- coordtrans
    = GetViewport               -- ^ int
    -- Framebuffer
    | GetRGBASignedComponents   -- ^ int
    -- PerFragment
    | GetScissorBox             -- ^ int


instance GetPName4I PName4I where

instance GetPName PName4I where
    marshalGetPName :: PName4I -> Maybe GLenum
marshalGetPName pn :: PName4I
pn = case PName4I
pn of
        -- coordtrans
        GetViewport -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_VIEWPORT
        -- Framebuffer
        GetRGBASignedComponents -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RGBA_SIGNED_COMPONENTS_EXT
        -- PerFragement
        GetScissorBox -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SCISSOR_BOX


-- | Both indexed and unindexed
data PName4ISemiIndexed
    = GetColorWritemask         -- ^ bool

instance GetPName4I  PName4ISemiIndexed where

instance GetIPName4I PName4ISemiIndexed where

instance GetPName PName4ISemiIndexed where
    marshalGetPName :: PName4ISemiIndexed -> Maybe GLenum
marshalGetPName pn :: PName4ISemiIndexed
pn = case PName4ISemiIndexed
pn of
        GetColorWritemask -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_WRITEMASK

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

data PName4F
    = GetCurrentColor -- ^ ?
    | GetCurrentTextureCoords   -- ^ Float
    | GetCurrentSecondaryColor  -- ^ Float
    -- Colors
    | GetLightModelAmbient  -- ^ float
    -- Evaluators
    | GetMap2GridDomain     -- ^ float?
    -- Fog
    | GetFogColor           -- ^ clampf
    -- Framebuffer
    | GetColorClearValue    -- ^ clampf
    | GetAccumClearValue    -- ^ float
    -- RasterPos
    | GetCurrentRasterColor             -- ^ float
    | GetCurrentRasterSecondaryColor    -- ^ float
    | GetCurrentRasterTextureCoords     -- ^ float
    | GetCurrentRasterPosition          -- ^ float
    -- PerFragment
    | GetBlendColor                     -- ^ clampf
    -- Tessellation
    | GetPatchDefaultOuterLevel         -- ^ float

instance GetPName4F PName4F where

instance GetPName PName4F where
    marshalGetPName :: PName4F -> Maybe GLenum
marshalGetPName pn :: PName4F
pn = case PName4F
pn of
        GetCurrentColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_COLOR
        GetCurrentTextureCoords -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_TEXTURE_COORDS
        GetCurrentSecondaryColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_SECONDARY_COLOR
        -- Colors
        GetLightModelAmbient -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LIGHT_MODEL_AMBIENT
        -- Evaluators
        GetMap2GridDomain -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MAP2_GRID_DOMAIN
        -- Fog
        GetFogColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FOG_COLOR
        -- Framebuffer
        GetColorClearValue -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_CLEAR_VALUE
        GetAccumClearValue -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_ACCUM_CLEAR_VALUE
        -- RasterPos
        GetCurrentRasterColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_COLOR
        GetCurrentRasterSecondaryColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_SECONDARY_COLOR
        GetCurrentRasterTextureCoords -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_TEXTURE_COORDS
        GetCurrentRasterPosition -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_CURRENT_RASTER_POSITION
        -- PerFragment
        GetBlendColor -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BLEND_COLOR
        -- Tessellation
        GetPatchDefaultOuterLevel -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PATCH_DEFAULT_OUTER_LEVEL

-- 0x3000 through 0x3FFF are reserved for clip planes
clipPlaneIndexToEnum :: GLsizei -> Maybe GLenum
clipPlaneIndexToEnum :: GLint -> Maybe GLenum
clipPlaneIndexToEnum i :: GLint
i
   | 0 GLint -> GLint -> Bool
forall a. Ord a => a -> a -> Bool
<= GLint
i Bool -> Bool -> Bool
&& GLint
i GLint -> GLint -> Bool
forall a. Ord a => a -> a -> Bool
<= GLint
maxClipPlaneIndex = GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just (GLenum
GL_CLIP_DISTANCE0 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
+ GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLint
i)
   | Bool
otherwise = Maybe GLenum
forall a. Maybe a
Nothing

maxClipPlaneIndex :: GLsizei
maxClipPlaneIndex :: GLint
maxClipPlaneIndex = 0xFFF

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

data PNameNI
    = GetCompressedTextureFormats
    | GetShaderBinaryFormats
    | GetProgramBinaryFormats

instance GetPNameNI PNameNI where

instance GetPName   PNameNI where
   marshalGetPName :: PNameNI -> Maybe GLenum
marshalGetPName pn :: PNameNI
pn = case PNameNI
pn of
      GetCompressedTextureFormats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COMPRESSED_TEXTURE_FORMATS
      GetShaderBinaryFormats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_SHADER_BINARY_FORMATS
      GetProgramBinaryFormats -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PROGRAM_BINARY_FORMATS

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

data PNameMatrix
    -- coordtrans
    = GetModelviewMatrix
    | GetProjectionMatrix
    | GetTextureMatrix
    | GetColorMatrix
    | GetMatrixPalette

instance GetPNameMatrix PNameMatrix where

instance GetPName PNameMatrix where
    marshalGetPName :: PNameMatrix -> Maybe GLenum
marshalGetPName pn :: PNameMatrix
pn = case PNameMatrix
pn of
        -- coordtrans
        GetModelviewMatrix -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MODELVIEW_MATRIX
        GetProjectionMatrix -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_PROJECTION_MATRIX
        GetTextureMatrix -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_MATRIX
        GetColorMatrix -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_COLOR_MATRIX
        GetMatrixPalette -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_MATRIX_PALETTE_ARB

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

data GetPointervPName =
   -- core profile
     DebugCallbackFunction
   | DebugCallbackUserParam
   -- compatibility profile
   | SelectionBufferPointer
   | FeedbackBufferPointer
   | VertexArrayPointer
   | NormalArrayPointer
   | ColorArrayPointer
   | SecondaryColorArrayPointer
   | IndexArrayPointer
   | TextureCoordArrayPointer
   | FogCoordArrayPointer
   | EdgeFlagArrayPointer
   -- GL_ARB_vertex_blend
   | WeightArrayPointer
   -- GL_ARB_matrix_palette
   | MatrixIndexArrayPointer

marshalGetPointervPName :: GetPointervPName -> GLenum
marshalGetPointervPName :: GetPointervPName -> GLenum
marshalGetPointervPName x :: GetPointervPName
x = case GetPointervPName
x of
   DebugCallbackFunction -> GLenum
GL_DEBUG_CALLBACK_FUNCTION
   DebugCallbackUserParam -> GLenum
GL_DEBUG_CALLBACK_USER_PARAM
   SelectionBufferPointer -> GLenum
GL_SELECTION_BUFFER_POINTER
   FeedbackBufferPointer -> GLenum
GL_FEEDBACK_BUFFER_POINTER
   VertexArrayPointer -> GLenum
GL_VERTEX_ARRAY_POINTER
   NormalArrayPointer -> GLenum
GL_NORMAL_ARRAY_POINTER
   ColorArrayPointer -> GLenum
GL_COLOR_ARRAY_POINTER
   SecondaryColorArrayPointer -> GLenum
GL_SECONDARY_COLOR_ARRAY_POINTER
   IndexArrayPointer -> GLenum
GL_INDEX_ARRAY_POINTER
   TextureCoordArrayPointer -> GLenum
GL_TEXTURE_COORD_ARRAY_POINTER
   FogCoordArrayPointer -> GLenum
GL_FOG_COORD_ARRAY_POINTER
   EdgeFlagArrayPointer -> GLenum
GL_EDGE_FLAG_ARRAY_POINTER
   WeightArrayPointer -> GLenum
GL_WEIGHT_ARRAY_POINTER_ARB
   MatrixIndexArrayPointer -> GLenum
GL_MATRIX_INDEX_ARRAY_POINTER_ARB

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

getPointer :: GetPointervPName -> IO (Ptr a)
getPointer :: GetPointervPName -> IO (Ptr a)
getPointer n :: GetPointervPName
n = Ptr a -> (Ptr (Ptr a) -> IO (Ptr a)) -> IO (Ptr a)
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Ptr a
forall a. Ptr a
nullPtr ((Ptr (Ptr a) -> IO (Ptr a)) -> IO (Ptr a))
-> (Ptr (Ptr a) -> IO (Ptr a)) -> IO (Ptr a)
forall a b. (a -> b) -> a -> b
$ \buf :: Ptr (Ptr a)
buf -> do
   GLenum -> Ptr (Ptr a) -> IO ()
forall (m :: * -> *) a. MonadIO m => GLenum -> Ptr (Ptr a) -> m ()
glGetPointerv (GetPointervPName -> GLenum
marshalGetPointervPName GetPointervPName
n) Ptr (Ptr a)
buf
   Ptr (Ptr a) -> IO (Ptr a)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Ptr a)
buf