cal3d-0.1: Graphics/Animation/Cal3D/Model.hs
{-# LANGUAGE ForeignFunctionInterface #-}
{-# INCLUDE "cal3d_c.h" #-}
module Graphics.Animation.Cal3D.Model
(newModel, deleteModel
, attachMesh
, setLodLevel
, setMaterialSet
, getMixer
, update
, getRenderer
)
where
import Foreign
import Foreign.C.Types
import Foreign.C.String
import Graphics.Animation.Cal3D.Types
import Graphics.Animation.Cal3D.CoreModel
import Graphics.Animation.Cal3D.Error
-- | Create a new Model instance from a CoreModel.
foreign import ccall safe "newModel"
newModel :: CoreModel -> IO Model
-- | Destroy a Model.
foreign import ccall safe "deleteModel"
deleteModel :: Model -> IO ()
-- | Attach a mesh to a Model.
attachMesh :: Model -> MeshId -> IO (Either String ())
attachMesh model (MeshId id) =
checkError (c_attachMesh model id) 0 "failed to attach mesh"
foreign import ccall safe "attachMesh"
c_attachMesh :: Model -> CInt -> IO CInt
-- | Set the level of detail for a Model (between 0 and 1).
setLodLevel :: Model -> Float -> IO ()
setLodLevel model = c_setLodLevel model . realToFrac
foreign import ccall safe "setLodLevel"
c_setLodLevel :: Model -> CFloat -> IO ()
-- | Apply a material set to a Model.
setMaterialSet :: Model -> MaterialSetId -> IO ()
setMaterialSet model (MaterialSetId id) =
c_setMaterialSet model (fromIntegral id)
foreign import ccall safe "setMaterialSet"
c_setMaterialSet :: Model -> CInt -> IO ()
-- | Get a Mixer which can animate the Model.
foreign import ccall safe "getMixer"
getMixer :: Model -> IO Mixer
-- | Let the current animations of a Model run for a specified time.
update :: Model
-> Float -- ^ elapsed time in seconds
-> IO ()
update model deltaTime = c_update model (realToFrac deltaTime)
foreign import ccall safe "update"
c_update :: Model -> CFloat -> IO ()
-- | Get a Renderer for the Model, which can provide information
-- needed for a graphics API.
foreign import ccall safe "getRenderer"
getRenderer :: Model -> IO Renderer