{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Picture.Data where import Geometry.Data --import qualified Data.Vector.Fusion.Stream.Monadic as VS import Control.Lens data Verx = Verx { _vxPos :: !Point3 , _vxCol :: !Point4 , _vxExt :: [Float] , _vxLayer :: !LayNum , _vxShadNum :: !ShadNum } newtype LayNum = LayNum { _unLayNum :: Int } --TODO use synonyms for layer numbers newtype ShadNum = ShadNum { _unShadNum :: Int } polyNum, polyzNum, bezNum, textNum, arcNum, ellNum :: ShadNum {-# INLINE polyNum #-} {-# INLINE polyzNum #-} {-# INLINE bezNum #-} {-# INLINE textNum #-} {-# INLINE arcNum #-} {-# INLINE ellNum #-} polyNum = ShadNum 0 polyzNum = ShadNum 1 bezNum = ShadNum 2 textNum = ShadNum 3 arcNum = ShadNum 4 ellNum = ShadNum 5 type Picture = [Verx] flat2 :: V2 a -> [a] flat2 (V2 x y) = [x,y] flat3 :: V3 a -> [a] flat3 (V3 x y z) = [x,y,z] flat4 :: V4 a -> [a] flat4 (V4 x y z w) = [x,y,z,w] {-# INLINE flat2 #-} {-# INLINE flat3 #-} {-# INLINE flat4 #-} tflat2 :: (a,a) -> [a] tflat2 (x,y) = [x,y] tflat3 :: (a,a,a) -> [a] tflat3 (x,y,z) = [x,y,z] tflat4 :: (a,a,a,a) -> [a] tflat4 (x,y,z,w) = [x,y,z,w] {-# INLINE tflat2 #-} {-# INLINE tflat3 #-} {-# INLINE tflat4 #-} makeLenses ''Verx