fwgl-0.1.0.0: FWGL/Shader/Stages.hs
{-# LANGUAGE TypeOperators, DataKinds, GeneralizedNewtypeDeriving,
DeriveDataTypeable, RankNTypes, FlexibleContexts #-}
module FWGL.Shader.Stages (
VertexShader,
FragmentShader,
putVertex,
putFragment
) where
import Data.Typeable
import FWGL.Shader.Language
import FWGL.Shader.Monad
type VertexShader g i o = Shader g i (VertexShaderOutput ': o) ()
type FragmentShader g i = Shader g i (FragmentShaderOutput ': '[]) ()
newtype VertexShaderOutput = VSO V4 deriving (Typeable, ShaderType)
newtype FragmentShaderOutput = FSO V4 deriving (Typeable, ShaderType)
putVertex :: Member VertexShaderOutput o => V4 -> Shader g i o ()
-- putVertex :: V4 -> Shader '[] '[] (VertexShaderOutput ': '[]) ()
putVertex = put . VSO
putFragment :: Member FragmentShaderOutput o => V4 -> Shader g i o ()
-- putFragment :: V4 -> Shader '[] '[] (FragmentShaderOutput ': '[]) ()
putFragment = put . FSO