module SFML.Graphics.BlendMode
(
BlendFactor(..)
, BlendEquation(..)
, BlendMode(..)
, blendAlpha
, blendAdd
, blendMultiply
, blendNone
)
where
import Control.Applicative ((<$>), (<*>))
import Foreign.C.Types (CInt)
import Foreign.Ptr
import Foreign.Storable
data BlendFactor
= BlendFactorZero
| BlendFactorOne
| BlendFactorSrcColor
| BlendFactorOneMinusSrcColor
| BlendFactorDstColor
| BlendFactorOneMinusDstColor
| BlendFactorSrcAlpha
| BlendFactorOneMinusSrcAlpha
| BlendFactorDstAlpha
| BlendFactorOneMinusDstAlpha
deriving (Eq, Enum, Bounded, Show)
data BlendEquation
= BlendEquationAdd
| BlendEquationSubtract
deriving (Eq, Enum, Bounded, Show)
data BlendMode
= BlendMode
{ colorSrcFactor :: BlendFactor
, colorDstFactor :: BlendFactor
, colorEquation :: BlendEquation
, alphaSrcFactor :: BlendFactor
, alphaDstFactor :: BlendFactor
, alphaEquation :: BlendEquation
} deriving (Eq, Show)
instance Storable BlendFactor where
sizeOf _ = (4)
alignment _ = 4
peek ptr = fmap (toEnum . fromIntegral) $ peek (castPtr ptr :: Ptr CInt)
poke ptr bm = poke (castPtr ptr :: Ptr CInt) (fromIntegral . fromEnum $ bm)
instance Storable BlendEquation where
sizeOf _ = (4)
alignment _ = 4
peek ptr = fmap (toEnum . fromIntegral) $ peek (castPtr ptr :: Ptr CInt)
poke ptr bm = poke (castPtr ptr :: Ptr CInt) (fromIntegral . fromEnum $ bm)
instance Storable BlendMode where
sizeOf _ = (24)
alignment _ = 4
peek ptr = BlendMode <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
<*> (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
poke ptr bm = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr (colorSrcFactor bm)
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr (colorDstFactor bm)
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr (colorEquation bm)
(\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr (alphaSrcFactor bm)
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr (alphaDstFactor bm)
(\hsc_ptr -> pokeByteOff hsc_ptr 20) ptr (alphaEquation bm)
blendAlpha = BlendMode BlendFactorSrcAlpha
BlendFactorOneMinusSrcAlpha
BlendEquationAdd
BlendFactorOne
BlendFactorOneMinusSrcAlpha
BlendEquationAdd
blendAdd = BlendMode BlendFactorSrcAlpha
BlendFactorOne
BlendEquationAdd
BlendFactorOne
BlendFactorOne
BlendEquationAdd
blendMultiply = BlendMode BlendFactorDstColor
BlendFactorZero
BlendEquationAdd
BlendFactorDstColor
BlendFactorZero
BlendEquationAdd
blendNone = BlendMode BlendFactorOne
BlendFactorZero
BlendEquationAdd
BlendFactorOne
BlendFactorZero
BlendEquationAdd