-- required due to use of genID
{-# OPTIONS_GHC -fno-full-laziness #-}

module Graphics.HaGL.GLAst (
    GLAst(..),
    GLTypeInfo(..),
    IsGLDomain(..),
    getID,
    toGLAst
) where

import Prelude hiding (id)
import Data.List (isPrefixOf)
import Control.Exception (throw)

import Graphics.HaGL.GLType
import Graphics.HaGL.GLExpr
import Graphics.HaGL.ExprID


data GLAst where
    GLAstAtom :: ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
    GLAstFunc :: ExprID -> GLTypeInfo -> GLAst -> [GLAst] -> GLAst
    GLAstFuncApp :: ExprID -> GLTypeInfo -> GLAst -> [GLAst] -> GLAst
    GLAstExpr :: ExprID -> GLTypeInfo -> String -> [GLAst] -> GLAst


data GLTypeInfo = GLTypeInfo {
    GLTypeInfo -> GLDomain
shaderType :: GLDomain,
    GLTypeInfo -> String
exprType :: String
}

class IsGLDomain (d :: GLDomain) where
    getShaderType :: GLExpr d t -> GLDomain
instance IsGLDomain ConstDomain where
    getShaderType :: forall t. GLExpr 'ConstDomain t -> GLDomain
getShaderType = forall a b. a -> b -> a
const GLDomain
ConstDomain
instance IsGLDomain HostDomain where
    getShaderType :: forall t. GLExpr 'HostDomain t -> GLDomain
getShaderType = forall a b. a -> b -> a
const GLDomain
HostDomain
instance IsGLDomain VertexDomain where
    getShaderType :: forall t. GLExpr 'VertexDomain t -> GLDomain
getShaderType = forall a b. a -> b -> a
const GLDomain
VertexDomain
instance IsGLDomain FragmentDomain where
    getShaderType :: forall t. GLExpr 'FragmentDomain t -> GLDomain
getShaderType = forall a b. a -> b -> a
const GLDomain
FragmentDomain

instance HasExprID GLAst where
    getID :: GLAst -> ExprID
getID (GLAstAtom ExprID
id GLTypeInfo
_ GLAtom d t
_) = ExprID
id
    getID (GLAstFunc ExprID
id GLTypeInfo
_ GLAst
_ [GLAst]
_) = ExprID
id
    getID (GLAstFuncApp ExprID
id GLTypeInfo
_ GLAst
_ [GLAst]
_) = ExprID
id
    getID (GLAstExpr ExprID
id GLTypeInfo
_ String
_ [GLAst]
_) = ExprID
id


getGLTypeInfo :: GLExpr d t -> GLTypeInfo
getGLTypeInfo GLExpr d t
e = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e)
mkGLFn :: ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
funcID ExprID
callID GLExpr d t
r [GLAst]
params [GLAst]
args = 
    ExprID -> GLTypeInfo -> GLAst -> [GLAst] -> GLAst
GLAstFuncApp ExprID
callID (forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
GLExpr d t -> GLTypeInfo
getGLTypeInfo GLExpr d t
r) GLAst
func [GLAst]
args where
        func :: GLAst
func = ExprID -> GLTypeInfo -> GLAst -> [GLAst] -> GLAst
GLAstFunc ExprID
funcID (forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
GLExpr d t -> GLTypeInfo
getGLTypeInfo GLExpr d t
r) (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
r) [GLAst]
params
mkGLExpr :: ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e = ExprID -> GLTypeInfo -> String -> [GLAst] -> GLAst
GLAstExpr ExprID
id (forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
GLExpr d t -> GLTypeInfo
getGLTypeInfo GLExpr d t
e)

showSizedArrayType :: a t -> a -> String
showSizedArrayType a t
e a
n = forall a. (a -> Bool) -> [a] -> [a]
takeWhile (forall a. Eq a => a -> a -> Bool
/= Char
']') (forall t (a :: * -> *). GLType t => a t -> String
showGlslType a t
e) forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show a
n forall a. [a] -> [a] -> [a]
++ String
"]"
showPotentialArrayType :: a t -> t -> String
showPotentialArrayType a t
e t
arr = 
    if forall t. GLType t => t -> Int
arrayLen t
arr forall a. Eq a => a -> a -> Bool
== Int
1 then forall t (a :: * -> *). GLType t => a t -> String
showGlslType a t
e else forall {t} {a} {a :: * -> *}.
(GLType t, Show a) =>
a t -> a -> String
showSizedArrayType a t
e (forall t. GLType t => t -> Int
arrayLen t
arr)
-- TODO: keep this as an assertion, but enforce the constraint at the type level
vd :: a
vd = forall a e. Exception e => e -> a
throw GLExprException
UnknownArraySize


toGLAst :: IsGLDomain d => GLExpr d t -> GLAst

-- Special case where we need to extract a known array size
-- (the current assumption is that only uniform arrays are used in the shader)
toGLAst :: forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLGenExpr ExprID
_ (GLArray [GLExpr 'HostDomain t1]
arr)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {a} {a :: * -> *}.
(GLType t, Show a) =>
a t -> a -> String
showSizedArrayType GLExpr d t
e (forall (t :: * -> *) a. Foldable t => t a -> Int
length [GLExpr 'HostDomain t1]
arr))
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift0 t
x0)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e t
x0)
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift1 t1 -> t
f GLExpr 'HostDomain t1
_)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e (t1 -> t
f forall {a}. a
vd))
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift2 t1 -> t2 -> t
f GLExpr 'HostDomain t1
_ GLExpr 'HostDomain t2
_)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e (t1 -> t2 -> t
f forall {a}. a
vd forall {a}. a
vd))
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift3 t1 -> t2 -> t3 -> t
f GLExpr 'HostDomain t1
_ GLExpr 'HostDomain t2
_ GLExpr 'HostDomain t3
_)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e (t1 -> t2 -> t3 -> t
f forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd))
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift4 t1 -> t2 -> t3 -> t4 -> t
f GLExpr 'HostDomain t1
_ GLExpr 'HostDomain t2
_ GLExpr 'HostDomain t3
_ GLExpr 'HostDomain t4
_)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e (t1 -> t2 -> t3 -> t4 -> t
f forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd))
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift5 t1 -> t2 -> t3 -> t4 -> t5 -> t
f GLExpr 'HostDomain t1
_ GLExpr 'HostDomain t2
_ GLExpr 'HostDomain t3
_ GLExpr 'HostDomain t4
_ GLExpr 'HostDomain t5
_)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e (t1 -> t2 -> t3 -> t4 -> t5 -> t
f forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd))
toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id x :: GLAtom d t
x@(Uniform (GLAtom ExprID
_ (GLLift6 t1 -> t2 -> t3 -> t4 -> t5 -> t6 -> t
f GLExpr 'HostDomain t1
_ GLExpr 'HostDomain t2
_ GLExpr 'HostDomain t3
_ GLExpr 'HostDomain t4
_ GLExpr 'HostDomain t5
_ GLExpr 'HostDomain t6
_)))) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id GLTypeInfo
ti GLAtom d t
x where
    ti :: GLTypeInfo
ti = GLDomain -> String -> GLTypeInfo
GLTypeInfo (forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLDomain
getShaderType GLExpr d t
e) (forall {t} {t} {a :: * -> *}.
(GLType t, GLType t) =>
a t -> t -> String
showPotentialArrayType GLExpr d t
e (t1 -> t2 -> t3 -> t4 -> t5 -> t6 -> t
f forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd forall {a}. a
vd))
-- FIXME: we never consider the case when arrays appear in precs

toGLAst e :: GLExpr d t
e@(GLAtom ExprID
id GLAtom d t
x) = forall (d :: GLDomain) t.
ExprID -> GLTypeInfo -> GLAtom d t -> GLAst
GLAstAtom ExprID
id (forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
GLExpr d t -> GLTypeInfo
getGLTypeInfo GLExpr d t
e) GLAtom d t
x

toGLAst e :: GLExpr d t
e@(GLFunc ExprID
fnID (GLFunc1 GLExpr d t1 -> GLExpr d t
f GLExpr d t1
x GLExpr d t1
x0)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
fnID (forall a. HasExprID a => a -> ExprID
getID GLExpr d t
e) (GLExpr d t1 -> GLExpr d t
f GLExpr d t1
x) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x] [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x0]
toGLAst e :: GLExpr d t
e@(GLFunc ExprID
fnID (GLFunc2 GLExpr d t1 -> GLExpr d t2 -> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t1
x0 GLExpr d t2
y0)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
fnID (forall a. HasExprID a => a -> ExprID
getID GLExpr d t
e) (GLExpr d t1 -> GLExpr d t2 -> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y] [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y0]
toGLAst e :: GLExpr d t
e@(GLFunc ExprID
fnID (GLFunc3 GLExpr d t1 -> GLExpr d t2 -> GLExpr d t3 -> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t1
x0 GLExpr d t2
y0 GLExpr d t3
z0)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
fnID (forall a. HasExprID a => a -> ExprID
getID GLExpr d t
e) (GLExpr d t1 -> GLExpr d t2 -> GLExpr d t3 -> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z] [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z0]
toGLAst e :: GLExpr d t
e@(GLFunc ExprID
fnID (GLFunc4 GLExpr d t1
-> GLExpr d t2 -> GLExpr d t3 -> GLExpr d t4 -> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t4
w GLExpr d t1
x0 GLExpr d t2
y0 GLExpr d t3
z0 GLExpr d t4
w0)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
fnID (forall a. HasExprID a => a -> ExprID
getID GLExpr d t
e) (GLExpr d t1
-> GLExpr d t2 -> GLExpr d t3 -> GLExpr d t4 -> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t4
w) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t4
w] [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t4
w0]
toGLAst e :: GLExpr d t
e@(GLFunc ExprID
fnID (GLFunc5 GLExpr d t1
-> GLExpr d t2
-> GLExpr d t3
-> GLExpr d t4
-> GLExpr d t5
-> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t4
w GLExpr d t5
u GLExpr d t1
x0 GLExpr d t2
y0 GLExpr d t3
z0 GLExpr d t4
w0 GLExpr d t5
u0)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
fnID (forall a. HasExprID a => a -> ExprID
getID GLExpr d t
e) (GLExpr d t1
-> GLExpr d t2
-> GLExpr d t3
-> GLExpr d t4
-> GLExpr d t5
-> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t4
w GLExpr d t5
u) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t4
w, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t5
u] [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t4
w0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t5
u0]
toGLAst e :: GLExpr d t
e@(GLFunc ExprID
fnID (GLFunc6 GLExpr d t1
-> GLExpr d t2
-> GLExpr d t3
-> GLExpr d t4
-> GLExpr d t5
-> GLExpr d t6
-> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t4
w GLExpr d t5
u GLExpr d t6
v GLExpr d t1
x0 GLExpr d t2
y0 GLExpr d t3
z0 GLExpr d t4
w0 GLExpr d t5
u0 GLExpr d t6
v0)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> ExprID -> GLExpr d t -> [GLAst] -> [GLAst] -> GLAst
mkGLFn ExprID
fnID (forall a. HasExprID a => a -> ExprID
getID GLExpr d t
e) (GLExpr d t1
-> GLExpr d t2
-> GLExpr d t3
-> GLExpr d t4
-> GLExpr d t5
-> GLExpr d t6
-> GLExpr d t
f GLExpr d t1
x GLExpr d t2
y GLExpr d t3
z GLExpr d t4
w GLExpr d t5
u GLExpr d t6
v) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t4
w, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t5
u, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t6
v] [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t2
y0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t3
z0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t4
w0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t5
u0, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t6
v0]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLVec2 GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLVec3 GLExpr d t1
x GLExpr d t1
y GLExpr d t1
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLVec4 GLExpr d t1
x GLExpr d t1
y GLExpr d t1
z GLExpr d t1
w)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
w]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat2x2 GLExpr d (Vec 2 t1)
x GLExpr d (Vec 2 t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat2x3 GLExpr d (Vec 2 t1)
x GLExpr d (Vec 2 t1)
y GLExpr d (Vec 2 t1)
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat2x4 GLExpr d (Vec 2 t1)
x GLExpr d (Vec 2 t1)
y GLExpr d (Vec 2 t1)
z GLExpr d (Vec 2 t1)
w)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 2 t1)
w]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat3x2 GLExpr d (Vec 3 t1)
x GLExpr d (Vec 3 t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat3x3 GLExpr d (Vec 3 t1)
x GLExpr d (Vec 3 t1)
y GLExpr d (Vec 3 t1)
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat3x4 GLExpr d (Vec 3 t1)
x GLExpr d (Vec 3 t1)
y GLExpr d (Vec 3 t1)
z GLExpr d (Vec 3 t1)
w)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 3 t1)
w]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat4x2 GLExpr d (Vec 4 t1)
x GLExpr d (Vec 4 t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat4x3 GLExpr d (Vec 4 t1)
x GLExpr d (Vec 4 t1)
y GLExpr d (Vec 4 t1)
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLMat4x4 GLExpr d (Vec 4 t1)
x GLExpr d (Vec 4 t1)
y GLExpr d (Vec 4 t1)
z GLExpr d (Vec 4 t1)
w)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
z, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec 4 t1)
w]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Pre GLExpr d t1
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (App GLExpr d (Vec n t1)
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Conc GLExpr d (Vec m t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec m t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
-- FIXME: temporary patch-up to make printGLAST work
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GLArray [GLExpr 'HostDomain t1]
_)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) []

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpCoord GLCoord m
coord GLExpr d (Vec n t)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (String
"." forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show GLCoord m
coord) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpCoordMulti GLCoordList l m
coordList GLExpr d (Vec n t1)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (String
"." forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show GLCoordList l m
coordList) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpCol GLCol m
col GLExpr d (Mat r c t1)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall a. Show a => a -> String
show GLCol m
col) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat r c t1)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpArrayElt GLExpr d [t]
arr GLExpr d Int
i)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"[]" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d [t]
arr, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Int
i]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Cast GLExpr d t1
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (MatCast GLExpr d (Mat p q t1)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e (forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e) [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p q t1)
x]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpAdd GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"+" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpSubt GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"-" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpMult GLExpr d t
x GLExpr d t
y)) = 
    let op :: String
op = case forall t (a :: * -> *). GLType t => a t -> String
showGlslType GLExpr d t
e of
            String
ty | String
"mat" forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
ty -> String
"matrixCompMult"
            String
ty | String
"dmat" forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` String
ty -> String
"matrixCompMult"
            String
_ -> String
"*"
    in forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
op [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpDiv GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"/" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpMod GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"%" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpNeg GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"-" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpLessThan GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"<" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpLessThanEqual GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"<=" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpGreaterThan GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
">" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpGreaterThanEqual GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
">=" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpEqual GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"==" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpNotEqual GLExpr d t1
x GLExpr d t1
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"!=" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpAnd GLExpr d Bool
x GLExpr d Bool
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"&&" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpOr GLExpr d Bool
x GLExpr d Bool
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"||" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpXor GLExpr d Bool
x GLExpr d Bool
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"^^" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpNot GLExpr d Bool
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"!" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpCond GLExpr d Bool
x GLExpr d t
y GLExpr d t
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"?:" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d Bool
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpCompl GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"~" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpLshift GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"<<" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpRshift GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
">>" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpBitAnd GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"&" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpBitOr GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"|" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpBitXor GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"^" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpScalarMult GLExpr d t1
x GLExpr d (Mat p q t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"*" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p q t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OpMatrixMult GLExpr d (Mat p q t1)
x GLExpr d (Mat q r t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"*" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p q t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat q r t1)
y]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Radians GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"radians" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Degrees GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"degrees" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Sin GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"sin" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Cos GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"cos" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Tan GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"tan" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Asin GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"asin" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Acos GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"acos" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Atan GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"atan" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Sinh GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"sinh" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Cosh GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"cosh" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Tanh GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"tanh" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Asinh GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"asinh" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Acosh GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"acosh" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Atanh GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"atanh" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Pow GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"pow" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Exp GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"exp" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Log GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"log" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Exp2 GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"exp2" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Log2 GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"log2" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Sqrt GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"sqrt" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Inversesqrt GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"inversesqrt" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Abs GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"abs" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Sign GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"sign" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Floor GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"floor" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Trunc GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"trunc" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Round GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"round" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (RoundEven GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"roundEven" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Ceil GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"ceil" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Fract GLExpr d t
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"fract" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Mod GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"mod" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Min GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"min" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Max GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"max" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Clamp GLExpr d t
x GLExpr d t
y GLExpr d t
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"clamp" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Mix GLExpr d t
x GLExpr d t
y GLExpr d t
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"mix" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Step GLExpr d t
x GLExpr d t
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"step" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Smoothstep GLExpr d t
x GLExpr d t
y GLExpr d t
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"smoothstep" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t
z]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Length GLExpr d (Vec n t)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"length" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Distance GLExpr d (Vec n t)
x GLExpr d (Vec n t)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"distance" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Dot GLExpr d (Vec n t)
x GLExpr d (Vec n t)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"dot" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Cross GLExpr d (Mat 3 1 t1)
x GLExpr d (Mat 3 1 t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"cross" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat 3 1 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat 3 1 t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Normalize GLExpr d (Mat n 1 t1)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"normalize" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Faceforward GLExpr d (Mat n 1 t1)
x GLExpr d (Mat n 1 t1)
y GLExpr d (Mat n 1 t1)
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"faceforward" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
z]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Reflect GLExpr d (Mat n 1 t1)
x GLExpr d (Mat n 1 t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"reflect" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Refract GLExpr d (Mat n 1 t1)
x GLExpr d (Mat n 1 t1)
y GLExpr d t1
z)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"refract" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 t1)
y, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d t1
z]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (MatrixCompMult GLExpr d (Mat p q t1)
x GLExpr d (Mat p q t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"matrixCompMult" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p q t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p q t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (OuterProduct GLExpr d (Vec p t1)
x GLExpr d (Vec q t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"outerProduct" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec p t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec q t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Transpose GLExpr d (Mat p q t1)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"transpose" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p q t1)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Determinant GLExpr d (Mat p p Float)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"determinant" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p p Float)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Inverse GLExpr d (Mat p p Float)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"inverse" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat p p Float)
x]

toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (LessThan GLExpr d (Vec n t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"lessThan" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (LessThanEqual GLExpr d (Vec n t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"lessThanEqual" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GreaterThan GLExpr d (Vec n t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"greaterThan" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (GreaterThanEqual GLExpr d (Vec n t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"greaterThanEqual" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Equal GLExpr d (Vec n t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"equal" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (NotEqual GLExpr d (Vec n t1)
x GLExpr d (Vec n t1)
y)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"notEqual" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
x, forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n t1)
y]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Any GLExpr d (Vec n Bool)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"any" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n Bool)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (All GLExpr d (Vec n Bool)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"all" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Vec n Bool)
x]
toGLAst e :: GLExpr d t
e@(GLGenExpr ExprID
id (Not GLExpr d (Mat n 1 Bool)
x)) = forall {d :: GLDomain} {t}.
(IsGLDomain d, GLType t) =>
ExprID -> GLExpr d t -> String -> [GLAst] -> GLAst
mkGLExpr ExprID
id GLExpr d t
e String
"not" [forall (d :: GLDomain) t. IsGLDomain d => GLExpr d t -> GLAst
toGLAst GLExpr d (Mat n 1 Bool)
x]