module Graphics.Rendering.OpenGL.GL.PixelFormat (
PixelFormat(..), marshalPixelFormat, unmarshalPixelFormat
) where
import Graphics.Rendering.OpenGL.Raw.ARB.Compatibility (
gl_COLOR_INDEX, gl_LUMINANCE, gl_LUMINANCE_ALPHA )
import Graphics.Rendering.OpenGL.Raw.Core31
import Graphics.Rendering.OpenGL.Raw.EXT.Abgr ( gl_ABGR )
import Graphics.Rendering.OpenGL.Raw.EXT.Cmyka ( gl_CMYK, gl_CMYKA )
import Graphics.Rendering.OpenGL.Raw.EXT.FourTwoTwoPixels (
gl_422, gl_422_AVERAGE, gl_422_REV, gl_422_REV_AVERAGE )
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 -> gl_COLOR_INDEX
StencilIndex -> gl_STENCIL_INDEX
DepthComponent -> gl_DEPTH_COMPONENT
Red -> gl_RED
Green -> gl_GREEN
Blue -> gl_BLUE
Alpha -> gl_ALPHA
RGB -> gl_RGB
RGBA -> gl_RGBA
Luminance -> gl_LUMINANCE
LuminanceAlpha -> gl_LUMINANCE_ALPHA
ABGR -> gl_ABGR
BGR -> gl_BGR
BGRA -> gl_BGRA
CMYK -> gl_CMYK
CMYKA -> gl_CMYKA
FourTwoTwo -> gl_422
FourTwoTwoRev -> gl_422_REV
FourTwoTwoAverage -> gl_422_AVERAGE
FourTwoTwoRevAverage -> gl_422_REV_AVERAGE
YCBCR422 -> 0x85B9
DepthStencil -> gl_DEPTH_STENCIL
unmarshalPixelFormat :: GLenum -> PixelFormat
unmarshalPixelFormat x
| x == gl_COLOR_INDEX = ColorIndex
| x == gl_STENCIL_INDEX = StencilIndex
| x == gl_DEPTH_COMPONENT = DepthComponent
| x == gl_RED = Red
| x == gl_GREEN = Green
| x == gl_BLUE = Blue
| x == gl_ALPHA = Alpha
| x == gl_RGB = RGB
| x == gl_RGBA = RGBA
| x == gl_LUMINANCE = Luminance
| x == gl_LUMINANCE_ALPHA = LuminanceAlpha
| x == gl_ABGR = ABGR
| x == gl_BGR = BGR
| x == gl_BGRA = BGRA
| x == gl_CMYK = CMYK
| x == gl_CMYKA = CMYKA
| x == gl_422 = FourTwoTwo
| x == gl_422_REV = FourTwoTwoRev
| x == gl_422_AVERAGE = FourTwoTwoAverage
| x == gl_422_REV_AVERAGE = FourTwoTwoRevAverage
| x == 0x85B9 = YCBCR422
| x == gl_DEPTH_STENCIL = DepthStencil
| otherwise = error ("unmarshalPixelFormat: illegal value " ++ show x)