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, gl_ALPHA_INTEGER )
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
| DepthStencil
| Red
| Green
| Blue
| Alpha
| RG
| RGB
| RGBA
| Luminance
| LuminanceAlpha
| RedInteger
| GreenInteger
| BlueInteger
| AlphaInteger
| RGInteger
| RGBInteger
| RGBAInteger
| BGRInteger
| BGRAInteger
| ABGR
| BGR
| BGRA
| CMYK
| CMYKA
| FourTwoTwo
| FourTwoTwoRev
| FourTwoTwoAverage
| FourTwoTwoRevAverage
| YCBCR422
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
RG -> gl_RG
RGB -> gl_RGB
RGBA -> gl_RGBA
Luminance -> gl_LUMINANCE
LuminanceAlpha -> gl_LUMINANCE_ALPHA
RedInteger -> gl_RED_INTEGER
GreenInteger -> gl_GREEN_INTEGER
BlueInteger -> gl_BLUE_INTEGER
AlphaInteger -> gl_ALPHA_INTEGER
RGInteger -> gl_RG_INTEGER
RGBInteger -> gl_RGB_INTEGER
RGBAInteger -> gl_RGBA_INTEGER
BGRInteger -> gl_BGR_INTEGER
BGRAInteger -> gl_BGRA_INTEGER
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_RG = RG
| x == gl_RGB = RGB
| x == gl_RGBA = RGBA
| x == gl_LUMINANCE = Luminance
| x == gl_LUMINANCE_ALPHA = LuminanceAlpha
| x == gl_RED_INTEGER = RedInteger
| x == gl_GREEN_INTEGER = GreenInteger
| x == gl_BLUE_INTEGER = BlueInteger
| x == gl_ALPHA_INTEGER = AlphaInteger
| x == gl_RG_INTEGER = RGInteger
| x == gl_RGB_INTEGER = RGBInteger
| x == gl_RGBA_INTEGER = RGBAInteger
| x == gl_BGR_INTEGER = BGRInteger
| x == gl_BGRA_INTEGER = BGRAInteger
| 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)