OgrePass.h

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004 (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org
00006 
00007 Copyright (c) 2000-2006 Torus Knot Software Ltd
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 
00024 You may alternatively use this source under the terms of a specific version of
00025 the OGRE Unrestricted License provided you have obtained such a license from
00026 Torus Knot Software Ltd.
00027 -----------------------------------------------------------------------------
00028 */
00029 #ifndef __Pass_H__
00030 #define __Pass_H__
00031 
00032 #include "OgrePrerequisites.h"
00033 #include "OgreGpuProgram.h"
00034 #include "OgreColourValue.h"
00035 #include "OgreBlendMode.h"
00036 #include "OgreCommon.h"
00037 #include "OgreLight.h"
00038 #include "OgreTextureUnitState.h"
00039 
00040 namespace Ogre {
00060     class _OgreExport Pass
00061     {
00062     public:
00073         struct HashFunc
00074         {
00075             virtual uint32 operator()(const Pass* p) const = 0;
00077             virtual ~HashFunc() {}
00078         };
00079     protected:
00080         Technique* mParent;
00081         unsigned short mIndex; // pass index
00082         String mName; // optional name for the pass
00083         uint32 mHash; // pass hash
00084         //-------------------------------------------------------------------------
00085         // Colour properties, only applicable in fixed-function passes
00086         ColourValue mAmbient;
00087         ColourValue mDiffuse;
00088         ColourValue mSpecular;
00089         ColourValue mEmissive;
00090         Real mShininess;
00091         TrackVertexColourType mTracking;
00092         //-------------------------------------------------------------------------
00093 
00094         //-------------------------------------------------------------------------
00095         // Blending factors
00096         SceneBlendFactor mSourceBlendFactor;
00097         SceneBlendFactor mDestBlendFactor;
00098         //-------------------------------------------------------------------------
00099 
00100         //-------------------------------------------------------------------------
00101         // Depth buffer settings
00102         bool mDepthCheck;
00103         bool mDepthWrite;
00104         CompareFunction mDepthFunc;
00105         float mDepthBiasConstant;
00106         float mDepthBiasSlopeScale;
00107 
00108         // Colour buffer settings
00109         bool mColourWrite;
00110 
00111         // Alpha reject settings
00112         CompareFunction mAlphaRejectFunc;
00113         unsigned char mAlphaRejectVal;
00114         //-------------------------------------------------------------------------
00115 
00116         //-------------------------------------------------------------------------
00117         // Culling mode
00118         CullingMode mCullMode;
00119         ManualCullingMode mManualCullMode;
00120         //-------------------------------------------------------------------------
00121 
00123         bool mLightingEnabled;
00125         unsigned short mMaxSimultaneousLights;
00127         unsigned short mStartLight;
00129         bool mIteratePerLight;
00131         unsigned short mLightsPerIteration;
00132         // Should it only be run for a certain light type?
00133         bool mRunOnlyForOneLightType;
00134         Light::LightTypes mOnlyLightType;
00135 
00137         ShadeOptions mShadeOptions;
00139         PolygonMode mPolygonMode;
00140 
00141         //-------------------------------------------------------------------------
00142         // Fog
00143         bool mFogOverride;
00144         FogMode mFogMode;
00145         ColourValue mFogColour;
00146         Real mFogStart;
00147         Real mFogEnd;
00148         Real mFogDensity;
00149         //-------------------------------------------------------------------------
00150 
00152         typedef std::vector<TextureUnitState*> TextureUnitStates;
00153         TextureUnitStates mTextureUnitStates;
00154 
00155         // Vertex program details
00156         GpuProgramUsage *mVertexProgramUsage;
00157         // Vertex program details
00158         GpuProgramUsage *mShadowCasterVertexProgramUsage;
00159         // Vertex program details
00160         GpuProgramUsage *mShadowReceiverVertexProgramUsage;
00161         // Fragment program details
00162         GpuProgramUsage *mFragmentProgramUsage;
00163         // Fragment program details
00164         GpuProgramUsage *mShadowReceiverFragmentProgramUsage;
00165         // Is this pass queued for deletion?
00166         bool mQueuedForDeletion;
00167         // number of pass iterations to perform
00168         size_t mPassIterationCount;
00169         // point size, applies when not using per-vertex point size
00170         Real mPointSize;
00171         Real mPointMinSize;
00172         Real mPointMaxSize;
00173         bool mPointSpritesEnabled;
00174         bool mPointAttenuationEnabled;
00175         // constant, linear, quadratic coeffs
00176         Real mPointAttenuationCoeffs[3];
00177         // TU Content type lookups
00178         typedef std::vector<unsigned short> ContentTypeLookup;
00179         mutable ContentTypeLookup mShadowContentTypeLookup;
00180         mutable bool mContentTypeLookupBuilt;
00181 
00182     public:
00183         typedef std::set<Pass*> PassSet;
00184     protected:
00186         static PassSet msDirtyHashList;
00188         static PassSet msPassGraveyard;
00190         static HashFunc* msHashFunc;
00191     public:
00192         OGRE_STATIC_MUTEX(msDirtyHashListMutex);
00193         OGRE_STATIC_MUTEX(msPassGraveyardMutex);
00195         Pass(Technique* parent, unsigned short index);
00197         Pass(Technique* parent, unsigned short index, const Pass& oth );
00199         Pass& operator=(const Pass& oth);
00200         ~Pass();
00201 
00203         bool isProgrammable(void) const { return mVertexProgramUsage || mFragmentProgramUsage; }
00205         bool hasVertexProgram(void) const { return mVertexProgramUsage != NULL; }
00207         bool hasFragmentProgram(void) const { return mFragmentProgramUsage != NULL; }
00209         bool hasShadowCasterVertexProgram(void) const { return mShadowCasterVertexProgramUsage != NULL; }
00211         bool hasShadowReceiverVertexProgram(void) const { return mShadowReceiverVertexProgramUsage != NULL; }
00213         bool hasShadowReceiverFragmentProgram(void) const { return mShadowReceiverFragmentProgramUsage != NULL; }
00214 
00215 
00217         unsigned short getIndex(void) const { return mIndex; }
00218         /* Set the name of the pass
00219         @remarks
00220         The name of the pass is optional.  Its usefull in material scripts where a material could inherit
00221         from another material and only want to modify a particalar pass.
00222         */
00223         void setName(const String& name);
00225         const String& getName(void) const { return mName; }
00226 
00238         void setAmbient(Real red, Real green, Real blue);
00239 
00252         void setAmbient(const ColourValue& ambient);
00253 
00264         void setDiffuse(Real red, Real green, Real blue, Real alpha);
00265 
00276         void setDiffuse(const ColourValue& diffuse);
00277 
00290         void setSpecular(Real red, Real green, Real blue, Real alpha);
00291 
00304         void setSpecular(const ColourValue& specular);
00305 
00311         void setShininess(Real val);
00312 
00322         void setSelfIllumination(Real red, Real green, Real blue);
00323 
00333         void setSelfIllumination(const ColourValue& selfIllum);
00334 
00337         void setVertexColourTracking(TrackVertexColourType tracking);
00338 
00344         Real getPointSize(void) const;
00345 
00361         void setPointSize(Real ps);
00362 
00368         void setPointSpritesEnabled(bool enabled);
00369 
00373         bool getPointSpritesEnabled(void) const;
00374 
00391         void setPointAttenuation(bool enabled,
00392             Real constant = 0.0f, Real linear = 1.0f, Real quadratic = 0.0f);
00393 
00395         bool isPointAttenuationEnabled(void) const;
00396 
00398         Real getPointAttenuationConstant(void) const;
00400         Real getPointAttenuationLinear(void) const;
00402         Real getPointAttenuationQuadratic(void) const;
00403 
00405         void setPointMinSize(Real min);
00407         Real getPointMinSize(void) const;
00411         void setPointMaxSize(Real max);
00415         Real getPointMaxSize(void) const;
00416 
00419         const ColourValue& getAmbient(void) const;
00420 
00423         const ColourValue& getDiffuse(void) const;
00424 
00427         const ColourValue& getSpecular(void) const;
00428 
00431         const ColourValue& getSelfIllumination(void) const;
00432 
00435         Real getShininess(void) const;
00436 
00439         TrackVertexColourType getVertexColourTracking(void) const;
00440 
00445         TextureUnitState* createTextureUnitState(void);
00456         TextureUnitState* createTextureUnitState( const String& textureName, unsigned short texCoordSet = 0);
00462         void addTextureUnitState(TextureUnitState* state);
00465         TextureUnitState* getTextureUnitState(unsigned short index);
00469         TextureUnitState* getTextureUnitState(const String& name);
00472         const TextureUnitState* getTextureUnitState(unsigned short index) const;
00476         const TextureUnitState* getTextureUnitState(const String& name) const;
00477 
00484         unsigned short getTextureUnitStateIndex(const TextureUnitState* state) const;
00485 
00486         typedef VectorIterator<TextureUnitStates> TextureUnitStateIterator;
00488         TextureUnitStateIterator getTextureUnitStateIterator(void);
00489 
00490         typedef ConstVectorIterator<TextureUnitStates> ConstTextureUnitStateIterator;
00492         ConstTextureUnitStateIterator getTextureUnitStateIterator(void) const;
00493 
00498         void removeTextureUnitState(unsigned short index);
00499 
00502         void removeAllTextureUnitStates(void);
00503 
00506         unsigned short getNumTextureUnitStates(void) const
00507         {
00508             return static_cast<unsigned short>(mTextureUnitStates.size());
00509         }
00510 
00527         void setSceneBlending( const SceneBlendType sbt );
00528 
00551         void setSceneBlending( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
00552 
00555         SceneBlendFactor getSourceBlendFactor() const;
00556 
00559         SceneBlendFactor getDestBlendFactor() const;
00560 
00562         bool isTransparent(void) const;
00563 
00575         void setDepthCheckEnabled(bool enabled);
00576 
00581         bool getDepthCheckEnabled(void) const;
00582 
00593         void setDepthWriteEnabled(bool enabled);
00594 
00599         bool getDepthWriteEnabled(void) const;
00600 
00608         void setDepthFunction( CompareFunction func );
00613         CompareFunction getDepthFunction(void) const;
00614 
00625         void setColourWriteEnabled(bool enabled);
00627         bool getColourWriteEnabled(void) const;
00628 
00642         void setCullingMode( CullingMode mode );
00643 
00646         CullingMode getCullingMode(void) const;
00647 
00661         void setManualCullingMode( ManualCullingMode mode );
00662 
00667         ManualCullingMode getManualCullingMode(void) const;
00668 
00677         void setLightingEnabled(bool enabled);
00678 
00681         bool getLightingEnabled(void) const;
00682 
00691         void setMaxSimultaneousLights(unsigned short maxLights);
00693         unsigned short getMaxSimultaneousLights(void) const;
00694 
00705         void setStartLight(unsigned short startLight);
00707         unsigned short getStartLight(void) const;
00708 
00713         void setShadingMode( ShadeOptions mode );
00714 
00717         ShadeOptions getShadingMode(void) const;
00718 
00723         void setPolygonMode( PolygonMode mode );
00724 
00727         PolygonMode getPolygonMode(void) const;
00728 
00758         void setFog(
00759             bool overrideScene,
00760             FogMode mode = FOG_NONE,
00761             const ColourValue& colour = ColourValue::White,
00762             Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0 );
00763 
00766         bool getFogOverride(void) const;
00767 
00772         FogMode getFogMode(void) const;
00773 
00776         const ColourValue& getFogColour(void) const;
00777 
00782         Real getFogStart(void) const;
00783 
00788         Real getFogEnd(void) const;
00789 
00794         Real getFogDensity(void) const;
00795 
00815         void setDepthBias(float constantBias, float slopeScaleBias = 0.0f);
00816 
00818         float getDepthBiasConstant(void) const;
00820         float getDepthBiasSlopeScale(void) const;
00821 
00830         void setAlphaRejectSettings(CompareFunction func, unsigned char value);
00831 
00834         void setAlphaRejectFunction(CompareFunction func);
00835 
00838         void setAlphaRejectValue(unsigned char val);
00839 
00842         CompareFunction getAlphaRejectFunction(void) const { return mAlphaRejectFunc; }
00843 
00846         unsigned char getAlphaRejectValue(void) const { return mAlphaRejectVal; }
00889         void setIteratePerLight(bool enabled,
00890             bool onlyForOneLightType = true, Light::LightTypes lightType = Light::LT_POINT);
00891 
00893         bool getIteratePerLight(void) const { return mIteratePerLight; }
00895         bool getRunOnlyForOneLightType(void) const { return mRunOnlyForOneLightType; }
00898         Light::LightTypes getOnlyLightType() const { return mOnlyLightType; }
00899 
00909         void setLightCountPerIteration(unsigned short c);
00913         unsigned short getLightCountPerIteration(void) const;
00914         
00916         Technique* getParent(void) const { return mParent; }
00917 
00919         const String& getResourceGroup(void) const;
00920 
00937         void setVertexProgram(const String& name, bool resetParams = true);
00944         void setVertexProgramParameters(GpuProgramParametersSharedPtr params);
00946         const String& getVertexProgramName(void) const;
00948         GpuProgramParametersSharedPtr getVertexProgramParameters(void) const;
00950         const GpuProgramPtr& getVertexProgram(void) const;
00951 
00952 
00982         void setShadowCasterVertexProgram(const String& name);
00989         void setShadowCasterVertexProgramParameters(GpuProgramParametersSharedPtr params);
00991         const String& getShadowCasterVertexProgramName(void) const;
00993         GpuProgramParametersSharedPtr getShadowCasterVertexProgramParameters(void) const;
00996         const GpuProgramPtr& getShadowCasterVertexProgram(void) const;
00997 
01023         void setShadowReceiverVertexProgram(const String& name);
01030         void setShadowReceiverVertexProgramParameters(GpuProgramParametersSharedPtr params);
01031 
01052         void setShadowReceiverFragmentProgram(const String& name);
01059         void setShadowReceiverFragmentProgramParameters(GpuProgramParametersSharedPtr params);
01060 
01062         const String& getShadowReceiverVertexProgramName(void) const;
01064         GpuProgramParametersSharedPtr getShadowReceiverVertexProgramParameters(void) const;
01067         const GpuProgramPtr& getShadowReceiverVertexProgram(void) const;
01068 
01070         const String& getShadowReceiverFragmentProgramName(void) const;
01072         GpuProgramParametersSharedPtr getShadowReceiverFragmentProgramParameters(void) const;
01075         const GpuProgramPtr& getShadowReceiverFragmentProgram(void) const;
01076 
01093         void setFragmentProgram(const String& name, bool resetParams = true);
01098         void setFragmentProgramParameters(GpuProgramParametersSharedPtr params);
01100         const String& getFragmentProgramName(void) const;
01102         GpuProgramParametersSharedPtr getFragmentProgramParameters(void) const;
01104         const GpuProgramPtr& getFragmentProgram(void) const;
01105 
01117         Pass* _split(unsigned short numUnits);
01118 
01120         void _notifyIndex(unsigned short index);
01121 
01123         void _load(void);
01125         void _unload(void);
01126         // Is this loaded?
01127         bool isLoaded(void) const;
01128 
01135         uint32 getHash(void) const { return mHash; }
01137         void _dirtyHash(void);
01144         void _recalculateHash(void);
01146         void _notifyNeedsRecompile(void);
01147 
01149         void _updateAutoParamsNoLights(const AutoParamDataSource& source) const;
01151         void _updateAutoParamsLightsOnly(const AutoParamDataSource& source) const;
01152 
01159         unsigned short _getTextureUnitWithContentTypeIndex(
01160             TextureUnitState::ContentType contentType, unsigned short index) const;
01161 
01170         void setTextureFiltering(TextureFilterOptions filterType);
01179         void setTextureAnisotropy(unsigned int maxAniso);
01183         static const PassSet& getDirtyHashList(void)
01184         { return msDirtyHashList; }
01187         static const PassSet& getPassGraveyard(void)
01188         { return msPassGraveyard; }
01196         static void clearDirtyHashList(void);
01197 
01199         static void processPendingPassUpdates(void);
01200 
01202         void queueForDeletion(void);
01203 
01206         bool isAmbientOnly(void) const;
01207 
01221         void setPassIterationCount(const size_t count) { mPassIterationCount = count; }
01222 
01225         size_t getPassIterationCount(void) const { return mPassIterationCount; }
01226 
01238         bool applyTextureAliases(const AliasTextureNamePairList& aliasList, const bool apply = true) const;
01239 
01240 
01244         enum BuiltinHashFunction
01245         {
01247             MIN_TEXTURE_CHANGE,
01252             MIN_GPU_PROGRAM_CHANGE
01253         };
01266         static void setHashFunction(BuiltinHashFunction builtin);
01267 
01279         static void setHashFunction(HashFunc* hashFunc) { msHashFunc = hashFunc; }
01280 
01283         static HashFunc* getHashFunction(void) { return msHashFunc; }
01284         
01285     };
01286 
01287     enum IlluminationStage
01288     {
01290         IS_AMBIENT,
01292         IS_PER_LIGHT,
01294         IS_DECAL
01295     };
01305     struct IlluminationPass
01306     {
01307         IlluminationStage stage;
01309         Pass* pass;
01311         bool destroyOnShutdown;
01313         Pass* originalPass;
01314     };
01315 
01316     typedef std::vector<IlluminationPass*> IlluminationPassList;
01317 
01318 
01319 }
01320 
01321 #endif

Copyright © 2000-2005 by The OGRE Team
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sat May 10 16:25:01 2008