module Render ( setup , resize , render ) where import Game import Control.Monad.State import Graphics.Rendering.OpenGL.GL (($=), GLfloat) import Graphics.Rendering.OpenGL.GL.BeginEnd (renderPrimitive, PrimitiveMode(..)) import Graphics.Rendering.OpenGL.GL.CoordTrans (matrixMode, MatrixMode(..), viewport, Position(..), Size(..), loadIdentity, ortho) import Graphics.Rendering.OpenGL.GL.Framebuffer (clear, ClearBuffer(..)) import Graphics.Rendering.OpenGL.GL.VertexSpec setup :: Int -> Int -> IO () setup = resize resize :: Int -> Int -> IO () resize w h = do let wn = fromIntegral w hn = fromIntegral h aspect = wn/hn matrixMode $= Projection loadIdentity ortho (-aspect) (aspect) (-1) 1 (-1) 1 matrixMode $= Modelview 0 viewport $= ((Position 0 0), (Size (fromIntegral w) (fromIntegral h))) render :: Game () render = liftIO $ do clear [ColorBuffer] renderPrimitive Triangles $ do vertex $ Vertex2 (-0.5 :: GLfloat) (0.5 :: GLfloat) vertex $ Vertex2 (0.5 :: GLfloat) (0.5 :: GLfloat) vertex $ Vertex2 (0.5 :: GLfloat) (-0.5 :: GLfloat)