module Language.Mecha.OpenGL
  ( vertex3
  , normal3
  , color3
  , scale3
  , translate3
  , rotate3
  ) where

import Graphics.Rendering.OpenGL

--vertex3 :: Real a => a -> a -> a -> IO ()
vertex3 x y z = vertex $ Vertex3 (toFloat x) (toFloat y) (toFloat z)

--normal3 :: Real a => a -> a -> a -> IO ()
normal3 x y z = normal $ Normal3 (toFloat x) (toFloat y) (toFloat z)

--color3 :: Real a => a -> a -> a -> IO ()
color3 r g b = color $ Color3 (toFloat r) (toFloat g) (toFloat b)

--scale3 :: Real a => a -> a -> a -> IO ()
scale3 x y z = scale (toFloat x) (toFloat y) (toFloat z)

--translate3 :: Real a => a -> a -> a -> IO ()
translate3 x y z = translate $ Vector3 (toFloat x) (toFloat y) (toFloat z)

--rotate3 :: (Real a, Floating a) => a -> a -> a -> a -> IO ()
rotate3 angle x y z = rotate (toFloat $ angle * 180 / pi) $ Vector3 (toFloat x) (toFloat y) (toFloat z)

toFloat :: (Real a, Floating a) => a -> GLfloat
toFloat = realToFrac