Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

# 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://ogre.sourceforge.net/
    00006
    00007 Copyright © 2000-2003 The OGRE Team
    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 */
    00025 #ifndef __Pass_H__
    00026 #define __Pass_H__
    00027
    00028 #include "OgrePrerequisites.h"
    00029 #include "OgreGpuProgram.h"
    00030 #include "OgreColourValue.h"
    00031 #include "OgreBlendMode.h"
    00032 #include "OgreCommon.h"
    00033 #include "OgreLight.h"
    00034
    00035 namespace Ogre {
    00055     class _OgreExport Pass
    00056     {
    00057     protected:
    00058         Technique* mParent;
    00059         unsigned short mIndex; // pass index
    00060         unsigned long mHash; // pass hash
    00061         //-------------------------------------------------------------------------
    00062         // Colour properties, only applicable in fixed-function passes
    00063         ColourValue mAmbient;
    00064         ColourValue mDiffuse;
    00065         ColourValue mSpecular;
    00066         ColourValue mEmissive;
    00067         Real mShininess;
    00068         //-------------------------------------------------------------------------
    00069
    00070         //-------------------------------------------------------------------------
    00071         // Blending factors
    00072         SceneBlendFactor mSourceBlendFactor;
    00073         SceneBlendFactor mDestBlendFactor;
    00074         //-------------------------------------------------------------------------
    00075
    00076         //-------------------------------------------------------------------------
    00077         // Depth buffer settings
    00078         bool mDepthCheck;
    00079         bool mDepthWrite;
    00080         CompareFunction mDepthFunc;
    00081         ushort mDepthBias;
    00082
    00083         // Colour buffer settings
    00084         bool mColourWrite;
    00085
    00086         //-------------------------------------------------------------------------
    00087
    00088         //-------------------------------------------------------------------------
    00089         // Culling mode
    00090         CullingMode mCullMode;
    00091         ManualCullingMode mManualCullMode;
    00092         //-------------------------------------------------------------------------
    00093
    00095         bool mLightingEnabled;
    00097         unsigned short mMaxSimultaneousLights;
    00099         bool mRunOncePerLight;
    00100         // Should it only be run for a certain light type?
    00101         bool mRunOnlyForOneLightType;
    00102         Light::LightTypes mOnlyLightType;
    00103
    00105         ShadeOptions mShadeOptions;
    00106
    00107         //-------------------------------------------------------------------------
    00108         // Fog
    00109         bool mFogOverride;
    00110         FogMode mFogMode;
    00111         ColourValue mFogColour;
    00112         Real mFogStart;
    00113         Real mFogEnd;
    00114         Real mFogDensity;
    00115         //-------------------------------------------------------------------------
    00116
    00118         typedef std::vector<TextureUnitState*> TextureUnitStates;
    00119         TextureUnitStates mTextureUnitStates;
    00120
    00121         // Vertex program details
    00122         GpuProgramUsage *mVertexProgramUsage;
    00123         // Vertex program details
    00124         GpuProgramUsage *mShadowCasterVertexProgramUsage;
    00125         // Vertex program details
    00126         GpuProgramUsage *mShadowReceiverVertexProgramUsage;
    00127         // Fragment program details
    00128         GpuProgramUsage *mFragmentProgramUsage;
    00129         // Is this pass queued for deletion?
    00130         bool mQueuedForDeletion;
    00131     public:
    00132         typedef std::set<Pass*> PassSet;
    00133     protected:
    00135         static PassSet msDirtyHashList;
    00137         static PassSet msPassGraveyard;
    00138     public:
    00140         Pass(Technique* parent, unsigned short index);
    00142         Pass(Technique* parent, unsigned short index, const Pass& oth );
    00144         Pass& operator=(const Pass& oth);
    00145         ~Pass();
    00146
    00148         bool isProgrammable(void) const { return mVertexProgramUsage || mFragmentProgramUsage; }
    00149
    00151         bool hasVertexProgram(void) const { return mVertexProgramUsage != NULL; }
    00152
    00154         bool hasFragmentProgram(void) const { return mFragmentProgramUsage != NULL; }
    00155
    00157         unsigned short getIndex(void) const { return mIndex; }
    00169         void setAmbient(Real red, Real green, Real blue);
    00170
    00183         void setAmbient(const ColourValue& ambient);
    00184
    00195         void setDiffuse(Real red, Real green, Real blue, Real alpha);
    00196
    00207         void setDiffuse(const ColourValue& diffuse);
    00208
    00221         void setSpecular(Real red, Real green, Real blue, Real alpha);
    00222
    00235         void setSpecular(const ColourValue& specular);
    00236
    00242         void setShininess(Real val);
    00243
    00253         void setSelfIllumination(Real red, Real green, Real blue);
    00254
    00264         void setSelfIllumination(const ColourValue& selfIllum);
    00265
    00268         const ColourValue& getAmbient(void) const;
    00269
    00272         const ColourValue& getDiffuse(void) const;
    00273
    00276         const ColourValue& getSpecular(void) const;
    00277
    00280         const ColourValue& getSelfIllumination(void) const;
    00281
    00284         Real getShininess(void) const;
    00285
    00290         TextureUnitState* createTextureUnitState(void);
    00301         TextureUnitState* createTextureUnitState( const String& textureName, unsigned short texCoordSet = 0);
    00303         void addTextureUnitState(TextureUnitState* state);
    00306         TextureUnitState* getTextureUnitState(unsigned short index);
    00307
    00308         typedef VectorIterator<TextureUnitStates> TextureUnitStateIterator;
    00310         TextureUnitStateIterator getTextureUnitStateIterator(void);
    00311
    00316         void removeTextureUnitState(unsigned short index);
    00317
    00320         void removeAllTextureUnitStates(void);
    00321
    00324         size_t getNumTextureUnitStates(void) const
    00325         {
    00326             return mTextureUnitStates.size();
    00327         }
    00328
    00345         void setSceneBlending( const SceneBlendType sbt );
    00346
    00369         void setSceneBlending( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
    00370
    00373         SceneBlendFactor getSourceBlendFactor() const;
    00374
    00377         SceneBlendFactor getDestBlendFactor() const;
    00378
    00380         bool isTransparent(void) const;
    00381
    00393         void setDepthCheckEnabled(bool enabled);
    00394
    00399         bool getDepthCheckEnabled(void) const;
    00400
    00411         void setDepthWriteEnabled(bool enabled);
    00412
    00417         bool getDepthWriteEnabled(void) const;
    00418
    00426         void setDepthFunction( CompareFunction func );
    00431         CompareFunction getDepthFunction(void) const;
    00432
    00443         void setColourWriteEnabled(bool enabled);
    00445         bool getColourWriteEnabled(void) const;
    00446
    00460         void setCullingMode( CullingMode mode );
    00461
    00464         CullingMode getCullingMode(void) const;
    00465
    00479         void setManualCullingMode( ManualCullingMode mode );
    00480
    00485         ManualCullingMode getManualCullingMode(void) const;
    00486
    00495         void setLightingEnabled(bool enabled);
    00496
    00499         bool getLightingEnabled(void) const;
    00500
    00509         void setMaxSimultaneousLights(unsigned short maxLights);
    00511         unsigned short getMaxSimultaneousLights(void) const;
    00512
    00517         void setShadingMode( ShadeOptions mode );
    00518
    00521         ShadeOptions getShadingMode(void) const;
    00522
    00523
    00553         void setFog(
    00554             bool overrideScene,
    00555             FogMode mode = FOG_NONE,
    00556             const ColourValue& colour = ColourValue::White,
    00557             Real expDensity = 0.001, Real linearStart = 0.0, Real linearEnd = 1.0 );
    00558
    00561         bool getFogOverride(void) const;
    00562
    00567         FogMode getFogMode(void) const;
    00568
    00571         const ColourValue& getFogColour(void) const;
    00572
    00577         Real getFogStart(void) const;
    00578
    00583         Real getFogEnd(void) const;
    00584
    00589         Real getFogDensity(void) const;
    00590
    00603         void setDepthBias(ushort bias);
    00604
    00606         ushort getDepthBias(void) const;
    00607
    00643         void setRunOncePerLight(bool enabled,
    00644             bool onlyForOneLightType = true, Light::LightTypes lightType = Light::LT_POINT);
    00645
    00647         bool getRunOncePerLight(void) const { return mRunOncePerLight; }
    00649         bool getRunOnlyForOneLightType(void) const { return mRunOnlyForOneLightType; }
    00652         Light::LightTypes getOnlyLightType() const { return mOnlyLightType; }
    00653
    00655         Technique* getParent(void) { return mParent; }
    00656
    00673         void setVertexProgram(const String& name, bool resetParams = true);
    00680         void setVertexProgramParameters(GpuProgramParametersSharedPtr params);
    00682         const String& getVertexProgramName(void) const;
    00684         GpuProgramParametersSharedPtr getVertexProgramParameters(void);
    00686         GpuProgram* getVertexProgram(void);
    00687
    00688
    00718         void setShadowCasterVertexProgram(const String& name);
    00725         void setShadowCasterVertexProgramParameters(GpuProgramParametersSharedPtr params);
    00727         const String& getShadowCasterVertexProgramName(void) const;
    00729         GpuProgramParametersSharedPtr getShadowCasterVertexProgramParameters(void);
    00732         GpuProgram* getShadowCasterVertexProgram(void);
    00733
    00759         void setShadowReceiverVertexProgram(const String& name);
    00766         void setShadowReceiverVertexProgramParameters(GpuProgramParametersSharedPtr params);
    00768         const String& getShadowReceiverVertexProgramName(void) const;
    00770         GpuProgramParametersSharedPtr getShadowReceiverVertexProgramParameters(void);
    00773         GpuProgram* getShadowReceiverVertexProgram(void);
    00774
    00775
    00792         void setFragmentProgram(const String& name, bool resetParams = true);
    00797         void setFragmentProgramParameters(GpuProgramParametersSharedPtr params);
    00799         const String& getFragmentProgramName(void) const;
    00801         GpuProgramParametersSharedPtr getFragmentProgramParameters(void);
    00803         GpuProgram* getFragmentProgram(void);
    00804
    00816         Pass* _split(unsigned short numUnits);
    00817
    00819         void _load(void);
    00821         void _unload(void);
    00822         // Is this loaded?
    00823         bool isLoaded(void) const;
    00824
    00831         unsigned long getHash(void) const;
    00833         void _dirtyHash(void);
    00840         void _recalculateHash(void);
    00842         void _notifyNeedsRecompile(void);
    00843
    00845         void _updateAutoParamsNoLights(const AutoParamDataSource& source);
    00847         void _updateAutoParamsLightsOnly(const AutoParamDataSource& source);
    00848
    00857         void setTextureFiltering(TextureFilterOptions filterType);
    00866         void setTextureAnisotropy(unsigned int maxAniso);
    00870         static const PassSet& getDirtyHashList(void)
    00871         { return msDirtyHashList; }
    00874         static const PassSet& getPassGraveyard(void)
    00875         { return msPassGraveyard; }
    00883         static void clearDirtyHashList(void) { msDirtyHashList.clear(); }
    00884
    00886         static void processPendingPassUpdates(void);
    00887
    00889         void queueForDeletion(void);
    00890
    00893         bool isAmbientOnly(void) const;
    00894
    00895
    00896     };
    00897
    00898     enum IlluminationStage
    00899     {
    00901         IS_AMBIENT,
    00903         IS_PER_LIGHT,
    00905         IS_DECAL
    00906     };
    00916     struct IlluminationPass
    00917     {
    00918         IlluminationStage stage;
    00920         Pass* pass;
    00922         bool destroyOnShutdown;
    00924         Pass* originalPass;
    00925     };
    00926
    00927     typedef std::vector<IlluminationPass*> IlluminationPassList;
    00928
    00929
    00930 }
    00931
    00932 #endif

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:38 2004