module Graphics.LambdaCube.Material where

import Graphics.LambdaCube.GpuProgram
import Graphics.LambdaCube.Technique
import Graphics.LambdaCube.Texture
import Graphics.LambdaCube.Types

data (Texture t, LinkedGpuProgram lp) => Material t lp
    = Material
    { mtName                     :: String
    , mtTechniques               :: [Technique t lp] -- ^ All techniques, supported and unsupported
    , mtSupportedTechniques      :: Maybe [Technique t lp] -- ^ Supported techniques of any sort
    , mtUserLodValues            :: [FloatType] -- ^ distance list used to specify LOD
    , mtLodValues                :: [FloatType] -- ^ distance list used to specify LOD
    , mtReceiveShadows           :: Bool
    , mtTransparencyCastsShadows :: Bool
    , mtUnsupportedReasons       :: String -- ^ Text description of why any techniques are not supported
    }