{-# LANGUAGE DataKinds #-} {-# LANGUAGE ExplicitForAll #-} {-# LANGUAGE ExtendedDefaultRules #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoMonoLocalBinds #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} module Hylogen ( module Hylogen , module Hylogen.Types , module Hylogen.Globals ) where import Data.Monoid import Data.List import Hylogen.CSE (contextToAssignments, getTopLevel, genContext) import Hylogen.Globals import Hylogen.Types (Vec (fromVec1, select, toList), Vec1 (W, X, Y, Z), Vec2, Vec3, Vec4) toGLSL' :: Vec4 -> String toGLSL' v = unlines [ "void main() {" , " gl_FragColor = " <> show v<> ";" , "}" ] toGLSL :: Vec4 -> String toGLSL v = unlines [ "void main() {" , assignments , "" , " gl_FragColor = " <> show topLevel <> ";" , "}" ] where assignments = mconcat . fmap ("\n "<>) $ contextToAssignments glsl glsl = genContext v topLevel = getTopLevel glsl