packages feed

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
    }