lambdacube-engine-0.1.1: Graphics/LambdaCube/Material.hs
module Graphics.LambdaCube.Material where
import Graphics.LambdaCube.Types
import Graphics.LambdaCube.Technique
import Graphics.LambdaCube.Texture
import Graphics.LambdaCube.GpuProgram
{-
data Shader
= Shader
{ shName :: String
, shSource :: String
, shAttach :: [String]
-- , shParameter :: [ShaderParameterValue]
-- , shObject :: GL.Shader s => Maybe s
}
data Program
= Program
{ prVertShaderName :: Maybe String
, prFragShaderName :: Maybe String
--prParameters :: [ShaderParameter],
-- , prObject :: Maybe GL.Program
}
-}
---------------------------------------
-- NEW code
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
{-
typedef map<unsigned short, Technique*>::type LodTechniques;
typedef map<unsigned short, LodTechniques*>::type BestTechniquesBySchemeList;
/** Map of scheme -> list of LOD techniques.
Current scheme is set on MaterialManager,
and can be set per Viewport for auto activation.
*/
BestTechniquesBySchemeList mBestTechniquesBySchemeList;
-}
, mtUserLodValues :: [FloatType] -- ^ distance list used to specify LOD
, mtLodValues :: [FloatType] -- ^ distance list used to specify LOD
-- const LodStrategy *mLodStrategy;
, mtReceiveShadows :: Bool
, mtTransparencyCastsShadows :: Bool
-- /// Does this material require compilation?
-- bool mCompilationRequired;
, mtUnsupportedReasons :: String -- ^ Text description of why any techniques are not supported
}