module LambdaCube.Core.Type where
import Data.Typeable
import Data.Int
import Data.Word
data V2 a = V2 !a !a deriving (Read,Eq,Ord,Show,Typeable)
data V3 a = V3 !a !a !a deriving (Read,Eq,Ord,Show,Typeable)
data V4 a = V4 !a !a !a !a deriving (Read,Eq,Ord,Show,Typeable)
type M22F = V2 V2F
type M23F = V3 V2F
type M24F = V4 V2F
type M32F = V2 V3F
type M33F = V3 V3F
type M34F = V4 V3F
type M42F = V2 V4F
type M43F = V3 V4F
type M44F = V4 V4F
type V2F = V2 Float
type V3F = V3 Float
type V4F = V4 Float
type V2I = V2 Int32
type V3I = V3 Int32
type V4I = V4 Int32
type V2U = V2 Word32
type V3U = V3 Word32
type V4U = V4 Word32
type V2B = V2 Bool
type V3B = V3 Bool
type V4B = V4 Bool
data Value
= VBool !Bool
| VV2B !V2B
| VV3B !V3B
| VV4B !V4B
| VWord !Word32
| VV2U !V2U
| VV3U !V3U
| VV4U !V4U
| VInt !Int32
| VV2I !V2I
| VV3I !V3I
| VV4I !V4I
| VFloat !Float
| VV2F !V2F
| VV3F !V3F
| VV4F !V4F
| VM22F !M22F
| VM23F !M23F
| VM24F !M24F
| VM32F !M32F
| VM33F !M33F
| VM34F !M34F
| VM42F !M42F
| VM43F !M43F
| VM44F !M44F
deriving (Read,Typeable,Show,Eq,Ord)
data Ty
= Single !InputType
| Tuple [Ty]
| Unknown String
deriving (Read,Typeable,Show,Eq,Ord)
tySize :: Ty -> Int
tySize (Tuple a) = sum $ map tySize a
tySize _ = 1
data InputType
= Bool
| V2B
| V3B
| V4B
| Word
| V2U
| V3U
| V4U
| Int
| V2I
| V3I
| V4I
| Float
| V2F
| V3F
| V4F
| M22F
| M23F
| M24F
| M32F
| M33F
| M34F
| M42F
| M43F
| M44F
| STexture1D
| STexture2D
| STextureCube
| STexture1DArray
| STexture2DArray
| STexture2DRect
| FTexture1D
| FTexture2D
| FTexture3D
| FTextureCube
| FTexture1DArray
| FTexture2DArray
| FTexture2DMS
| FTexture2DMSArray
| FTextureBuffer
| FTexture2DRect
| ITexture1D
| ITexture2D
| ITexture3D
| ITextureCube
| ITexture1DArray
| ITexture2DArray
| ITexture2DMS
| ITexture2DMSArray
| ITextureBuffer
| ITexture2DRect
| UTexture1D
| UTexture2D
| UTexture3D
| UTextureCube
| UTexture1DArray
| UTexture2DArray
| UTexture2DMS
| UTexture2DMSArray
| UTextureBuffer
| UTexture2DRect
deriving (Read,Typeable,Show,Eq,Ord)
data PointSpriteCoordOrigin = LowerLeft | UpperLeft deriving (Read,Typeable,Show, Eq, Ord)
data PointSize = PointSize Float | ProgramPointSize deriving (Read,Typeable,Eq,Ord,Show)
data PolygonOffset = NoOffset | Offset Float Float deriving (Read,Typeable,Eq,Ord,Show)
data FrontFace = CCW | CW deriving (Read,Typeable,Eq,Ord,Show)
data PolygonMode = PolygonPoint PointSize | PolygonLine Float | PolygonFill deriving (Read,Typeable,Eq,Ord,Show)
data ProvokingVertex = FirstVertex | LastVertex deriving (Read,Typeable,Eq,Ord,Bounded,Enum,Show)
data CullMode = CullNone | CullFront FrontFace | CullBack FrontFace deriving (Read,Typeable,Eq,Ord,Show)
type DepthFunction = ComparisonFunction
data ComparisonFunction = Never | Less | Equal | Lequal | Greater | Notequal | Gequal | Always deriving (Read,Typeable, Eq, Ord, Show )
data StencilOperation = OpZero | OpKeep | OpReplace | OpIncr | OpIncrWrap | OpDecr | OpDecrWrap | OpInvert deriving (Read,Typeable, Eq, Ord, Show )
data BlendEquation = FuncAdd | FuncSubtract | FuncReverseSubtract | Min | Max deriving (Read,Typeable, Eq, Ord, Show )
data BlendingFactor = Zero | One | SrcColor | OneMinusSrcColor | DstColor | OneMinusDstColor | SrcAlpha | OneMinusSrcAlpha | DstAlpha | OneMinusDstAlpha | ConstantColor | OneMinusConstantColor | ConstantAlpha | OneMinusConstantAlpha | SrcAlphaSaturate deriving (Read,Typeable, Eq, Ord, Show )
data LogicOperation = Clear | And | AndReverse | Copy | AndInverted | Noop | Xor | Or | Nor | Equiv | Invert | OrReverse | CopyInverted | OrInverted | Nand | Set deriving (Read,Typeable, Eq, Ord, Show )
data StencilOps
= StencilOps
{ frontStencilOp :: StencilOperation
, backStencilOp :: StencilOperation
} deriving (Read,Typeable,Eq,Ord,Show)
data StencilTests = StencilTests StencilTest StencilTest deriving (Read,Typeable,Eq,Ord,Show)
data StencilTest
= StencilTest
{ stencilComparision :: ComparisonFunction
, stencilReference :: Int32
, stencilMask :: Word32
} deriving (Read,Typeable,Eq,Ord,Show)
data Filter = PointFilter | LinearFilter deriving (Read,Typeable,Show,Eq,Ord)
data EdgeMode = Repeat | MirroredRepeat | ClampToEdge | ClampToBorder deriving (Read,Typeable,Show,Eq,Ord)
data FetchPrimitive
= Points
| Lines
| Triangles
| LinesAdjacency
| TrianglesAdjacency
deriving (Read,Show,Eq,Ord)
data OutputPrimitive
= TrianglesOutput
| LinesOutput
| PointsOutput
deriving (Read,Show,Eq,Ord)
data ColorArity = Red | RG | RGB | RGBA deriving (Read,Show,Eq,Ord)
data Blending
= NoBlending
| BlendLogicOp LogicOperation
| Blend (BlendEquation, BlendEquation)
((BlendingFactor, BlendingFactor), (BlendingFactor, BlendingFactor))
V4F
deriving (Read,Show,Eq,Ord)
data RasterContext
= PointCtx PointSize Float PointSpriteCoordOrigin
| LineCtx Float ProvokingVertex
| TriangleCtx CullMode PolygonMode PolygonOffset ProvokingVertex
deriving (Read,Show, Eq, Ord)
data FragmentOperation
= DepthOp DepthFunction Bool
| StencilOp StencilTests StencilOps StencilOps
| ColorOp Blending Value
deriving (Read,Show, Eq, Ord)
data Image
= DepthImage Int Float
| StencilImage Int Int32
| ColorImage Int Value
| UnclearedImage Int
deriving (Read,Show, Eq, Ord)
data TextureDataType
= FloatT ColorArity
| IntT ColorArity
| WordT ColorArity
| ShadowT
deriving (Read,Show, Eq, Ord)
data TextureType
= Texture1D TextureDataType Int
| Texture2D TextureDataType Int
| Texture3D TextureDataType
| TextureCube TextureDataType
| TextureRect TextureDataType
| Texture2DMS TextureDataType Int
| TextureBuffer TextureDataType
deriving (Read,Show, Eq, Ord)
data MipMap
= Mip Int Int
| NoMip
| AutoMip Int Int
deriving (Read,Show,Eq,Ord)