packages feed

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]