OGRE  1.9.0
OgreShaderSubRenderState.h
Go to the documentation of this file.
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4(Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org
6
7Copyright (c) 2000-2014 Torus Knot Software Ltd
8Permission is hereby granted, free of charge, to any person obtaining a copy
9of this software and associated documentation files (the "Software"), to deal
10in the Software without restriction, including without limitation the rights
11to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12copies of the Software, and to permit persons to whom the Software is
13furnished to do so, subject to the following conditions:
14
15The above copyright notice and this permission notice shall be included in
16all copies or substantial portions of the Software.
17
18THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24THE SOFTWARE.
25-----------------------------------------------------------------------------
26*/
27#ifndef _ShaderSubRenderState_
28#define _ShaderSubRenderState_
29
31#include "OgreGpuProgram.h"
32#include "OgreSceneManager.h"
34#include "OgreScriptCompiler.h"
36
37
38namespace Ogre {
39namespace RTShader {
40
49
50
57{
58
59// Interface.
60public:
61
64
66 virtual ~SubRenderState();
67
68
73 virtual const String& getType() const = 0;
74
75
81 virtual int getExecutionOrder() const = 0;
82
83
87 virtual void copyFrom(const SubRenderState& rhs) = 0;
88
92 SubRenderState& operator= (const SubRenderState& rhs);
93
100 virtual bool createCpuSubPrograms(ProgramSet* programSet);
101
111 virtual void updateGpuProgramsParams(Renderable* rend, Pass* pass, const AutoParamDataSource* source, const LightList* pLightList) { }
112
120 virtual bool preAddToRenderState(const RenderState* renderState, Pass* srcPass, Pass* dstPass) { return true; }
121
126
131
132// Protected methods
133protected:
134
139 virtual bool resolveParameters(ProgramSet* programSet);
140
145 virtual bool resolveDependencies(ProgramSet* programSet);
146
151 virtual bool addFunctionInvocations(ProgramSet* programSet);
152
153// Attributes.
154private:
155 // The accessor of this instance.
157 // The accessor of the source instance which used as base to create this instance.
159
160};
161
163typedef SubRenderStateList::iterator SubRenderStateListIterator;
164typedef SubRenderStateList::const_iterator SubRenderStateListConstIterator;
165
167typedef SubRenderStateSet::iterator SubRenderStateSetIterator;
168typedef SubRenderStateSet::const_iterator SubRenderStateSetConstIterator;
169
170
178{
179public:
182 void addSubRenderStateInstance(SubRenderState* subRenderState) const
183 {
184 mSubRenderStateInstancesSet.insert(subRenderState);
185 }
186
190 {
191 SubRenderStateSetIterator itFind = mSubRenderStateInstancesSet.find(subRenderState);
192
193 if (itFind != mSubRenderStateInstancesSet.end())
194 {
195 mSubRenderStateInstancesSet.erase(itFind);
196 }
197 }
198
200 SubRenderStateSet& getSubRenderStateInstanceSet() { return mSubRenderStateInstancesSet; }
201
203 const SubRenderStateSet& getSubRenderStateInstanceSet() const { return mSubRenderStateInstancesSet; }
204
205protected:
208 SubRenderStateAccessor(const SubRenderState* templateSubRenderState) : mTemplateSubRenderState(templateSubRenderState) {}
209
210
211protected:
214
215private:
216 friend class SubRenderState;
217
218};
219
220
233{
234
235public:
238
244 virtual const String& getType() const = 0;
245
249
258 virtual SubRenderState* createInstance(ScriptCompiler* compiler, PropertyAbstractNode* prop, Pass* pass, SGScriptTranslator* translator) { return NULL; }
259
268 virtual SubRenderState* createInstance(ScriptCompiler* compiler, PropertyAbstractNode* prop, TextureUnitState* texState, SGScriptTranslator* translator) { return NULL; }
269
275
279 virtual void destroyInstance(SubRenderState* subRenderState);
280
283 virtual void destroyAllInstances();
284
294 virtual void writeInstance(MaterialSerializer* ser, SubRenderState* subRenderState, Pass* srcPass, Pass* dstPass) {}
295
305 virtual void writeInstance(MaterialSerializer* ser, SubRenderState* subRenderState, const TextureUnitState* srcTextureUnit, const TextureUnitState* dstTextureUnit) {}
306protected:
312
313// Attributes.
314protected:
315 // List of all sub render states instances this factory created.
317};
318
322}
323}
324
325#endif
326
#define _OgreRTSSExport
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
This utility class is used to hold the information used to generate the matrices and other informatio...
Class for serializing Materials to / from a .material script.
Class defining a single pass of a Technique (of a Material), i.e.
Definition: OgrePass.h:81
This abstract node represents a script property.
Container class for shader based programs.
This is a container class for sub render state class.
This class responsible for translating core features of the RT Shader System for Ogre material script...
This class uses as accessor from a template SubRenderState to all of its instances that created based...
void addSubRenderStateInstance(SubRenderState *subRenderState) const
Add SubRenderState instance to this accessor.
SubRenderStateSet & getSubRenderStateInstanceSet()
Return a set of all instances of the template SubRenderState.
const SubRenderStateSet & getSubRenderStateInstanceSet() const
Return a set of all instances of the template SubRenderState.
SubRenderStateAccessor(const SubRenderState *templateSubRenderState)
Construct SubRenderState accessor based on the given template SubRenderState.
void removeSubRenderStateInstance(SubRenderState *subRenderState) const
Remove SubRenderState instance to this accessor.
Abstract factory interface for creating SubRenderState implementation instances.
virtual void writeInstance(MaterialSerializer *ser, SubRenderState *subRenderState, const TextureUnitState *srcTextureUnit, const TextureUnitState *dstTextureUnit)
Write the given sub-render state instance using the material serializer.
virtual void destroyInstance(SubRenderState *subRenderState)
Destroy the given instance.
virtual SubRenderState * createOrRetrieveInstance(SGScriptTranslator *translator)
Retrieve the previous instance the SRS in the script translator or create a new instance if not found...
virtual SubRenderState * createInstance(ScriptCompiler *compiler, PropertyAbstractNode *prop, TextureUnitState *texState, SGScriptTranslator *translator)
Create an instance of the SubRenderState based on script properties.
virtual void destroyAllInstances()
Destroy all the instances that created by this factory.
virtual const String & getType() const =0
Get the type of this sub render state factory.
virtual SubRenderState * createInstance(ScriptCompiler *compiler, PropertyAbstractNode *prop, Pass *pass, SGScriptTranslator *translator)
Create an instance of the SubRenderState based on script properties.
virtual void writeInstance(MaterialSerializer *ser, SubRenderState *subRenderState, Pass *srcPass, Pass *dstPass)
Write the given sub-render state instance using the material serializer.
virtual SubRenderState * createInstance()
Create an instance of the SubRenderState sub class it suppose to create.
virtual SubRenderState * createInstanceImpl()=0
Create instance implementation method.
This class is the base interface of sub part from a shader based rendering pipeline.
SubRenderStateAccessorPtr mOtherAccessor
virtual bool resolveDependencies(ProgramSet *programSet)
Resolve dependencies that this sub render state requires.
virtual const String & getType() const =0
Get the type of this sub render state.
virtual bool createCpuSubPrograms(ProgramSet *programSet)
Create sub programs that represents this sub render state as part of a program set.
virtual void updateGpuProgramsParams(Renderable *rend, Pass *pass, const AutoParamDataSource *source, const LightList *pLightList)
Update GPU programs parameters before a rendering operation occurs.
SubRenderState()
Class default constructor.
virtual void copyFrom(const SubRenderState &rhs)=0
Copy details from a given sub render state to this one.
virtual bool addFunctionInvocations(ProgramSet *programSet)
Add function invocation that this sub render state requires.
SubRenderStateAccessorPtr getAccessor() const
Return the accessor object to this sub render state.
SubRenderStateAccessorPtr getAccessor()
Return the accessor object to this sub render state.
virtual bool resolveParameters(ProgramSet *programSet)
Resolve parameters that this sub render state requires.
virtual int getExecutionOrder() const =0
Get the execution order of this sub render state.
virtual ~SubRenderState()
Class destructor.
SubRenderStateAccessorPtr mThisAccessor
virtual bool preAddToRenderState(const RenderState *renderState, Pass *srcPass, Pass *dstPass)
Called before adding this sub render state to the given render state.
Abstract class defining the interface all renderable objects must implement.
This is the main class for the compiler.
Reference-counted shared pointer, used for objects where implicit destruction is required.
Class representing the state of a single texture unit during a Pass of a Technique,...
SubRenderStateSet::const_iterator SubRenderStateSetConstIterator
vector< SubRenderState * >::type SubRenderStateList
SubRenderStateList::const_iterator SubRenderStateListConstIterator
set< SubRenderState * >::type SubRenderStateSet
SubRenderStateList::iterator SubRenderStateListIterator
SubRenderStateSet::iterator SubRenderStateSetIterator
SharedPtr< SubRenderStateAccessor > SubRenderStateAccessorPtr
_StringBase String
std::set< T, P, A > type
std::vector< T, A > type