fwgl-0.1.4.0: FWGL/Backend/IO.hs
{-# LANGUAGE MultiParamTypeClasses, TypeFamilies, NullaryTypeClasses #-}
module FWGL.Backend.IO where
import Control.Concurrent (ThreadId)
import FRP.Yampa
import FWGL.Backend.GLES
import FWGL.Input
class GLES => BackendIO where
-- | Where to draw (e.g. a window, a HTML5 canvas).
type Canvas
type BackendState
-- TODO: loadImage may fail
loadImage :: FilePath -- ^ Path or URL.
-> ((Image, Int, Int) -> IO ()) -- ^ Callback.
-> IO ()
loadTextFile :: FilePath -- ^ Path or URL.
-> (Either String String -> IO ()) -- ^ Callback
-> IO ()
initBackend :: IO BackendState
createCanvas :: String -> BackendState -> IO (Canvas, Int, Int)
-- | Set the size of the canvas/window.
setCanvasSize :: Int -- ^ Width
-> Int -- ^ Height
-> Canvas
-> BackendState
-> IO ()
-- | Set the title of the window.
setCanvasTitle :: String -> Canvas -> BackendState -> IO ()
setCanvasResizeCallback :: (Int -> Int -> IO ())
-> Canvas -> BackendState -> IO ()
setCanvasRefreshCallback :: IO () -> Canvas -> BackendState -> IO ()
-- | 'EventData's must be sorted in reverse chronological order.
popInput :: a -> Canvas -> BackendState -> IO (Input a)
getInput :: a -> Canvas -> BackendState -> IO (Input a)
drawCanvas :: (Ctx -> IO a) -- ^ Draw action.
-> Bool -- ^ Swap buffers.
-> Canvas
-> BackendState
-> IO a
safeFork :: Ctx -> (IO () -> IO ThreadId) -> IO () -> IO ThreadId
refreshLoop :: Int -- ^ FPS (not necessarily used).
-> Canvas
-> BackendState
-> IO ()
-- | Time, in seconds.
getTime :: BackendState -> IO Double
terminateBackend :: BackendState -> IO ()