lambdacube-engine-0.1.1: Graphics/LambdaCube/Pass.hs
module Graphics.LambdaCube.Pass where
import Graphics.LambdaCube.Types
import Graphics.LambdaCube.Common
import Graphics.LambdaCube.BlendMode
import Graphics.LambdaCube.Light
import Graphics.LambdaCube.Texture
import Graphics.LambdaCube.TextureUnitState
import Graphics.LambdaCube.GpuProgram
import Graphics.LambdaCube.GpuProgramUsage
-- | Categorisation of passes for the purpose of additive lighting
data IlluminationStage
= IS_AMBIENT -- ^ Part of the rendering which occurs without any kind of direct lighting
| IS_PER_LIGHT -- ^ Part of the rendering which occurs per light
| IS_DECAL -- ^ Post-lighting rendering
| IS_UNKNOWN -- ^ Not determined
deriving Eq
data (Texture t, LinkedGpuProgram lp) => Pass t lp
= Pass
{ psName :: String -- ^ optional name for the pass
-- Colour properties, only applicable in fixed-function passes
, psAmbient :: ColourValue
, psDiffuse :: ColourValue
, psSpecular :: ColourValue
, psEmissive :: ColourValue
, psShininess :: FloatType
, psTracking :: TrackVertexColourType
-- Blending factors
, psSourceBlendFactor :: SceneBlendFactor
, psDestBlendFactor :: SceneBlendFactor
, psSourceBlendFactorAlpha :: SceneBlendFactor
, psDestBlendFactorAlpha :: SceneBlendFactor
, psSeparateBlend :: Bool -- ^ Used to determine if separate alpha blending should be used for color and alpha channels
-- Blending operations
, psBlendOperation :: SceneBlendOperation
, psAlphaBlendOperation :: SceneBlendOperation
, psSeparateBlendOperation :: Bool -- ^ Determines if we should use separate blending operations for color and alpha channels
-- Depth buffer settings
, psDepthCheck :: Bool
, psDepthWrite :: Bool
, psDepthFunc :: CompareFunction
, psDepthBiasConstant :: FloatType
, psDepthBiasSlopeScale :: FloatType
, psDepthBiasPerIteration :: FloatType
-- Colour buffer settings
, psColourWrite :: Bool
-- Alpha reject settings
, psAlphaRejectFunc :: CompareFunction
, psAlphaRejectVal :: Int
, psAlphaToCoverageEnabled :: Bool
, psTransparentSorting :: Bool -- ^ Transparent depth sorting
, psTransparentSortingForced :: Bool -- ^ Transparent depth sorting forced
-- Culling mode
, psCullMode :: CullingMode
, psManualCullMode :: ManualCullingMode
, psLightingEnabled :: Bool -- ^ Lighting enabled?
, psMaxSimultaneousLights :: Int -- ^ Max simultaneous lights
, psStartLight :: Int -- ^ Starting light index
, psLightsPerIteration :: Maybe Int -- ^ Run this pass once per light? Iterate per how many lights?
, psOnlyLightType :: Maybe LightTypes -- ^ Should it only be run for a certain light type?
, psShadeOptions :: ShadeOptions -- ^ Shading options
, psPolygonMode :: PolygonMode -- ^ Polygon mode
-- Normalisation
, psNormaliseNormals :: Bool
, psPolygonModeOverrideable :: Bool
-- Fog
, psFogOverride :: Bool
, psFogMode :: FogMode
, psFogColour :: ColourValue
, psFogStart :: FloatType
, psFogEnd :: FloatType
, psFogDensity :: FloatType
, psTextureUnitStates :: [TextureUnitState t]
, psVertexProgramUsage :: Maybe GpuProgramUsage -- ^ Vertex program details
-- , psShadowCasterVertexProgramUsage :: GpuProgramUsage -- ^ Vertex program details
-- , psShadowReceiverVertexProgramUsage :: GpuProgramUsage -- ^ Vertex program details
, psFragmentProgramUsage :: Maybe GpuProgramUsage -- ^ Fragment program details
-- , psShadowReceiverFragmentProgramUsage :: GpuProgramUsage -- ^ Fragment program details
, psGeometryProgramUsage :: Maybe GpuProgramUsage -- ^ Geometry program details
-- , psQueuedForDeletion :: Bool -- ^ Is this pass queued for deletion?
, psLinkedGpuProgram :: Maybe lp
, psPassIterationCount :: Int -- ^ number of pass iterations to perform
, psPointSize :: FloatType -- ^ point size, applies when not using per-vertex point size
, psPointMinSize :: FloatType
, psPointMaxSize :: FloatType
, psPointSpritesEnabled :: Bool
, psPointAttenuationEnabled :: Bool
, psPointAttenuationCoeffs :: FloatType3 -- ^ constant, linear, quadratic coeffs
{-
// TU Content type lookups
typedef vector<unsigned short>::type ContentTypeLookup;
mutable ContentTypeLookup mShadowContentTypeLookup;
mutable bool mContentTypeLookupBuilt;
-}
, psLightScissoring :: Bool -- ^ Scissoring for the light?
, psLightClipPlanes :: Bool -- ^ User clip planes for light?
, psIlluminationStage :: IlluminationStage -- ^ Illumination stage?
}
deriving Eq