    -- #hide
    --------------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.Rendering.OpenGL.GL.PixelFormat
    -- Copyright   :  (c) Sven Panne 2002-2006
    -- 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 (un-)marshaling PixelFormat.
    --
    --------------------------------------------------------------------------------

    module Graphics.Rendering.OpenGL.GL.PixelFormat (
       PixelFormat(..), marshalPixelFormat, unmarshalPixelFormat
    ) where

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

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

    data PixelFormat =
         ColorIndex
       | StencilIndex
       | DepthComponent
       | Red
       | Green
       | Blue
       | Alpha
       | RGB
       | RGBA
       | Luminance
       | LuminanceAlpha
       | ABGR
       | BGR
       | BGRA
       | CMYK
       | CMYKA
       | FourTwoTwo
       | FourTwoTwoRev
       | FourTwoTwoAverage
       | FourTwoTwoRevAverage
       | YCBCR422
       | DepthStencil
       deriving ( Eq, Ord, Show )

    marshalPixelFormat :: PixelFormat -> GLenum
    marshalPixelFormat x = case x of
       ColorIndex -> 0x1900
       StencilIndex -> 0x1901
       DepthComponent -> 0x1902
       Red -> 0x1903
       Green -> 0x1904
       Blue -> 0x1905
       Alpha -> 0x1906
       RGB -> 0x1907
       RGBA -> 0x1908
       Luminance -> 0x1909
       LuminanceAlpha -> 0x190a
       ABGR -> 0x8000
       BGR -> 0x80E0
       BGRA -> 0x80E1
       CMYK -> 0x800C
       CMYKA -> 0x800D
       FourTwoTwo -> 0x80CC
       FourTwoTwoRev -> 0x80CD
       FourTwoTwoAverage -> 0x80CE
       FourTwoTwoRevAverage -> 0x80CF
       YCBCR422 -> 0x85B9
       DepthStencil -> 0x84f9

    unmarshalPixelFormat :: GLenum -> PixelFormat
    unmarshalPixelFormat x
       | x == 0x1900 = ColorIndex
       | x == 0x1901 = StencilIndex
       | x == 0x1902 = DepthComponent
       | x == 0x1903 = Red
       | x == 0x1904 = Green
       | x == 0x1905 = Blue
       | x == 0x1906 = Alpha
       | x == 0x1907 = RGB
       | x == 0x1908 = RGBA
       | x == 0x1909 = Luminance
       | x == 0x190a = LuminanceAlpha
       | x == 0x8000 = ABGR
       | x == 0x80E0 = BGR
       | x == 0x80E1 = BGRA
       | x == 0x800C = CMYK
       | x == 0x800D = CMYKA
       | x == 0x80CC = FourTwoTwo
       | x == 0x80CD = FourTwoTwoRev
       | x == 0x80CE = FourTwoTwoAverage
       | x == 0x80CF = FourTwoTwoRevAverage
       | x == 0x85B9 = YCBCR422
       | x == 0x84f9 = DepthStencil
       | otherwise = error ("unmarshalPixelFormat: illegal value " ++ show x)