{-# 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 Foreign.C.Types (CFloat)
import Foreign.Ptr (nullPtr)
import Foreign.Storable


{-# LINE 19 "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 _ = size_sfRenderStates
    alignment _ = alignment (undefined :: CFloat)

    peek ptr = do
        bm <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
{-# LINE 36 "src/SFML/Graphics/RenderStates.hsc" #-}
        tr <- (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
{-# LINE 37 "src/SFML/Graphics/RenderStates.hsc" #-}
        tx <- (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr
{-# LINE 38 "src/SFML/Graphics/RenderStates.hsc" #-}
        sh <- (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr
{-# LINE 39 "src/SFML/Graphics/RenderStates.hsc" #-}
        return $ RenderStates bm tr tx sh

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


size_sfRenderStates = (80)
{-# 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;-}