module FRP.Spice.Graphics.Geometry ( renderPoint
, renderRectangle
, renderSquare
) where
import Graphics.Rendering.OpenGL ( PrimitiveMode (..)
, Vertex2 (..)
, renderPrimitive
, vertex
)
import Control.Monad
import FRP.Spice.Graphics.Renderable
import FRP.Spice.Graphics.Scene
import FRP.Spice.Graphics.Utils
import FRP.Spice.Math.Vector
data Primitive = Primitive PrimitiveMode [Vector Float]
instance Renderable Primitive where
toRender (Primitive mode vertecies) =
Render $
renderPrimitive mode $
forM_ vertecies $ \(Vector x y) ->
vertex $ Vertex2 (togl x) (togl y)
renderPoint :: Vector Float -> Scene
renderPoint pos =
fromRenderables [Primitive Points [pos]]
renderRectangle :: Vector Float -> Vector Float -> Scene
renderRectangle (Vector x y) (Vector w h) = do
fromRenderables [ Primitive Quads [ Vector (x ) (y )
, Vector (x + w) (y )
, Vector (x + w) (y + h)
, Vector (x ) (y + h)
]
]
renderSquare :: Vector Float -> Float -> Scene
renderSquare pos size = renderRectangle pos $ Vector size size