123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _MATERIALS_PROCESSEDFFMATERIAL_H_
- #define _MATERIALS_PROCESSEDFFMATERIAL_H_
- #ifndef _MATERIALS_PROCESSEDMATERIAL_H_
- #include "materials/processedMaterial.h"
- #endif
- class LightInfo;
- struct GFXShaderConstDesc;
- /// Fixed function rendering. Does not load or use shaders. Does not rely on GFXMaterialFeatureData.
- /// Tries very hard to not rely on anything possibly related to shaders.
- ///
- /// @note Does not always succeed.
- class ProcessedFFMaterial : public ProcessedMaterial
- {
- typedef ProcessedMaterial Parent;
- public:
- ProcessedFFMaterial();
- ProcessedFFMaterial(Material &mat, const bool isLightingMaterial = false);
- ~ProcessedFFMaterial();
- /// @name Render state setting
- ///
- /// @{
- /// Sets necessary textures and texture ops for rendering
- virtual void setTextureStages(SceneRenderState *, const SceneData &sgData, U32 pass );
- virtual MaterialParameters* allocMaterialParameters();
- virtual MaterialParameterHandle* getMaterialParameterHandle(const String& name);
- virtual MaterialParameters* getDefaultMaterialParameters();
-
- virtual void setTransforms(const MatrixSet &matrixSet, SceneRenderState *state, const U32 pass);
- virtual void setSceneInfo(SceneRenderState *, const SceneData& sgData, U32 pass);
- /// @}
- virtual bool init( const FeatureSet &features,
- const GFXVertexFormat *vertexFormat,
- const MatFeaturesDelegate &featuresDelegate );
- /// Sets up the given pass
- ///
- /// @returns false if the pass could not be set up
- virtual bool setupPass(SceneRenderState *, const SceneData& sgData, U32 pass);
- /// Returns the number of stages we're using (not to be confused with the number of passes)
- virtual U32 getNumStages();
- protected:
- MaterialParameterHandle* mDefaultHandle;
- MaterialParameters* mDefaultParameters;
- struct FixedFuncFeatureData
- {
- enum
- {
- DiffuseMap,
- LightMap,
- ToneMap,
- NumFeatures
- };
- bool features[NumFeatures];
- };
- bool mIsLightingMaterial;
- Vector<GFXShaderConstDesc> mParamDesc;
- /// @name Internal functions
- ///
- /// @{
- /// Adds a pass for the given stage
- virtual void _addPass(U32 stageNum, FixedFuncFeatureData& featData);
- /// Chooses a blend op for the pass during pass creation
- virtual void _setPassBlendOp();
- /// Creates all necessary passes for the given stage
- void _createPasses( U32 stageNum, const FeatureSet &features );
- /// Determine what features we need
- void _determineFeatures( U32 stageNum,
- FixedFuncFeatureData &featData,
- const FeatureSet &features);
- /// Sets light info for the first light
- virtual void _setPrimaryLightInfo(const MatrixF &objTrans, LightInfo* light, U32 pass);
- /// Sets light info for the second light
- virtual void _setSecondaryLightInfo(const MatrixF &objTrans, LightInfo* light);
- /// Does the base render state block setting, normally per pass
- virtual void _initPassStateBlock( RenderPassData *rpd, GFXStateBlockDesc &result );
- /// @}
- void _construct();
- };
- #endif
|