module RSAGL.Modeling.OpenGLPrimitives (OpenGLPrimitive(..), renderPrimitives) where import Graphics.Rendering.OpenGL.GL import Control.Monad class OpenGLPrimitive a where getVertex :: a -> Vertex3 GLdouble getNormal :: a -> Normal3 GLdouble getColor :: a -> Color4 GLdouble -- | Simple 'renderPrimitive' function for a list of vertices. Optionally a single color can be specified to override vertex-wise colors. renderPrimitives :: (OpenGLPrimitive a) => PrimitiveMode -> Bool -> [a] -> IO () renderPrimitives mode colors_on as = unsafeRenderPrimitive mode $ mapM_ renderElement as where renderElement a = do when colors_on $ color $ getColor a normal $ getNormal a vertex $ getVertex a