OGRE  1.8
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
OgreShaderFunctionAtom.h
Go to the documentation of this file.
1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4 (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org
6 
7 Copyright (c) 2000-2013 Torus Knot Software Ltd
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14 
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25 -----------------------------------------------------------------------------
26 */
27 #ifndef _ShaderFunctionAtom_
28 #define _ShaderFunctionAtom_
29 
31 #include "OgreGpuProgram.h"
32 #include "OgreSingleton.h"
33 #include "OgreShaderParameter.h"
34 #include "OgreStringVector.h"
35 
36 namespace Ogre {
37 namespace RTShader {
38 
49 {
50 // Interface.
51 public:
53  FunctionAtom();
54 
56  virtual ~FunctionAtom() {}
57 
59  int getGroupExecutionOrder() const;
60 
62  int getInternalExecutionOrder() const;
63 
65  virtual void writeSourceCode(std::ostream& os, const String& targetLanguage) const = 0;
66 
68  virtual const String& getFunctionAtomType() = 0;
69 
70 // Attributes.
71 protected:
72  // The owner group execution order.
74  // The execution order within the group.
76 };
77 
81 {
82 public:
83 
84  // InOut semantic
86  {
92  OPS_INOUT
93  };
94 
95  // Used field mask
96  enum OpMask
97  {
98  OPM_ALL = 1 << 0,
99  OPM_X = 1 << 1,
100  OPM_Y = 1 << 2,
101  OPM_Z = 1 << 3,
102  OPM_W = 1 << 4
103  };
104 
110  Operand(ParameterPtr parameter, Operand::OpSemantic opSemantic, int opMask = Operand::OPM_ALL, ushort indirectionLevel = 0);
111 
113  Operand(const Operand& rhs);
114 
118  Operand& operator= (const Operand & rhs);
119 
121  ~Operand();
122 
124  const ParameterPtr& getParameter() const { return mParameter; }
125 
127  bool hasFreeFields() const { return ((mMask & ~OPM_ALL) && ((mMask & ~OPM_X) || (mMask & ~OPM_Y) || (mMask & ~OPM_Z) || (mMask & ~OPM_W))); }
128 
130  int getMask() const { return mMask; }
131 
133  OpSemantic getSemantic() const { return mSemantic; }
134 
140  ushort getIndirectionLevel() const { return mIndirectionLevel; }
141 
143  String toString() const;
144 
146  static String getMaskAsString(int mask);
147 
149  static int getFloatCount(int mask);
150 
152  static GpuConstantType getGpuConstantType(int mask);
153 
154 protected:
160  int mMask;
163 };
164 
168 {
169  // Interface.
170 public:
172 
179  FunctionInvocation(const String& functionName, int groupOrder, int internalOrder, String returnType = "void");
180 
183 
187  virtual void writeSourceCode(std::ostream& os, const String& targetLanguage) const;
188 
192  virtual const String& getFunctionAtomType() { return Type; }
193 
195  OperandVector& getOperandList() { return mOperands; }
196 
203  void pushOperand(ParameterPtr parameter, Operand::OpSemantic opSemantic, int opMask = Operand::OPM_ALL, int indirectionLevel = 0);
204 
206  const String& getFunctionName() const { return mFunctionName; }
207 
209  const String& getReturnType() const { return mReturnType; }
210 
212  bool operator == ( const FunctionInvocation& rhs ) const;
213 
215  bool operator != ( const FunctionInvocation& rhs ) const;
216 
218  bool operator < ( const FunctionInvocation& rhs ) const;
219 
224  {
225  bool operator()(FunctionInvocation const& lhs, FunctionInvocation const& rhs) const;
226  };
227 
232  {
233  bool operator()(FunctionInvocation const& lhs, FunctionInvocation const& rhs) const;
234  };
235 
237  static String Type;
238 
239  // Attributes.
240 protected:
244 };
245 
247 typedef FunctionAtomInstanceList::iterator FunctionAtomInstanceIterator;
248 typedef FunctionAtomInstanceList::const_iterator FunctionAtomInstanceConstIterator;
249 
253 }
254 }
255 
256 #endif
static String Type
The type of this class.
The parameter is a output parameter.
FunctionAtomInstanceList::iterator FunctionAtomInstanceIterator
ushort mIndirectionLevel
The level of indirection.
bool operator<(SharedPtr< T > const &a, SharedPtr< U > const &b)
const String & getReturnType() const
Return the return type.
FunctionAtomInstanceList::const_iterator FunctionAtomInstanceConstIterator
int getMask() const
Returns the mask bitfield.
bool hasFreeFields() const
Returns true if not all fields used.
The parameter is a input parameter.
ushort getIndirectionLevel() const
Returns the level of indirection.
#define _OgreRTSSExport
const ParameterPtr & getParameter() const
Returns the parameter object as weak reference.
virtual ~FunctionAtom()
Class default destructor.
GpuConstantType
Enumeration of the types of constant we may encounter in programs.
OpSemantic mSemantic
Tells if the parameter is of type input,output or both.
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
Comparator function to be used for comparisons.
OperandVector & getOperandList()
Get a list of parameters this function invocation will use in the function call as arguments...
unsigned short ushort
vector< FunctionAtom * >::type FunctionAtomInstanceList
A class that represents an atomic code section of shader based program function.
const String & getFunctionName() const
Return the function name.
A class that represents a function operand (its the combination of a parameter the in/out semantic an...
ParameterPtr mParameter
The parameter being carried by the operand.
OpSemantic getSemantic() const
Returns the operand semantic (do we read/write or both with the parameter).
_StringBase String
A class that represents function invocation code from shader based program function.
int mMask
Which part of the parameter should be passed (x,y,z,w)
bool operator==(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator, (ISO C++)
virtual const String & getFunctionAtomType()
bool operator!=(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator, (ISO C++)