dx9d3d-0.1: DirectX9/D3D/Format.hs
module DirectX9.D3D.Format
where
import Data.Char ( ord )
import DirectX9.Types
type D3DFORMAT = DWORD
d3DFMT_UNKNOWN :: D3DFORMAT
d3DFMT_UNKNOWN = 0
makeFourCC :: String -> DWORD
makeFourCC s =
(fromIntegral $ ord $ s !! 0)
+ (fromIntegral $ ord $ s !! 1) * 256
+ (fromIntegral $ ord $ s !! 2) * 256*256
+ (fromIntegral $ ord $ s !! 3) * 256*256*256
-- Buffer formats
d3DFMT_D16_LOCKABLE,d3DFMT_D32,d3DFMT_D15S1,d3DFMT_D24S8,d3DFMT_D24X8 :: D3DFORMAT
d3DFMT_D24X4S4,d3DFMT_D32F_LOCKABLE,d3DFMT_D24FS8,d3DFMT_D16 :: D3DFORMAT
d3DFMT_VERTEXDATA,d3DFMT_INDEX16,d3DFMT_INDEX32 :: D3DFORMAT
d3DFMT_D16_LOCKABLE = 70
d3DFMT_D32 = 71
d3DFMT_D15S1 = 73
d3DFMT_D24S8 = 75
d3DFMT_D24X8 = 77
d3DFMT_D24X4S4 = 79
d3DFMT_D32F_LOCKABLE = 82
d3DFMT_D24FS8 = 83
d3DFMT_D16 = 80
d3DFMT_VERTEXDATA = 100
d3DFMT_INDEX16 = 101
d3DFMT_INDEX32 = 102
d3DFMT_DXT1,d3DFMT_DXT2,d3DFMT_DXT3,d3DFMT_DXT4,d3DFMT_DXT5 :: D3DFORMAT
(d3DFMT_DXT1,d3DFMT_DXT2,d3DFMT_DXT3,d3DFMT_DXT4,d3DFMT_DXT5)
= (makeFourCC "DXT1", makeFourCC "DXT2", makeFourCC "DXT3",
makeFourCC "DXT4", makeFourCC "DXT5" )
d3DFMT_R16F, d3DFMT_G16R16F, d3DFMT_A16B16G16R16F :: D3DFORMAT
d3DFMT_R16F = 111
d3DFMT_G16R16F = 112
d3DFMT_A16B16G16R16F = 113
d3DFMT_MULTI2_ARGB8,d3DFMT_G8R8_G8B8,d3DFMT_R8G8_B8G8,d3DFMT_UYVY,d3DFMT_YUY2 :: D3DFORMAT
(d3DFMT_MULTI2_ARGB8,d3DFMT_G8R8_G8B8,d3DFMT_R8G8_B8G8,d3DFMT_UYVY,d3DFMT_YUY2)
= (makeFourCC "MET1", makeFourCC "GRGB", makeFourCC "RGBG", makeFourCC "UYVY", makeFourCC "YUY2")
d3DFMT_R32F,d3DFMT_G32R32F,d3DFMT_A32B32G32R32F :: D3DFORMAT
d3DFMT_R32F = 114
d3DFMT_G32R32F = 115
d3DFMT_A32B32G32R32F = 116
d3DFMT_L6V5U5,d3DFMT_X8L8V8U8,d3DFMT_A2W10V10U10 :: D3DFORMAT
d3DFMT_L6V5U5 = 61
d3DFMT_X8L8V8U8 = 62
d3DFMT_A2W10V10U10 = 67
d3DFMT_V8U8,d3DFMT_Q8W8V8U8,d3DFMT_V16U16,d3DFMT_Q16W16V16U16,d3DFMT_CxV8U8 :: D3DFORMAT
d3DFMT_V8U8 = 60
d3DFMT_Q8W8V8U8 = 63
d3DFMT_V16U16 = 64
d3DFMT_Q16W16V16U16 = 110
d3DFMT_CxV8U8 = 117
d3DFMT_R8G8B8,d3DFMT_A8R8G8B8,d3DFMT_X8R8G8B8,d3DFMT_R5G6B5,d3DFMT_X1R5G5B5 :: D3DFORMAT
d3DFMT_A1R5G5B5,d3DFMT_A4R4G4B4,d3DFMT_R3G3B2,d3DFMT_A8,d3DFMT_A8R3G3B2 :: D3DFORMAT
d3DFMT_X4R4G4B4,d3DFMT_A2B10G10R10,d3DFMT_A8B8G8R8,d3DFMT_X8B8G8R8,d3DFMT_G16R16 :: D3DFORMAT
d3DFMT_A2R10G10B10,d3DFMT_A16B16G16R16,d3DFMT_A8P8,d3DFMT_P8,d3DFMT_L8 :: D3DFORMAT
d3DFMT_L16,d3DFMT_A8L8,d3DFMT_A4L4 :: D3DFORMAT
d3DFMT_R8G8B8 = 20
d3DFMT_A8R8G8B8 = 21
d3DFMT_X8R8G8B8 = 22
d3DFMT_R5G6B5 = 23
d3DFMT_X1R5G5B5 = 24
d3DFMT_A1R5G5B5 = 25
d3DFMT_A4R4G4B4 = 26
d3DFMT_R3G3B2 = 27
d3DFMT_A8 = 28
d3DFMT_A8R3G3B2 = 29
d3DFMT_X4R4G4B4 = 30
d3DFMT_A2B10G10R10 = 31
d3DFMT_A8B8G8R8 = 32
d3DFMT_X8B8G8R8 = 33
d3DFMT_G16R16 = 34
d3DFMT_A2R10G10B10 = 35
d3DFMT_A16B16G16R16 = 36
d3DFMT_A8P8 = 40
d3DFMT_P8 = 41
d3DFMT_L8 = 50
d3DFMT_L16 = 81
d3DFMT_A8L8 = 51
d3DFMT_A4L4 = 52
modeBits :: D3DFORMAT -> Int
modeBits f
| f==d3DFMT_A1R5G5B5 = 16
| f==d3DFMT_A2R10G10B10 = 32
| f==d3DFMT_A8R8G8B8 = 32
| f==d3DFMT_R5G6B5 = 16
| f==d3DFMT_X1R5G5B5 = 16
| f==d3DFMT_X8R8G8B8 = 32
| otherwise = 0
validConversionTargets :: [D3DFORMAT]
validConversionTargets =
[ d3DFMT_X1R5G5B5, d3DFMT_A1R5G5B5, d3DFMT_R5G6B5, d3DFMT_R8G8B8
, d3DFMT_X8R8G8B8, d3DFMT_A8R8G8B8, d3DFMT_A2R10G10B10
, d3DFMT_A16B16G16R16, d3DFMT_A2B10G10R10
, d3DFMT_A8B8G8R8, d3DFMT_X8B8G8R8, d3DFMT_A16B16G16R16F
, d3DFMT_A32B32G32R32F]
validSurfaceFormats :: [D3DFORMAT]
validSurfaceFormats =
[d3DFMT_A1R5G5B5, d3DFMT_A2R10G10B10, d3DFMT_A8R8G8B8
, d3DFMT_R5G6B5, d3DFMT_X1R5G5B5, d3DFMT_X8R8G8B8]
gdiCompatibleFormats :: [D3DFORMAT]
gdiCompatibleFormats = [d3DFMT_X1R5G5B5, d3DFMT_R5G6B5, d3DFMT_X8R8G8B8]