module SFML.Graphics.RenderTexture
(
module SFML.Utils
, createRenderTexture
, destroy
, getTextureSize
, setActive
, display
, clear
, setView
, getView
, getDefaultView
, getViewport
, mapPixelToCoords
, drawSprite
, drawText
, drawShape
, drawCircle
, drawConvexShape
, drawRectangle
, drawVertexArray
, drawPrimitives
, drawPrimitives'
, pushGLStates
, popGLStates
, resetGLStates
, getRenderTexture
, setSmooth
, isSmooth
)
where
import SFML.Graphics.Color
import SFML.Graphics.Rect
import SFML.Graphics.SFCoordSpace
import SFML.Graphics.SFSmoothTexture
import SFML.Graphics.SFViewable
import SFML.Graphics.Types
import SFML.Graphics.PrimitiveType
import SFML.Graphics.RenderStates
import SFML.Graphics.SFRenderTarget
import SFML.Graphics.SFSmoothTexture
import SFML.Graphics.Vertex
import SFML.SFDisplayable
import SFML.SFException
import SFML.SFResource
import SFML.System.Vector2
import SFML.Utils
import Foreign.C.Types
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (withArray)
import Foreign.Marshal.Utils (with)
import Foreign.Ptr
import Foreign.Storable (peek)
checkNull :: RenderTexture -> Maybe RenderTexture
checkNull tex@(RenderTexture ptr) = if ptr == nullPtr then Nothing else Just tex
createRenderTexture
:: Int
-> Int
-> Bool
-> IO (Either SFException RenderTexture)
createRenderTexture w h d =
let err = SFException "Failed creating render texture"
in fmap (tagErr err . checkNull) $ sfRenderTexture_create (fromIntegral w) (fromIntegral h) (fromIntegral . fromEnum $ d)
foreign import ccall unsafe "sfRenderTexture_create"
sfRenderTexture_create :: CUInt -> CUInt -> CInt -> IO RenderTexture
instance SFResource RenderTexture where
destroy = sfRenderTexture_destroy
foreign import ccall unsafe "sfRenderTexture_destroy"
sfRenderTexture_destroy :: RenderTexture -> IO ()
getTextureSize
:: RenderTexture
-> IO Vec2u
getTextureSize tex = alloca $ \ptr -> sfRenderTexture_getSize_helper tex ptr >> peek ptr
foreign import ccall unsafe "sfRenderTexture_getSize_helper"
sfRenderTexture_getSize_helper :: RenderTexture -> Ptr Vec2u -> IO ()
setActive
:: RenderTexture
-> Bool
-> IO Bool
setActive tex val =
fmap (toEnum . fromIntegral) $ sfRenderTexture_setActive tex (fromIntegral . fromEnum $ val)
foreign import ccall unsafe "sfRenderTexture_setActive"
sfRenderTexture_setActive :: RenderTexture -> CInt -> IO CInt
instance SFDisplayable RenderTexture where
display = sfRenderTexture_display
foreign import ccall unsafe "sfRenderTexture_display"
sfRenderTexture_display :: RenderTexture -> IO ()
clear
:: RenderTexture
-> Color
-> IO ()
clear tex col = with col $ sfRenderTexture_clear_helper tex
foreign import ccall unsafe "sfRenderTexture_clear_helper"
sfRenderTexture_clear_helper :: RenderTexture -> Ptr Color -> IO ()
instance SFViewable RenderTexture where
setView = sfRenderTexture_setView
getView = sfRenderTexture_getView
getDefaultView = sfRenderTexture_getDefaultView
getViewport tex view = alloca $ \ptr -> sfRenderTexture_getViewport_helper tex view ptr >> peek ptr
foreign import ccall unsafe "sfRenderTexture_setView"
sfRenderTexture_setView :: RenderTexture -> View -> IO ()
foreign import ccall unsafe "sfRenderTexture_getView"
sfRenderTexture_getView :: RenderTexture -> IO View
foreign import ccall unsafe "sfRenderTexture_getDefaultView"
sfRenderTexture_getDefaultView :: RenderTexture -> IO View
foreign import ccall unsafe "sfRenderTexture_getViewport_helper"
sfRenderTexture_getViewport_helper :: RenderTexture -> View -> Ptr IntRect -> IO ()
instance SFCoordSpace RenderTexture where
mapPixelToCoords tex point view =
alloca $ \out ->
with point $ \ptr -> case view of
Nothing -> sfRenderTexture_mapPixelToCoords_helper tex ptr (View nullPtr) out >> peek out
Just v -> sfRenderTexture_mapPixelToCoords_helper tex ptr v out >> peek out
foreign import ccall unsafe "sfRenderTexture_mapPixelToCoords_helper"
sfRenderTexture_mapPixelToCoords_helper :: RenderTexture -> Ptr Vec2i -> View -> Ptr Vec2f -> IO ()
instance SFRenderTarget RenderTexture where
drawSprite tex sprite Nothing = sfRenderTexture_drawSprite tex sprite nullPtr
drawSprite tex sprite (Just r) = with r $ sfRenderTexture_drawSprite tex sprite
drawText tex text Nothing = sfRenderTexture_drawText tex text nullPtr
drawText tex text (Just r) = with r $ sfRenderTexture_drawText tex text
drawShape tex shape Nothing = sfRenderTexture_drawShape tex shape nullPtr
drawShape tex shape (Just r) = with r $ sfRenderTexture_drawShape tex shape
drawCircle tex circle Nothing = sfRenderTexture_drawCircleShape tex circle nullPtr
drawCircle tex circle (Just r) = with r $ sfRenderTexture_drawCircleShape tex circle
drawConvexShape tex shape Nothing = sfRenderTexture_drawConvexShape tex shape nullPtr
drawConvexShape tex shape (Just r) = with r $ sfRenderTexture_drawConvexShape tex shape
drawRectangle tex shape Nothing = sfRenderTexture_drawRectangleShape tex shape nullPtr
drawRectangle tex shape (Just r) = with r $ sfRenderTexture_drawRectangleShape tex shape
drawVertexArray tex va Nothing = sfRenderTexture_drawVertexArray tex va nullPtr
drawVertexArray tex va (Just r) = with r $ sfRenderTexture_drawVertexArray tex va
drawPrimitives tex verts prim Nothing =
let count = fromIntegral $ length verts
in withArray verts $ \vertsPtr ->
sfRenderTexture_drawPrimitives tex vertsPtr count (fromIntegral . fromEnum $ prim) nullPtr
drawPrimitives tex verts prim (Just r) =
let count = fromIntegral $ length verts
in withArray verts $ \vertsPtr ->
with r $ sfRenderTexture_drawPrimitives tex vertsPtr count (fromIntegral . fromEnum $ prim)
drawPrimitives' tex verts count prim Nothing =
sfRenderTexture_drawPrimitives tex verts (fromIntegral count) (fromIntegral . fromEnum $ prim) nullPtr
drawPrimitives' tex verts count prim (Just r) =
with r $ sfRenderTexture_drawPrimitives tex verts (fromIntegral count) (fromIntegral . fromEnum $ prim)
pushGLStates = sfRenderTexture_pushGLStates
popGLStates = sfRenderTexture_popGLStates
resetGLStates = sfRenderTexture_resetGLStates
foreign import ccall unsafe "sfRenderTexture_drawSprite"
sfRenderTexture_drawSprite :: RenderTexture -> Sprite -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawText"
sfRenderTexture_drawText :: RenderTexture -> Text -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawShape"
sfRenderTexture_drawShape :: RenderTexture -> Shape -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawCircleShape"
sfRenderTexture_drawCircleShape :: RenderTexture -> CircleShape -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawConvexShape"
sfRenderTexture_drawConvexShape :: RenderTexture -> ConvexShape -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawRectangleShape"
sfRenderTexture_drawRectangleShape :: RenderTexture -> RectangleShape -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawVertexArray"
sfRenderTexture_drawVertexArray :: RenderTexture -> VertexArray -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_drawPrimitives"
sfRenderTexture_drawPrimitives :: RenderTexture -> Ptr Vertex -> CUInt -> CInt -> Ptr RenderStates -> IO ()
foreign import ccall unsafe "sfRenderTexture_pushGLStates"
sfRenderTexture_pushGLStates :: RenderTexture -> IO ()
foreign import ccall unsafe "sfRenderTexture_popGLStates"
sfRenderTexture_popGLStates :: RenderTexture -> IO ()
foreign import ccall unsafe "sfRenderTexture_resetGLStates"
sfRenderTexture_resetGLStates :: RenderTexture -> IO ()
getRenderTexture :: RenderTexture -> IO Texture
getRenderTexture = sfRenderTexture_getTexture
foreign import ccall unsafe "sfRenderTexture_getTexture"
sfRenderTexture_getTexture :: RenderTexture -> IO Texture
instance SFSmoothTexture RenderTexture where
setSmooth tex val = sfRenderTexture_setSmooth tex (fromIntegral . fromEnum $ val)
isSmooth tex = fmap (toEnum . fromIntegral ) $ sfRenderTexture_isSmooth tex
foreign import ccall unsafe "sfRenderTexture_setSmooth"
sfRenderTexture_setSmooth :: RenderTexture -> CInt -> IO ()
foreign import ccall unsafe "sfRenderTexture_isSmooth"
sfRenderTexture_isSmooth :: RenderTexture -> IO CInt