    -- #hide
    --------------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget
    -- Copyright   :  (c) Sven Panne 2002-2009
    -- License     :  BSD-style (see the file libraries/OpenGL/LICENSE)
    --
    -- Maintainer  :  sven.panne@aedion.de
    -- Stability   :  stable
    -- Portability :  portable
    --
    -- This is a purely internal module for marshaling texture targets.
    --
    --------------------------------------------------------------------------------

    module Graphics.Rendering.OpenGL.GL.Texturing.TextureTarget (
       TextureTarget(..), marshalTextureTarget, marshalProxyTextureTarget,
       CubeMapTarget(..), marshalCubeMapTarget
    ) where

    import Graphics.Rendering.OpenGL.GL.BasicTypes ( GLenum )
    import Graphics.Rendering.OpenGL.GL.PixelRectangles ( Proxy(..) )

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

    data TextureTarget =
         Texture1D
       | Texture2D
       | Texture3D
       | TextureCubeMap
       | TextureRectangle
       deriving ( Eq, Ord, Show )

    marshalTextureTarget :: TextureTarget -> GLenum
    marshalTextureTarget x = case x of
       Texture1D -> 0xde0
       Texture2D -> 0xde1
       Texture3D -> 0x806f
       TextureCubeMap -> 0x8513
       TextureRectangle -> 0x84f5

    marshalProxyTextureTarget :: Proxy -> TextureTarget -> GLenum
    marshalProxyTextureTarget NoProxy x = marshalTextureTarget x
    marshalProxyTextureTarget Proxy   x = case x of
       Texture1D -> 0x8063
       Texture2D -> 0x8064
       Texture3D -> 0x8070
       TextureCubeMap -> 0x851b
       TextureRectangle -> 0x84f7

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

    data CubeMapTarget =
         TextureCubeMapPositiveX
       | TextureCubeMapNegativeX
       | TextureCubeMapPositiveY
       | TextureCubeMapNegativeY
       | TextureCubeMapPositiveZ
       | TextureCubeMapNegativeZ
       deriving ( Eq, Ord, Show )

    marshalCubeMapTarget :: CubeMapTarget -> GLenum
    marshalCubeMapTarget x = case x of
       TextureCubeMapPositiveX -> 0x8515
       TextureCubeMapNegativeX -> 0x8516
       TextureCubeMapPositiveY -> 0x8517
       TextureCubeMapNegativeY -> 0x8518
       TextureCubeMapPositiveZ -> 0x8519
       TextureCubeMapNegativeZ -> 0x851a