module Graphics.LambdaCube.Compositor where
import Data.IntMap (IntMap)
import Data.Word
import Graphics.LambdaCube.Common
import Graphics.LambdaCube.GpuProgram
import Graphics.LambdaCube.Material
import Graphics.LambdaCube.PixelFormat
import Graphics.LambdaCube.RenderSystem
import Graphics.LambdaCube.Texture
import Graphics.LambdaCube.Types
data PassType
= PT_CLEAR
| PT_STENCIL
| PT_RENDERSCENE
| PT_RENDERQUAD
data InputMode
= IM_NONE
| IM_PREVIOUS
deriving Eq
data (Texture t, LinkedGpuProgram lp) => Compositor t lp
= Compositor
{ cmpName :: String
, cmpTechniques :: [CompositionTechnique t lp]
, cmpSupportedTechniques :: Maybe [CompositionTechnique t lp]
}
data Texture t => TextureDefinition t
= TextureDefinition
{ tdName :: String
, tdWidth :: Maybe Int
, tdHeight :: Maybe Int
, tdWidthFactor :: FloatType
, tdHeightFactor :: FloatType
, tdFormatList :: [PixelFormat]
, tdFsaa :: Bool
, tdHwGammaWrite :: Bool
, tdShared :: Bool
, tdTexture :: Maybe t
}
data InputTex
= InputTex
{ itName :: String
, itMrtIndex :: Int
}
data (Texture t, LinkedGpuProgram lp) => CompositionTechnique t lp
= CompositionTechnique
{ ctTextureDefinitions :: [TextureDefinition t]
, ctTargetPasses :: [CompositionTargetPass t lp]
, ctOutputTarget :: CompositionTargetPass t lp
, ctSchemeName :: String
}
data (Texture t, LinkedGpuProgram lp) => CompositionTargetPass t lp
= CompositionTargetPass
{ ctpInputMode :: InputMode
, ctpOutputName :: String
, ctpOutput :: Maybe (TextureDefinition t)
, ctpPasses :: [CompositionPass t lp]
, ctpOnlyInitial :: Bool
, ctpVisibilityMask :: Word32
, ctpLodBias :: FloatType
, ctpMaterialScheme :: String
, ctpShadowsEnabled :: Bool
}
data (Texture t, LinkedGpuProgram lp) => CompositionPass t lp
= CompositionPass
{ cpType :: PassType
, cpIdentifier :: Word32
, cpMaterialName :: String
, cpMaterial :: Maybe (Material t lp)
, cpFirstRenderQueue :: Int
, cpLastRenderQueue :: Int
, cpClearBuffers :: (Bool,Bool,Bool)
, cpClearColour :: ColourValue
, cpClearDepth :: FloatType
, cpClearStencil :: Word32
, cpInputs :: IntMap InputTex
, cpStencilCheck :: Bool
, cpStencilFunc :: CompareFunction
, cpStencilRefValue :: Word32
, cpStencilMask :: Word32
, cpStencilFailOp :: StencilOperation
, cpStencilDepthFailOp :: StencilOperation
, cpStencilPassOp :: StencilOperation
, cpStencilTwoSidedOperation :: Bool
, cpQuadCornerModified :: Bool
, cpQuadLeft :: FloatType
, cpQuadTop :: FloatType
, cpQuadRight :: FloatType
, cpQuadBottom :: FloatType
, cpQuadFarCorners :: Bool
, cpQuadFarCornersViewSpace :: Bool
}