module FWGL.Graphics.Shapes where

import Data.Vect.Float
import FWGL.Geometry
import FWGL.Graphics.Types
import FWGL.Internal.GL (GLES)

rectGeometry :: GLES => Vec2 -> Geometry Geometry2D
rectGeometry (Vec2 w h) = mkGeometry2D [ Vec2 (-hw) (-hh)
                                       , Vec2 hw    (-hh)
                                       , Vec2 hw    hh
                                       , Vec2 (-hw) hh ]
                                       [ Vec2 0 0
                                       , Vec2 1 0
                                       , Vec2 1 1
                                       , Vec2 0 1 ]
                                       [ 0, 1, 2, 0, 3, 2 ]
        where (hw, hh) = (w / 2, h / 2)

cubeGeometry :: GLES => Geometry Geometry3D
cubeGeometry =
        mkGeometry3D
                [ Vec3 1.0 1.0 (-0.999999), 
                  Vec3 1.0 (-1.0) (-1.0), 
                  Vec3 (-1.0) 1.0 (-1.0), 
                  Vec3 (-1.0) (-1.0) 1.0, 
                  Vec3 (-1.0) 1.0 1.0, 
                  Vec3 (-1.0) (-1.0) (-1.0), 
                  Vec3 (-1.0) (-1.0) 1.0, 
                  Vec3 1.0 (-1.0) 1.0, 
                  Vec3 (-1.0) 1.0 1.0, 
                  Vec3 1.0 (-1.0) 1.0, 
                  Vec3 1.0 (-1.0) (-1.0), 
                  Vec3 0.999999 1.0 1.000001, 
                  Vec3 1.0 1.0 (-0.999999), 
                  Vec3 (-1.0) 1.0 (-1.0), 
                  Vec3 0.999999 1.0 1.000001, 
                  Vec3 1.0 (-1.0) (-1.0), 
                  Vec3 1.0 (-1.0) 1.0, 
                  Vec3 (-1.0) (-1.0) (-1.0), 
                  Vec3 (-1.0) (-1.0) (-1.0), 
                  Vec3 (-1.0) 1.0 (-1.0), 
                  Vec3 0.999999 1.0 1.000001, 
                  Vec3 1.0 1.0 (-0.999999), 
                  Vec3 (-1.0) 1.0 1.0, 
                  Vec3 (-1.0) (-1.0) 1.0 ]
                [ Vec2 0.9999 1.0e-4, 
                  Vec2 0.9999 0.9999, 
                  Vec2 1.0e-4 1.0e-4, 
                  Vec2 1.0e-4 0.9999, 
                  Vec2 1.0e-4 1.0e-4, 
                  Vec2 0.9999 0.9999, 
                  Vec2 1.0e-4 1.0e-4, 
                  Vec2 0.9999 1.0e-4, 
                  Vec2 1.0e-4 0.9999, 
                  Vec2 1.0e-4 1.0e-4, 
                  Vec2 0.9999 1.0e-4, 
                  Vec2 1.0e-4 0.9999, 
                  Vec2 0.9999 0.9999, 
                  Vec2 1.0e-4 0.9999, 
                  Vec2 0.9999 1.0e-4, 
                  Vec2 0.9999 0.9999, 
                  Vec2 1.0e-4 0.9999, 
                  Vec2 0.9999 1.0e-4, 
                  Vec2 1.0e-4 0.9999, 
                  Vec2 0.9999 1.0e-4, 
                  Vec2 0.9999 0.9999, 
                  Vec2 0.9999 0.9999, 
                  Vec2 1.0e-4 1.0e-4, 
                  Vec2 1.0e-4 1.0e-4 ]
                [ Vec3 0.0 0.0 (-1.0), 
                  Vec3 0.0 0.0 (-1.0), 
                  Vec3 0.0 0.0 (-1.0), 
                  Vec3 (-1.0) (-0.0) (-0.0), 
                  Vec3 (-1.0) (-0.0) (-0.0), 
                  Vec3 (-1.0) (-0.0) (-0.0), 
                  Vec3 (-0.0) (-0.0) 1.0, 
                  Vec3 (-0.0) (-0.0) 1.0, 
                  Vec3 (-0.0) (-0.0) 1.0, 
                  Vec3 1.0 (-0.0) 0.0, 
                  Vec3 1.0 (-0.0) 0.0, 
                  Vec3 1.0 (-0.0) 0.0, 
                  Vec3 0.0 1.0 0.0, 
                  Vec3 0.0 1.0 0.0, 
                  Vec3 0.0 1.0 0.0, 
                  Vec3 0.0 (-1.0) 0.0, 
                  Vec3 0.0 (-1.0) 0.0, 
                  Vec3 0.0 (-1.0) 0.0, 
                  Vec3 0.0 0.0 (-1.0), 
                  Vec3 (-1.0) (-0.0) (-0.0), 
                  Vec3 (-0.0) (-0.0) 1.0, 
                  Vec3 1.0 (-0.0) 0.0, 
                  Vec3 0.0 1.0 0.0, 
                  Vec3 0.0 (-1.0) 0.0 ]
                [ 0, 1, 2,
                  3, 4, 5,
                  6, 7, 8,
                  9, 10, 11,
                  12, 13, 14,
                  15, 16, 17,
                  1, 18, 2,
                  4, 19, 5,
                  7, 20, 8,
                  10, 21, 11,
                  13, 22, 14,
                  16, 23, 17 ]