{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE Strict #-} module Picture.Data where import Data.Monoid import qualified Data.DList as DL import Geometry.Data import Control.Lens type RGBA = (Float,Float,Float,Float) type Color = (Float,Float,Float,Float) data Picture = Scene { _scPosTri :: DL.DList Point3 , _scColTri :: DL.DList RGBA , _scPosChar :: DL.DList Point3 , _scColChar :: DL.DList RGBA , _scTexChar :: DL.DList Point2 } blank :: Picture {-# INLINE blank #-} blank = Scene DL.empty DL.empty DL.empty DL.empty DL.empty combineScenes :: Picture -> Picture -> Picture {-# SCC combineScenes #-} --{-# INLINE combineScenes #-} combineScenes sa sb = Scene { _scPosTri = _scPosTri sa <> _scPosTri sb , _scColTri = _scColTri sa <> _scColTri sb , _scPosChar = _scPosChar sa <> _scPosChar sb , _scColChar = _scColChar sa <> _scColChar sb , _scTexChar = _scTexChar sa <> _scTexChar sb } instance Semigroup Picture where (<>) = combineScenes instance Monoid Picture where mempty = blank --mappend = combineScenes makeLenses ''Picture