-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Educational drawing canvas for FP explorers.
--
-- This package is an experimental teaching tool that provides the
-- foundation for presenting functional idioms with graphical metaphors.
-- The OpenGL canvas boilerplate is abstracted away to a simple
-- interface, which allows to focus on program logic instead of the
-- graphics API. It's also arguably fun.
@package lambda-canvas
@version 0.1
module Graphics.LambdaCanvas
type Point = (GLfloat, GLfloat)
-- | Specification of the way the vertices given during
-- renderPrimitive are interpreted. In the description of the
-- constructors, n is an integer count starting at one, and
-- N is the total number of vertices specified.
data PrimitiveMode :: *
-- | Treats each vertex as a single point. Vertex n defines point
-- n. N points are drawn.
Points :: PrimitiveMode
-- | Treats each pair of vertices as an independent line segment. Vertices
-- 2n-1 and 2n define line n. N/2 lines are
-- drawn.
Lines :: PrimitiveMode
-- | Draws a connected group of line segments from the first vertex to the
-- last, then back to the first. Vertices n and n+1 define
-- line n. The last line, however, is defined by vertices N
-- and 1. N lines are drawn.
LineLoop :: PrimitiveMode
-- | Draws a connected group of line segments from the first vertex to the
-- last. Vertices n and n+1 define line n.
-- N-1 lines are drawn.
LineStrip :: PrimitiveMode
-- | Treats each triplet of vertices as an independent triangle. Vertices
-- 3n-2, 3n-1, and 3n define triangle n.
-- N\3/ triangles are drawn.
Triangles :: PrimitiveMode
-- | Draws a connected group of triangles. One triangle is defined for each
-- vertex presented after the first two vertices. For odd n,
-- vertices n, n+1, and n+2 define triangle
-- n. For even n, vertices n+1, n, and
-- n+2 define triangle n. N-2 triangles are drawn.
TriangleStrip :: PrimitiveMode
-- | Draws a connected group of triangles. One triangle is defined for each
-- vertex presented after the first two vertices. Vertices 1, n+1,
-- and n+2 define triangle n. N-2 triangles are
-- drawn.
TriangleFan :: PrimitiveMode
-- | Treats each group of four vertices as an independent quadrilateral.
-- Vertices 4n-3, 4n-2, 4n-1, and 4n define
-- quadrilateral n. N/4 quadrilaterals are drawn.
Quads :: PrimitiveMode
-- | Draws a connected group of quadrilaterals. One quadrilateral is
-- defined for each pair of vertices presented after the first pair.
-- Vertices 2n-1, 2n, 2n+2, and 2n+1 define
-- quadrilateral n. N/2-1 quadrilaterals are drawn. Note
-- that the order in which vertices are used to construct a quadrilateral
-- from strip data is different from that used with independent data.
QuadStrip :: PrimitiveMode
-- | Draws a single, convex polygon. Vertices 1 through N define
-- this polygon.
Polygon :: PrimitiveMode
-- | Create a canvas suitable for animation. The drawing block is invoked
-- on each redisplay and is passed the current timestamp.
animate :: String -> (POSIXTime -> IO ()) -> IO ()
-- | Create a canvas suitable for drawing a static picture. The drawing
-- block is invoked on each redisplay.
draw :: String -> IO () -> IO ()
-- | Draw a primitive from a set of a vertices on screen.
put :: PrimitiveMode -> [Point] -> IO ()
-- | Given an amount of steps and a timestamp, calculate current step
-- number. Step numbers begin with 0.
stepOf :: Num a => Integer -> POSIXTime -> a