module Graphics.GLUtil.Viewport where
import Control.Monad.IO.Class
import Graphics.Rendering.OpenGL
withViewport :: MonadIO m => Position -> Size -> m a -> m a
withViewport :: Position -> Size -> m a -> m a
withViewport p :: Position
p s :: Size
s m :: m a
m = do (Position, Size)
oldVP <- IO (Position, Size) -> m (Position, Size)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Position, Size) -> m (Position, Size))
-> IO (Position, Size) -> m (Position, Size)
forall a b. (a -> b) -> a -> b
$ do (Position, Size)
oldVP <- StateVar (Position, Size) -> IO (Position, Size)
forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
get StateVar (Position, Size)
viewport
StateVar (Position, Size)
viewport StateVar (Position, Size) -> (Position, Size) -> IO ()
forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$= (Position
p,Size
s)
(Position, Size) -> IO (Position, Size)
forall (m :: * -> *) a. Monad m => a -> m a
return (Position, Size)
oldVP
a
r <- m a
m
IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ StateVar (Position, Size)
viewport StateVar (Position, Size) -> (Position, Size) -> IO ()
forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$= (Position, Size)
oldVP
a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
r