module FRP.Spice.Graphics.Geometry ( renderPoint
, renderLine
, renderRectangle
, renderSquare
, renderTriangle
, renderPolygon
) where
import Graphics.Rendering.OpenGL
import Control.Monad
import FRP.Spice.Graphics.Scene
import FRP.Spice.Graphics.Utils
import FRP.Spice.Math.Vector
renderPrimitive' :: PrimitiveMode -> [Vector Float] -> Scene
renderPrimitive' mode points =
renderPrimitive mode $
forM_ points $ \(Vector x y) ->
vertex $ Vertex2 (togl x) (togl y)
renderPoint :: Vector Float -> Scene
renderPoint pos = renderPrimitive' Points [pos]
renderLine :: Vector Float -> Vector Float -> Scene
renderLine p1 p2 = renderPrimitive' Lines [p1, p2]
renderRectangle :: Vector Float -> Vector Float -> Scene
renderRectangle (Vector x y) (Vector w h) =
renderPrimitive' 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
renderTriangle :: Vector Float -> Vector Float -> Vector Float -> Scene
renderTriangle p1 p2 p3 = renderPrimitive' Triangles [p1, p2, p3]
renderPolygon :: [Vector Float] -> Scene
renderPolygon l = renderPrimitive' Polygon l