-- | Helpers for working with OpenGL viewports. module Graphics.GLUtil.Viewport where import Control.Monad.IO.Class import Graphics.Rendering.OpenGL -- | @withViewport pos sz m@ runs the action @m@ after setting the -- viewport with the given 'Position' and 'Size'. The viewport is -- reset to its original state after the action is run, and the result -- of the action is returned. withViewport :: MonadIO m => Position -> Size -> m a -> m a withViewport p s m = do oldVP <- liftIO $ do oldVP <- get viewport viewport $= (p,s) return oldVP r <- m liftIO $ viewport $= oldVP return r