module Graphics.OpenGLES.PixelFormat where
import Data.Proxy
import Data.Int
import Data.Word
import Graphics.OpenGLES.Internal
import Graphics.OpenGLES.Base
import Linear
data R8snorm
data Rg8snorm
data Rgb8snorm
data Rgba8snorm
data Srgb8
data R16f
data Rg16f
data Rgb16f
data Rgba16f
data R32f
data Rg32f
data Rgb32f
data Rgba32f
data B10fG11fR11f
data E5bgr9
data Rgb8i
data Rgb8ui
data Rgb16i
data Rgb16ui
data Rgb32i
data Rgb32ui
data R8
data Rg8
data Rgb8
data Rgb565
data Rgba4
data Rgb5a1
data Rgba8
data A2bgr10
data A2bgr10ui
data Srgb8a8
data R8i
data R8ui
data R16i
data R16ui
data R32i
data R32ui
data Rg8i
data Rg8ui
data Rg16i
data Rg16ui
data Rg32i
data Rg32ui
data Rgba8i
data Rgba8ui
data Rgba16i
data Rgba16ui
data Rgba32i
data Rgba32ui
data Depth16
data Depth24
data Depth32f
data Depth24Stencil8
data Depth32fStencil8
data Stencil8
data Luminance8Alpha8
data Luminance8
data Alpha8
class InternalFormat a b | b -> a where
ifmt :: p (a, b) -> (GLenum, GLenum, GLenum)
class ExternalFormat a b where
efmt :: p (a, b) -> (GLenum, GLenum, GLenum)
class InternalFormat a b => ES2Format a b where
es2fmt :: p (a, b) -> (GLenum, GLenum, GLenum)
es2fmt x = case ifmt x of
(format, typ, _) -> (format, typ, format)
#define PixelFormat(_dim, _type, _tag, _format, _internal_fmt) \
instance InternalFormat (_dim _type) _tag where \
; \
ifmt _ = (_format, glType ([] :: [_type]), _internal_fmt) \
PixelFormat(, Int8, R8snorm, r, 0x8F94)
PixelFormat(V2, Int8, Rg8snorm, rg, 0x8F95)
PixelFormat(V3, Int8, Rgb8snorm, rgb, 0x8F96)
PixelFormat(V4, Int8, Rgba8snorm, rgba, 0x8F97)
PixelFormat(V3, Word8, Srgb8, rgb, 0x8C41)
PixelFormat(, HalfFloat, R16f, r, 0x822D)
PixelFormat(V2, HalfFloat, Rg16f, rg, 0x822F)
PixelFormat(V3, HalfFloat, Rgb16f, rgb, 0x881B)
PixelFormat(V4, HalfFloat, Rgba16f, rgba, 0x881A)
PixelFormat(, Float, R32f, r, 0x822E)
PixelFormat(V2, Float, Rg32f, rg, 0x8230)
PixelFormat(V3, Float, Rgb32f, rgb, 0x8815)
PixelFormat(V4, Float, Rgba32f, rgba, 0x8814)
PixelFormat(, Word10f11f11f, B10fG11fR11f, rgb, 0x8C3A)
PixelFormat(, Word5999, E5bgr9, rgb, 0x8C3D)
PixelFormat(V3, Int8, Rgb8i, rgb_integer, 0x8D8F)
PixelFormat(V3, Word8, Rgb8ui, rgb_integer, 0x8D7D)
PixelFormat(V3, Int16, Rgb16i, rgb_integer, 0x8D89)
PixelFormat(V3, Word16, Rgb16ui, rgb_integer, 0x8D77)
PixelFormat(V3, Int32, Rgb32i, rgb_integer, 0x8D83)
PixelFormat(V3, Word32, Rgb32ui, rgb_integer, 0x8D71)
PixelFormat(, Word8, R8, r, 0x8229)
PixelFormat(V2, Word8, Rg8, rg, 0x822B)
PixelFormat(V3, Word8, Rgb8, rgb, 0x8051)
PixelFormat(, Word565, Rgb565, rgb, 0x8D62)
PixelFormat(, Word4444, Rgba4, rgba, 0x8056)
PixelFormat(, Word5551, Rgb5a1, rgba, 0x8057)
PixelFormat(V4, Word8, Rgba8, rgba, 0x8058)
PixelFormat(, Word2_10x3, A2bgr10, rgba, 0x8059)
PixelFormat(, Word2_10x3, A2bgr10ui, rgba_integer, 0x906F)
PixelFormat(V4, Word8, Srgb8a8, rgba, 0x8C43)
PixelFormat(, Int8, R8i, r_integer, 0x8231)
PixelFormat(, Word8, R8ui, r_integer, 0x8232)
PixelFormat(, Int16, R16i, r_integer, 0x8233)
PixelFormat(, Word16, R16ui, r_integer, 0x8234)
PixelFormat(, Int32, R32i, r_integer, 0x8235)
PixelFormat(, Word32, R32ui, r_integer, 0x8236)
PixelFormat(V2, Int8, Rg8i, rg_integer, 0x8237)
PixelFormat(V2, Word8, Rg8ui, rg_integer, 0x8238)
PixelFormat(V2, Int16, Rg16i, rg_integer, 0x8239)
PixelFormat(V2, Word16, Rg16ui, rg_integer, 0x823A)
PixelFormat(V2, Int32, Rg32i, rg_integer, 0x823B)
PixelFormat(V2, Word32, Rg32ui, rg_integer, 0x823C)
PixelFormat(V4, Int8, Rgba8i, rgba_integer, 0x8D8E)
PixelFormat(V4, Word8, Rgba8ui, rgba_integer, 0x8D7C)
PixelFormat(V4, Int16, Rgba16i, rgba_integer, 0x8D88)
PixelFormat(V4, Word16, Rgba16ui, rgba_integer, 0x8D76)
PixelFormat(V4, Int32, Rgba32i, rgba_integer, 0x8D82)
PixelFormat(V4, Word32, Rgba32ui, rgba_integer, 0x8D70)
PixelFormat(, Word16, Depth16, depth_component, 0x81A5)
PixelFormat(, Word32, Depth24, depth_component, 0x81A6)
PixelFormat(, Float, Depth32f, depth_component, 0x8CAC)
PixelFormat(, Word24_8, Depth24Stencil8, depth_stencil, 0x88F0)
PixelFormat(, FloatWord24_8, Depth32fStencil8, depth_stencil, 0x8CAD)
PixelFormat(V2, Word8, Luminance8Alpha8, 0x190A, 0x190A)
PixelFormat(, Word8, Luminance8, 0x1909, 0x1909)
PixelFormat(, Word8, Alpha8, 0x1906, 0x1906)
instance InternalFormat a b => ExternalFormat a b where
efmt = ifmt
#define PixelFormat2(_dim, _type, _tag, _format, _internal_fmt) \
instance ExternalFormat (_dim _type) _tag where \
; \
efmt _ = (_format, glType (Proxy :: Proxy _type), _internal_fmt) \
PixelFormat2(V4, Word8, Rgb5a1, rgba, 0x8057)
PixelFormat2(V4, Word8, Rgba4, rgba, 0x8056)
PixelFormat2(, Word2_10x3, Rgb5a1, rgba, 0x8057)
PixelFormat2(V4, Float, Rgba16f, rgba, 0x881A)
PixelFormat2(V3, Word8, Rgb565, rgb, 0x8D62)
PixelFormat2(V3, HalfFloat, B10fG11fR11f, rgb, 0x8C3A)
PixelFormat2(V3, HalfFloat, E5bgr9, rgb, 0x8C3D)
PixelFormat2(V3, Float, B10fG11fR11f, rgb, 0x8C3A)
PixelFormat2(V3, Float, E5bgr9, rgb, 0x8C3D)
PixelFormat2(V2, Float, Rg16f, rg, 0x822F)
PixelFormat2(, Float, R16f, r, 0x822D)
PixelFormat2(, Word32, Depth16, depth_component, 0x81A5)
instance ES2Format (V4 Word8) Rgba8
instance ES2Format Word4444 Rgba4
instance ES2Format Word5551 Rgb5a1
instance ES2Format (V3 Word8) Rgb8
instance ES2Format Word565 Rgb565
instance ES2Format (V2 Word8) Luminance8Alpha8
instance ES2Format Word8 Luminance8
instance ES2Format Word8 Alpha8
class ColorRenderable a where
instance ColorRenderable R8
instance ColorRenderable Rg8
instance ColorRenderable Rgb8
instance ColorRenderable Rgb565
instance ColorRenderable Rgba4
instance ColorRenderable Rgb5a1
instance ColorRenderable Rgba8
instance ColorRenderable A2bgr10
instance ColorRenderable A2bgr10ui
instance ColorRenderable Srgb8a8
instance ColorRenderable R8i
instance ColorRenderable R8ui
instance ColorRenderable R16i
instance ColorRenderable R16ui
instance ColorRenderable R32i
instance ColorRenderable R32ui
instance ColorRenderable Rg8i
instance ColorRenderable Rg8ui
instance ColorRenderable Rg16i
instance ColorRenderable Rg16ui
instance ColorRenderable Rg32i
instance ColorRenderable Rg32ui
instance ColorRenderable Rgba8i
instance ColorRenderable Rgba8ui
instance ColorRenderable Rgba16i
instance ColorRenderable Rgba16ui
instance ColorRenderable Rgba32i
instance ColorRenderable Rgba32ui
class DepthRenderable a where
instance DepthRenderable Depth16
instance DepthRenderable Depth24
instance DepthRenderable Depth32f
instance DepthRenderable Depth24Stencil8
instance DepthRenderable Depth32fStencil8
class StencilRenderable a where
instance StencilRenderable Depth24Stencil8
instance StencilRenderable Depth32fStencil8
instance StencilRenderable Stencil8