SFML-2.3.2: src/SFML/Graphics/RenderStates.hsc
{-# LANGUAGE CPP, ForeignFunctionInterface #-}
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
#include <SFML/Graphics/RenderStates.h>
#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t(y__); }, y__)
-- | 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 sfRenderStates}
peek ptr = RenderStates
<$> #{peek sfRenderStates, blendMode} ptr
<*> #{peek sfRenderStates, transform} ptr
<*> #{peek sfRenderStates, texture} ptr
<*> #{peek sfRenderStates, shader} ptr
poke ptr (RenderStates bm tr tx sh) = do
#{poke sfRenderStates, blendMode} ptr bm
#{poke sfRenderStates, transform} ptr tr
#{poke sfRenderStates, texture} ptr tx
#{poke sfRenderStates, shader} ptr sh
-- | 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;-}