# 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-2009 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     SubRenderStateList  mSubRenderStateList;            // The sub render states list.
    00118     int                 mLightCount[3];                 // The light count per light type definition.
    00119     bool                mLightCountAutoUpdate;          // True if light count was explicitly set.
    00120
    00121 private:
    00122     friend class ProgramManager;
    00123     friend class FFPRenderStateBuilder;
    00124 };
    00125
    00126
    00127 typedef vector<RenderState*>::type              RenderStateList;
    00128 typedef RenderStateList::iterator               RenderStateIterator;
    00129 typedef RenderStateList::const_iterator         RenderStateConstIterator;
    00130
    00131
    00136 class TargetRenderState : public RenderState
    00137 {
    00138
    00139 // Interface.
    00140 public:
    00141
    00143     TargetRenderState();
    00144
    00146     virtual ~TargetRenderState();
    00147
    00154     void        link                (const RenderState& other, Pass* srcPass, Pass* dstPass);
    00155
    00162     void    updateGpuProgramsParams (Renderable* rend, Pass* pass, const AutoParamDataSource* source, const LightList* pLightList);
    00163
    00164 // Protected methods
    00165 protected:
    00166
    00168     void            sortSubRenderStates     ();
    00169
    00171     static int      sSubRenderStateCompare  (const void * p0, const void *p1);
    00172
    00173
    00176     bool        createCpuPrograms       ();
    00177
    00180     ProgramSet* createProgramSet            ();
    00181
    00182     /* Destroy the program set of this render state. */
    00183     void        destroyProgramSet           ();
    00184
    00187     ProgramSet* getProgramSet               () { return mProgramSet; }
    00188
    00192     void        addSubRenderStateInstance           (SubRenderState* subRenderState);
    00193
    00197     void        removeSubRenderStateInstance        (SubRenderState* subRenderState);
    00198
    00199
    00200 // Attributes.
    00201 protected:
    00202     bool                mSubRenderStateSortValid;       // Tells if the list of the sub render states is sorted.
    00203     ProgramSet*         mProgramSet;                    // The program set of this RenderState.
    00204
    00205
    00206 private:
    00207     friend class ProgramManager;
    00208     friend class FFPRenderStateBuilder;
    00209 };
    00210
    00211
    00215 }
    00216 }
    00217
    00218 #endif
    00219

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Wed Nov 3 2010 19:24:52