{-# LINE 1 "src/SFML/Graphics/RenderStates.hsc" #-}
{-# LANGUAGE CPP, ForeignFunctionInterface #-}
{-# LINE 2 "src/SFML/Graphics/RenderStates.hsc" #-}
module SFML.Graphics.RenderStates
(
    RenderStates(..)
,   renderStates
)
where


import SFML.Graphics.BlendMode
import SFML.Graphics.Transform
import SFML.Graphics.Types

import Control.Applicative ((<$>), (<*>))
import Foreign.C.Types (CIntPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Storable


{-# LINE 20 "src/SFML/Graphics/RenderStates.hsc" #-}



{-# LINE 23 "src/SFML/Graphics/RenderStates.hsc" #-}


-- | Define the states used for drawing to a RenderTarget.
data RenderStates = RenderStates
    { blendMode :: BlendMode
    , transform :: Transform
    , texture   :: Texture
    , shader    :: Shader
    }


instance Storable RenderStates where
    sizeOf _ = (80)
{-# LINE 36 "src/SFML/Graphics/RenderStates.hsc" #-}
    alignment _ = 8
{-# LINE 37 "src/SFML/Graphics/RenderStates.hsc" #-}

    peek ptr = RenderStates
            <$> (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 40 "src/SFML/Graphics/RenderStates.hsc" #-}
            <*> (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 41 "src/SFML/Graphics/RenderStates.hsc" #-}
            <*> (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr
{-# LINE 42 "src/SFML/Graphics/RenderStates.hsc" #-}
            <*> (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr
{-# LINE 43 "src/SFML/Graphics/RenderStates.hsc" #-}

    poke ptr (RenderStates bm tr tx sh) = do
        (\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr  bm
{-# LINE 46 "src/SFML/Graphics/RenderStates.hsc" #-}
        (\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr tr
{-# LINE 47 "src/SFML/Graphics/RenderStates.hsc" #-}
        (\hsc_ptr -> pokeByteOff hsc_ptr 64) ptr tx
{-# LINE 48 "src/SFML/Graphics/RenderStates.hsc" #-}
        (\hsc_ptr -> pokeByteOff hsc_ptr 72) ptr sh
{-# LINE 49 "src/SFML/Graphics/RenderStates.hsc" #-}

-- | Default render states, defined as
--
-- @
-- renderStates = RenderStates 'blendAlpha' 'idTransform' (Texture 'nullPtr') (Shader 'nullPtr')
-- @
--
-- This constant tries to mimic the C++ RenderStates default constructor to ease
-- the construction of render states. For example, instead of typing
--
-- @
-- states = RenderStates blendAlpha idTransform tex (Shader nullptr)
-- @
--
-- Now we can simply type
--
-- @
-- states = renderStates { texture = tex }
-- @
renderStates = RenderStates blendAlpha idTransform (Texture nullPtr) (Shader nullPtr)

{-typedef struct
{
    sfBlendMode      blendMode; ///< Blending mode
    sfTransform      transform; ///< Transform
    const sfTexture* texture;   ///< Texture
    const sfShader*  shader;    ///< Shader
} sfRenderStates;-}