OgreShaderRenderState.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-2012 Torus Knot Software Ltd
    00008 Permission is hereby granted, free of charge, to any person obtaining a copy
    00009 of this software and associated documentation files (the "Software"), to deal
    00010 in the Software without restriction, including without limitation the rights
    00011 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    00012 copies of the Software, and to permit persons to whom the Software is
    00013 furnished to do so, subject to the following conditions:
    00014
    00015 The above copyright notice and this permission notice shall be included in
    00016 all copies or substantial portions of the Software.
    00017
    00018 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    00019 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00020 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    00021 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00022 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    00023 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    00024 THE SOFTWARE.
    00025 -----------------------------------------------------------------------------
    00026 */
    00027 #ifndef _ShaderRenderState_
    00028 #define _ShaderRenderState_
    00029
    00030 #include "OgreShaderPrerequisites.h"
    00031 #include "OgreShaderSubRenderState.h"
    00032 #include "OgreSharedPtr.h"
    00033
    00034 namespace Ogre {
    00035 namespace RTShader {
    00036
    00050 class _OgreRTSSExport RenderState : public RTShaderSystemAlloc
    00051 {
    00052
    00053     // Interface.
    00054 public:
    00055
    00057     RenderState();
    00058
    00060     virtual ~RenderState();
    00061
    00063     void reset();
    00064
    00068     void addTemplateSubRenderState(SubRenderState* subRenderState);
    00069
    00073     void removeTemplateSubRenderState(SubRenderState* subRenderState);
    00074
    00076     const SubRenderStateList& getTemplateSubRenderStateList() const { return mSubRenderStateList; }
    00077
    00086     void setLightCount(const int lightCount[3]);
    00087
    00096     void getLightCount(int lightCount[3]) const;
    00097
    00104     void setLightCountAutoUpdate(bool autoUpdate) { mLightCountAutoUpdate = autoUpdate; }
    00105
    00110     bool getLightCountAutoUpdate() const { return mLightCountAutoUpdate; }
    00111
    00112
    00113
    00114
    00115     // Attributes.
    00116 protected:
    00117     // The sub render states list.
    00118     SubRenderStateList mSubRenderStateList;
    00119     // The light count per light type definition.
    00120     int mLightCount[3];
    00121     // True if light count was explicitly set.
    00122     bool mLightCountAutoUpdate;
    00123
    00124 private:
    00125     friend class ProgramManager;
    00126     friend class FFPRenderStateBuilder;
    00127 };
    00128
    00129
    00130 typedef vector<RenderState*>::type              RenderStateList;
    00131 typedef RenderStateList::iterator               RenderStateIterator;
    00132 typedef RenderStateList::const_iterator         RenderStateConstIterator;
    00133
    00134
    00139 class TargetRenderState : public RenderState
    00140 {
    00141
    00142 // Interface.
    00143 public:
    00144
    00146     TargetRenderState();
    00147
    00149     virtual ~TargetRenderState();
    00150
    00157     void link(const RenderState& other, Pass* srcPass, Pass* dstPass);
    00158
    00165     void updateGpuProgramsParams(Renderable* rend, Pass* pass, const AutoParamDataSource* source, const LightList* pLightList);
    00166
    00167 // Protected methods
    00168 protected:
    00169
    00171     void sortSubRenderStates();
    00172
    00174     static int sSubRenderStateCompare(const void * p0, const void *p1);
    00175
    00176
    00179     bool createCpuPrograms();
    00180
    00183     ProgramSet* createProgramSet();
    00184
    00185     /* Destroy the program set of this render state. */
    00186     void destroyProgramSet();
    00187
    00190     ProgramSet* getProgramSet() { return mProgramSet; }
    00191
    00195     void addSubRenderStateInstance(SubRenderState* subRenderState);
    00196
    00200     void removeSubRenderStateInstance(SubRenderState* subRenderState);
    00201
    00202
    00203 // Attributes.
    00204 protected:
    00205     // Tells if the list of the sub render states is sorted.
    00206     bool mSubRenderStateSortValid;
    00207     // The program set of this RenderState.
    00208     ProgramSet* mProgramSet;
    00209
    00210
    00211 private:
    00212     friend class ProgramManager;
    00213     friend class FFPRenderStateBuilder;
    00214 };
    00215
    00216
    00220 }
    00221 }
    00222
    00223 #endif
    00224

Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sun Sep 2 2012 07:27:24