dx9d3d-0.1: DirectX9/D3D/Raw.hs
{-# LANGUAGE ForeignFunctionInterface #-}
module DirectX9.D3D.Raw
where
import Foreign.Ptr ( Ptr, plusPtr, castPtr )
import Foreign.Storable ( peekByteOff )
import DirectX9.Types
import DirectX9.D3D.Format
type D3DCOLOR = DWORD
data RECT = RECT !LONG !LONG !LONG !LONG
type LPRECT = Ptr RECT
instance Storable RECT where
sizeOf _ = 4*(sizeOf (undefined::LONG))
alignment _ = 4
poke buf (RECT v1 v2 v3 v4) = return buf
>>= pokeHelp v1 >>= pokeHelp v2 >>= pokeHelp v3 >>= pokeHelp v4 >> return ()
peek b = do
p1 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p2 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p3 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p4 <- peekByteOff b 0
return $ RECT p1 p2 p3 p4
data D3DMATRIX = D3DMATRIX {
d3dm11, d3dm12, d3dm13, d3dm14,
d3dm21, d3dm22, d3dm23, d3dm24,
d3dm31, d3dm32, d3dm33, d3dm34,
d3dm41, d3dm42, d3dm43, d3dm44 :: !Float
} deriving (Show,Eq, Ord)
instance Storable D3DMATRIX where
sizeOf _ = 16*(sizeOf (undefined::Float))
alignment _ = alignment (undefined::Float)
poke buf m =
return buf
>>= pokeHelp (d3dm11 m) >>= pokeHelp (d3dm12 m) >>= pokeHelp (d3dm13 m) >>= pokeHelp (d3dm14 m)
>>= pokeHelp (d3dm21 m) >>= pokeHelp (d3dm22 m) >>= pokeHelp (d3dm23 m) >>= pokeHelp (d3dm24 m)
>>= pokeHelp (d3dm31 m) >>= pokeHelp (d3dm32 m) >>= pokeHelp (d3dm33 m) >>= pokeHelp (d3dm34 m)
>>= pokeHelp (d3dm41 m) >>= pokeHelp (d3dm42 m) >>= pokeHelp (d3dm43 m) >>= pokeHelp (d3dm44 m)
>> return ()
peek b = do
p1 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p2 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p3 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p4 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p5 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p6 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p7 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p8 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p9 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p10 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p11 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p12 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p13 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p14 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p15 <- peekByteOff b 0
b <- return $ plusPtr b (sizeOf p1)
p16 <- peekByteOff b 0
return $ D3DMATRIX p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16
d3DCOLOR_COLORVALUE :: Float -> Float -> Float -> Float -> D3DCOLOR
d3DCOLOR_COLORVALUE r g b a = d3DCOLOR_RGBA (f r) (f g) (f b) (f a)
where
f :: Float -> Int
f a = truncate $ a*255
d3DCOLOR_RGBA :: (Num a, Integral a) => a -> a -> a -> a -> D3DCOLOR
d3DCOLOR_RGBA r g b a =
(fromIntegral a)*16777216 +
(fromIntegral r)*65536 +
(fromIntegral g)*256 +
(fromIntegral b)
d3DTS_WORLDMATRIX :: (Integral a) => a-> D3DTRANSFORMSTATETYPE
d3DTS_WORLDMATRIX n = fromIntegral n+256
d3DTS_WORLD :: D3DTRANSFORMSTATETYPE
d3DTS_WORLD = d3DTS_WORLDMATRIX (0::Int)
pokeHelp :: (Storable b) => b -> Ptr a -> IO (Ptr a)
pokeHelp v buf = do
poke (castPtr buf) v
return $ plusPtr buf $ sizeOf v
foreign import stdcall unsafe "fake.h Direct3DCreate9"
c_Direct3DCreate9 :: UINT -> IO (Ptr IDirect3D9)
#include "d3d_h.h"