module SFML.Graphics.VertexArray
(
createVA
, copy
, destroy
, getVertexCount
, getVertex
, clearVA
, resizeVA
, appendVA
, setPrimitiveType
, getPrimitiveType
, getVABounds
)
where
import SFML.Graphics.PrimitiveType
import SFML.Graphics.Rect
import SFML.Graphics.Types
import SFML.Graphics.Vertex
import SFML.SFCopyable
import SFML.SFResource
import Control.Monad
import Foreign.C.Types
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Utils (with)
import Foreign.Ptr
import Foreign.Storable (peek)
createVA :: IO VertexArray
createVA = sfVertexArray_create
foreign import ccall unsafe "sfVertexArray_create"
sfVertexArray_create :: IO VertexArray
instance SFCopyable VertexArray where
copy = sfVertexArray_copy
foreign import ccall unsafe "sfVertexArray_copy"
sfVertexArray_copy :: VertexArray -> IO VertexArray
instance SFResource VertexArray where
destroy = sfVertexArray_destroy
foreign import ccall unsafe "sfVertexArray_destroy"
sfVertexArray_destroy :: VertexArray -> IO ()
getVertexCount :: VertexArray -> IO Int
getVertexCount = sfVertexArray_getVertexCount >=> return . fromIntegral
foreign import ccall unsafe "sfVertexArray_getVertexCount"
sfVertexArray_getVertexCount :: VertexArray -> IO CUInt
getVertex :: VertexArray -> Int -> IO (Ptr Vertex)
getVertex va i = sfVertexArray_getVertex va (fromIntegral i)
foreign import ccall unsafe "sfVertexArray_getVertex"
sfVertexArray_getVertex :: VertexArray -> CUInt -> IO (Ptr Vertex)
clearVA :: VertexArray -> IO ()
clearVA = sfVertexArray_clear
foreign import ccall unsafe "sfVertexArray_clear"
sfVertexArray_clear :: VertexArray -> IO ()
resizeVA
:: VertexArray
-> Int
-> IO ()
resizeVA va size = sfVertexArray_resize va (fromIntegral size)
foreign import ccall unsafe "sfVertexArray_resize"
sfVertexArray_resize :: VertexArray -> CUInt -> IO ()
appendVA :: VertexArray -> Vertex -> IO ()
appendVA va v = with v $ sfVertexArray_append_helper va
foreign import ccall unsafe "sfVertexArray_append_helper"
sfVertexArray_append_helper :: VertexArray -> Ptr Vertex -> IO ()
setPrimitiveType :: VertexArray -> PrimitiveType -> IO ()
setPrimitiveType va pt = sfVertexArray_setPrimitiveType va (fromIntegral . fromEnum $ pt)
foreign import ccall unsafe "sfVertexArray_setPrimitiveType"
sfVertexArray_setPrimitiveType :: VertexArray -> CInt -> IO ()
getPrimitiveType :: VertexArray -> IO PrimitiveType
getPrimitiveType = sfVertexArray_getPrimitiveType >=> return . toEnum . fromIntegral
foreign import ccall unsafe "sfVertexArray_getPrimitiveType"
sfVertexArray_getPrimitiveType :: VertexArray -> IO CInt
getVABounds :: VertexArray -> IO FloatRect
getVABounds va = alloca $ \ptr -> sfVertexArray_getBounds_helper va ptr >> peek ptr
foreign import ccall unsafe "sfVertexArray_getBounds_helper"
sfVertexArray_getBounds_helper :: VertexArray -> Ptr FloatRect -> IO ()