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 = 0x0001,
99  OPM_X = 0x0002,
100  OPM_Y = 0x0004,
101  OPM_Z = 0x0008,
102  OPM_W = 0x0010,
103  OPM_XY = OPM_X | OPM_Y,
104  OPM_XZ = OPM_X | OPM_Z,
105  OPM_XW = OPM_X | OPM_W,
106  OPM_YZ = OPM_Y | OPM_Z,
107  OPM_YW = OPM_Y | OPM_W,
108  OPM_ZW = OPM_Z | OPM_W,
109  OPM_XYZ = OPM_X | OPM_Y | OPM_Z,
110  OPM_XYW = OPM_X | OPM_Y | OPM_W,
111  OPM_XZW = OPM_X | OPM_Z | OPM_W,
112  OPM_YZW = OPM_Y | OPM_Z | OPM_W,
113  OPM_XYZW = OPM_X | OPM_Y | OPM_Z | OPM_W
114  };
115 
121  Operand(ParameterPtr parameter, Operand::OpSemantic opSemantic, int opMask = Operand::OPM_ALL, ushort indirectionLevel = 0);
122 
124  Operand(const Operand& rhs);
125 
129  Operand& operator= (const Operand & rhs);
130 
132  ~Operand();
133 
135  const ParameterPtr& getParameter() const { return mParameter; }
136 
138  bool hasFreeFields() const { return ((mMask & ~OPM_ALL) && ((mMask & ~OPM_X) || (mMask & ~OPM_Y) || (mMask & ~OPM_Z) || (mMask & ~OPM_W))); }
139 
141  int getMask() const { return mMask; }
142 
144  OpSemantic getSemantic() const { return mSemantic; }
145 
151  ushort getIndirectionLevel() const { return mIndirectionLevel; }
152 
154  String toString() const;
155 
157  static String getMaskAsString(int mask);
158 
160  static int getFloatCount(int mask);
161 
163  static GpuConstantType getGpuConstantType(int mask);
164 
165 protected:
171  int mMask;
174 };
175 
179 {
180  // Interface.
181 public:
183 
190  FunctionInvocation(const String& functionName, int groupOrder, int internalOrder, String returnType = "void");
191 
194 
198  virtual void writeSourceCode(std::ostream& os, const String& targetLanguage) const;
199 
203  virtual const String& getFunctionAtomType() { return Type; }
204 
206  OperandVector& getOperandList() { return mOperands; }
207 
214  void pushOperand(ParameterPtr parameter, Operand::OpSemantic opSemantic, int opMask = Operand::OPM_ALL, int indirectionLevel = 0);
215 
217  const String& getFunctionName() const { return mFunctionName; }
218 
220  const String& getReturnType() const { return mReturnType; }
221 
223  bool operator == ( const FunctionInvocation& rhs ) const;
224 
226  bool operator != ( const FunctionInvocation& rhs ) const;
227 
229  bool operator < ( const FunctionInvocation& rhs ) const;
230 
235  {
236  bool operator()(FunctionInvocation const& lhs, FunctionInvocation const& rhs) const;
237  };
238 
243  {
244  bool operator()(FunctionInvocation const& lhs, FunctionInvocation const& rhs) const;
245  };
246 
248  static String Type;
249 
250  // Attributes.
251 protected:
255 };
256 
258 typedef FunctionAtomInstanceList::iterator FunctionAtomInstanceIterator;
259 typedef FunctionAtomInstanceList::const_iterator FunctionAtomInstanceConstIterator;
260 
264 }
265 }
266 
267 #endif
Ogre::RTShader::FunctionInvocation::FunctionInvocationLessThan
Comparator function to be used for sorting.
Definition: OgreShaderFunctionAtom.h:234
Ogre::RTShader::FunctionInvocation::FunctionInvocationCompare
Comparator function to be used for comparisons.
Definition: OgreShaderFunctionAtom.h:242
Ogre::RTShader::Operand::OpSemantic
OpSemantic
Definition: OgreShaderFunctionAtom.h:85
Ogre::AllocatedObject
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
Definition: OgreMemoryAllocatedObject.h:58
Ogre
Definition: OgreAndroidLogListener.h:34
Ogre::RTShader::FunctionInvocation::getFunctionAtomType
virtual const String & getFunctionAtomType()
Definition: OgreShaderFunctionAtom.h:203
OgreSingleton.h
Ogre::ushort
unsigned short ushort
Definition: OgrePrerequisites.h:113
Ogre::RTShader::FunctionInvocation::OperandVector
vector< Operand >::type OperandVector
Definition: OgreShaderFunctionAtom.h:182
Ogre::RTShader::FunctionInvocation::getFunctionName
const String & getFunctionName() const
Return the function name.
Definition: OgreShaderFunctionAtom.h:217
Ogre::RTShader::FunctionAtom::~FunctionAtom
virtual ~FunctionAtom()
Class default destructor.
Definition: OgreShaderFunctionAtom.h:56
Ogre::RTShader::Operand::mSemantic
OpSemantic mSemantic
Tells if the parameter is of type input,output or both.
Definition: OgreShaderFunctionAtom.h:169
Ogre::RTShader::Operand::OPM_ALL
@ OPM_ALL
Definition: OgreShaderFunctionAtom.h:98
Ogre::String
_StringBase String
Definition: OgrePrerequisites.h:439
Ogre::RTShader::Operand::mIndirectionLevel
ushort mIndirectionLevel
The level of indirection.
Definition: OgreShaderFunctionAtom.h:173
Ogre::RTShader::FunctionInvocation::getReturnType
const String & getReturnType() const
Return the return type.
Definition: OgreShaderFunctionAtom.h:220
OgreShaderPrerequisites.h
Ogre::RTShader::Operand::OpMask
OpMask
Definition: OgreShaderFunctionAtom.h:96
Ogre::operator!=
bool operator!=(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator,...
Definition: OgreMemorySTLAllocator.h:202
Ogre::RTShader::FunctionAtomInstanceConstIterator
FunctionAtomInstanceList::const_iterator FunctionAtomInstanceConstIterator
Definition: OgreShaderFunctionAtom.h:259
Ogre::RTShader::Operand::mParameter
ParameterPtr mParameter
The parameter being carried by the operand.
Definition: OgreShaderFunctionAtom.h:167
Ogre::RTShader::Operand::getSemantic
OpSemantic getSemantic() const
Returns the operand semantic (do we read/write or both with the parameter).
Definition: OgreShaderFunctionAtom.h:144
Ogre::RTShader::Operand::hasFreeFields
bool hasFreeFields() const
Returns true if not all fields used.
Definition: OgreShaderFunctionAtom.h:138
Ogre::RTShader::FunctionAtom
A class that represents an atomic code section of shader based program function.
Definition: OgreShaderFunctionAtom.h:48
Ogre::RTShader::Operand::getParameter
const ParameterPtr & getParameter() const
Returns the parameter object as weak reference.
Definition: OgreShaderFunctionAtom.h:135
Ogre::RTShader::Operand::mMask
int mMask
Which part of the parameter should be passed (x,y,z,w)
Definition: OgreShaderFunctionAtom.h:171
Ogre::RTShader::Operand::OPS_IN
@ OPS_IN
The parameter is a input parameter.
Definition: OgreShaderFunctionAtom.h:88
Ogre::RTShader::FunctionInvocation
A class that represents function invocation code from shader based program function.
Definition: OgreShaderFunctionAtom.h:178
Ogre::RTShader::FunctionInvocation::mFunctionName
String mFunctionName
Definition: OgreShaderFunctionAtom.h:252
Ogre::RTShader::FunctionAtom::mInternalExecutionOrder
int mInternalExecutionOrder
Definition: OgreShaderFunctionAtom.h:75
Ogre::RTShader::FunctionInvocation::getOperandList
OperandVector & getOperandList()
Get a list of parameters this function invocation will use in the function call as arguments.
Definition: OgreShaderFunctionAtom.h:206
Ogre::SharedPtr< Parameter >
Ogre::GpuConstantType
GpuConstantType
Enumeration of the types of constant we may encounter in programs.
Definition: OgreGpuProgramParams.h:54
Ogre::RTShader::FunctionAtom::mGroupExecutionOrder
int mGroupExecutionOrder
Definition: OgreShaderFunctionAtom.h:73
Ogre::RTShader::Operand
A class that represents a function operand (its the combination of a parameter the in/out semantic an...
Definition: OgreShaderFunctionAtom.h:80
OgreGpuProgram.h
OgreShaderParameter.h
Ogre::RTShader::FunctionInvocation::mReturnType
String mReturnType
Definition: OgreShaderFunctionAtom.h:253
Ogre::RTShader::FunctionAtomInstanceIterator
FunctionAtomInstanceList::iterator FunctionAtomInstanceIterator
Definition: OgreShaderFunctionAtom.h:258
OgreStringVector.h
Ogre::operator==
bool operator==(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator,...
Definition: OgreMemorySTLAllocator.h:184
Ogre::RTShader::Operand::getIndirectionLevel
ushort getIndirectionLevel() const
Returns the level of indirection.
Definition: OgreShaderFunctionAtom.h:151
Ogre::vector
Definition: OgrePrerequisites.h:491
Ogre::RTShader::FunctionAtomInstanceList
vector< FunctionAtom * >::type FunctionAtomInstanceList
Definition: OgreShaderFunctionAtom.h:257
Ogre::operator<
bool operator<(SharedPtr< T > const &a, SharedPtr< U > const &b)
Definition: OgreSharedPtr.h:326
Ogre::RTShader::FunctionInvocation::Type
static String Type
The type of this class.
Definition: OgreShaderFunctionAtom.h:248
Ogre::RTShader::Operand::getMask
int getMask() const
Returns the mask bitfield.
Definition: OgreShaderFunctionAtom.h:141
Ogre::RTShader::FunctionInvocation::mOperands
OperandVector mOperands
Definition: OgreShaderFunctionAtom.h:254
Ogre::RTShader::Operand::OPS_OUT
@ OPS_OUT
The parameter is a output parameter.
Definition: OgreShaderFunctionAtom.h:90
_OgreRTSSExport
#define _OgreRTSSExport
Definition: OgreShaderPrerequisites.h:108

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Tue Apr 13 2021 08:53:15