OgreGpuProgram.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 
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies of the Software, and to permit persons to whom the Software is
14 furnished to do so, subject to the following conditions:
15 
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 THE SOFTWARE.
26 -----------------------------------------------------------------------------
27 */
28 #ifndef __GpuProgram_H_
29 #define __GpuProgram_H_
30 
31 // Precompiler options
32 #include "OgrePrerequisites.h"
33 #include "OgreResource.h"
34 #include "OgreSharedPtr.h"
35 #include "OgreIteratorWrappers.h"
36 #include "OgreSerializer.h"
37 #include "OgreRenderOperation.h"
38 #include "OgreGpuProgramParams.h"
39 #include "OgreHeaderPrefix.h"
40 
41 namespace Ogre {
42 
51  {
58  };
59 
70  {
71  protected:
74  {
75  public:
76  String doGet(const void* target) const;
77  void doSet(void* target, const String& val);
78  };
80  {
81  public:
82  String doGet(const void* target) const;
83  void doSet(void* target, const String& val);
84  };
86  {
87  public:
88  String doGet(const void* target) const;
89  void doSet(void* target, const String& val);
90  };
92  {
93  public:
94  String doGet(const void* target) const;
95  void doSet(void* target, const String& val);
96  };
98  {
99  public:
100  String doGet(const void* target) const;
101  void doSet(void* target, const String& val);
102  };
104  {
105  public:
106  String doGet(const void* target) const;
107  void doSet(void* target, const String& val);
108  };
110  {
111  public:
112  String doGet(const void* target) const;
113  void doSet(void* target, const String& val);
114  };
116  {
117  public:
118  String doGet(const void* target) const;
119  void doSet(void* target, const String& val);
120  };
121  // Command object for setting / getting parameters
127  static CmdVTF msVTFCmd;
177 
178 
187  void setupBaseParamDictionary(void);
188 
191  bool isRequiredCapabilitiesSupported(void) const;
192 
194  void loadImpl(void);
195 
197  void createParameterMappingStructures(bool recreateIfExists = true) const;
199  void createLogicalParameterMappingStructures(bool recreateIfExists = true) const;
201  void createNamedParameterMappingStructures(bool recreateIfExists = true) const;
202 
203  public:
204 
205  GpuProgram(ResourceManager* creator, const String& name, ResourceHandle handle,
206  const String& group, bool isManual = false, ManualResourceLoader* loader = 0);
207 
208  virtual ~GpuProgram() {}
209 
214  virtual void setSourceFile(const String& filename);
215 
220  virtual void setSource(const String& source);
221 
223  virtual const String& getSyntaxCode(void) const { return mSyntaxCode; }
224 
226  virtual void setSyntaxCode(const String& syntax);
227 
229  virtual const String& getSourceFile(void) const { return mFilename; }
231  virtual const String& getSource(void) const { return mSource; }
233  virtual void setType(GpuProgramType t);
235  virtual GpuProgramType getType(void) const { return mType; }
236 
241  virtual GpuProgram* _getBindingDelegate(void) { return this; }
242 
244  virtual bool isSupported(void) const;
245 
253  virtual GpuProgramParametersSharedPtr createParameters(void);
254 
261  virtual void setSkeletalAnimationIncluded(bool included)
262  { mSkeletalAnimation = included; }
263 
270  virtual bool isSkeletalAnimationIncluded(void) const { return mSkeletalAnimation; }
271 
278  virtual void setMorphAnimationIncluded(bool included)
279  { mMorphAnimation = included; }
280 
288  virtual void setPoseAnimationIncluded(ushort poseCount)
289  { mPoseAnimation = poseCount; }
290 
297  virtual bool isMorphAnimationIncluded(void) const { return mMorphAnimation; }
298 
305  virtual bool isPoseAnimationIncluded(void) const { return mPoseAnimation > 0; }
309  virtual ushort getNumberOfPosesIncluded(void) const { return mPoseAnimation; }
313  virtual void setVertexTextureFetchRequired(bool r) { mVertexTextureFetch = r; }
317  virtual bool isVertexTextureFetchRequired(void) const { return mVertexTextureFetch; }
318 
322  virtual void setAdjacencyInfoRequired(bool r) { mNeedsAdjacencyInfo = r; }
326  virtual bool isAdjacencyInfoRequired(void) const { return mNeedsAdjacencyInfo; }
327 
338  virtual GpuProgramParametersSharedPtr getDefaultParameters(void);
339 
342  virtual bool hasDefaultParameters(void) const { return !mDefaultParams.isNull(); }
343 
350  virtual bool getPassSurfaceAndLightStates(void) const { return false; }
351 
360  virtual bool getPassFogStates(void) const { return true; }
361 
368  virtual bool getPassTransformStates(void) const { return false; }
369 
373  virtual const String& getLanguage(void) const;
374 
377  virtual bool hasCompileError(void) const { return mCompileError; }
378 
381  virtual void resetCompileError(void) { mCompileError = false; }
382 
391  virtual void setManualNamedConstants(const GpuNamedConstants& namedConstants);
392 
394  virtual const GpuNamedConstants& getNamedConstants() const { return *mConstantDefs.get(); }
395 
406  virtual void setManualNamedConstantsFile(const String& paramDefFile);
407 
411  virtual const String& getManualNamedConstantsFile() const { return mManualNamedConstantsFile; }
418  virtual const GpuNamedConstants& getConstantDefinitions() const { return *mConstantDefs.get(); }
419 
421  virtual size_t calculateSize(void) const;
422 
423  protected:
425  virtual void loadFromSource(void) = 0;
426 
427  };
430 }
431 
432 #include "OgreHeaderSuffix.h"
433 
434 #endif
OgreSharedPtr.h
OgreHeaderSuffix.h
Ogre::ResourceHandle
unsigned long long int ResourceHandle
Definition: OgreResource.h:41
Ogre::GpuProgram::isVertexTextureFetchRequired
virtual bool isVertexTextureFetchRequired(void) const
Returns whether this vertex program requires support for vertex texture fetch from the hardware.
Definition: OgreGpuProgram.h:317
Ogre::GpuProgram::getManualNamedConstantsFile
virtual const String & getManualNamedConstantsFile() const
Gets the name of a file from which to load named parameters mapping for a program which would not be ...
Definition: OgreGpuProgram.h:411
Ogre
Definition: OgreAndroidLogListener.h:34
Ogre::GpuProgram::mFloatLogicalToPhysical
GpuLogicalBufferStructPtr mFloatLogicalToPhysical
Record of logical to physical buffer maps.
Definition: OgreGpuProgram.h:158
Ogre::GpuNamedConstants
Struct collecting together the information for named constants.
Definition: OgreGpuProgramParams.h:355
Ogre::GpuProgram::mLoadFromFile
bool mLoadFromFile
Whether we need to load source from file or not.
Definition: OgreGpuProgram.h:137
Ogre::GpuProgram::resetCompileError
virtual void resetCompileError(void)
Reset a compile error if it occurred, allowing the load to be retried.
Definition: OgreGpuProgram.h:381
Ogre::GpuProgram::msManNamedConstsFileCmd
static CmdManualNamedConstsFile msManNamedConstsFileCmd
Definition: OgreGpuProgram.h:128
Ogre::ushort
unsigned short ushort
Definition: OgrePrerequisites.h:113
Ogre::GpuProgram::mCompileError
bool mCompileError
Did we encounter a compilation error?
Definition: OgreGpuProgram.h:153
Ogre::GpuProgram::getSourceFile
virtual const String & getSourceFile(void) const
Gets the name of the file used as source for this program.
Definition: OgreGpuProgram.h:229
Ogre::GpuProgram::getSyntaxCode
virtual const String & getSyntaxCode(void) const
Gets the syntax code for this program e.g.
Definition: OgreGpuProgram.h:223
Ogre::GpuProgram::mSource
String mSource
The assembler source of the program (may be blank until file loaded)
Definition: OgreGpuProgram.h:135
Ogre::GpuProgram::getPassSurfaceAndLightStates
virtual bool getPassSurfaceAndLightStates(void) const
Returns whether a vertex program wants light and material states to be passed through fixed pipeline ...
Definition: OgreGpuProgram.h:350
Ogre::GpuProgram::msSyntaxCmd
static CmdSyntax msSyntaxCmd
Definition: OgreGpuProgram.h:123
Ogre::GpuProgram::msMorphCmd
static CmdMorph msMorphCmd
Definition: OgreGpuProgram.h:125
Ogre::GpuProgram
Defines a program which runs on the GPU such as a vertex or fragment program.
Definition: OgreGpuProgram.h:69
Ogre::GpuProgram::msSkeletalCmd
static CmdSkeletal msSkeletalCmd
Definition: OgreGpuProgram.h:124
Ogre::GpuProgram::mNeedsAdjacencyInfo
bool mNeedsAdjacencyInfo
Does this (geometry) program require adjacency information?
Definition: OgreGpuProgram.h:149
Ogre::GpuProgram::isMorphAnimationIncluded
virtual bool isMorphAnimationIncluded(void) const
Returns whether a vertex program includes the required instructions to perform morph animation.
Definition: OgreGpuProgram.h:297
Ogre::GpuProgram::CmdMorph
Definition: OgreGpuProgram.h:91
Ogre::GpuProgram::msPoseCmd
static CmdPose msPoseCmd
Definition: OgreGpuProgram.h:126
Ogre::GpuProgram::setSkeletalAnimationIncluded
virtual void setSkeletalAnimationIncluded(bool included)
Sets whether a vertex program includes the required instructions to perform skeletal animation.
Definition: OgreGpuProgram.h:261
Ogre::GpuProgram::mDoubleLogicalToPhysical
GpuLogicalBufferStructPtr mDoubleLogicalToPhysical
Record of logical to physical buffer maps.
Definition: OgreGpuProgram.h:163
Ogre::String
_StringBase String
Definition: OgrePrerequisites.h:439
OgreGpuProgramParams.h
Ogre::GpuProgram::~GpuProgram
virtual ~GpuProgram()
Definition: OgreGpuProgram.h:208
Ogre::GpuProgram::isSkeletalAnimationIncluded
virtual bool isSkeletalAnimationIncluded(void) const
Returns whether a vertex program includes the required instructions to perform skeletal animation.
Definition: OgreGpuProgram.h:270
Ogre::GpuProgram::mLoadedManualNamedConstants
bool mLoadedManualNamedConstants
Definition: OgreGpuProgram.h:176
Ogre::GpuProgram::mIntLogicalToPhysical
GpuLogicalBufferStructPtr mIntLogicalToPhysical
Record of logical to physical buffer maps.
Definition: OgreGpuProgram.h:168
Ogre::GPT_HULL_PROGRAM
Definition: OgreGpuProgram.h:56
Ogre::GPT_FRAGMENT_PROGRAM
Definition: OgreGpuProgram.h:53
Ogre::GpuProgram::getConstantDefinitions
virtual const GpuNamedConstants & getConstantDefinitions() const
Get the full list of named constants.
Definition: OgreGpuProgram.h:418
Ogre::ParamCommand
Abstract class which is command object which gets/sets parameters.
Definition: OgreStringInterface.h:79
Ogre::GpuProgramType
GpuProgramType
Enumerates the types of programs which can run on the GPU.
Definition: OgreGpuProgram.h:50
Ogre::GpuProgram::mSyntaxCode
String mSyntaxCode
Syntax code e.g. arbvp1, vs_2_0 etc.
Definition: OgreGpuProgram.h:139
Ogre::SharedPtr::isNull
bool isNull(void) const
Definition: OgreSharedPtr.h:275
Ogre::GpuProgram::isAdjacencyInfoRequired
virtual bool isAdjacencyInfoRequired(void) const
Returns whether this geometry program requires adjacency information from the input primitives.
Definition: OgreGpuProgram.h:326
OgreRenderOperation.h
OgreHeaderPrefix.h
Ogre::SharedPtr::get
T * get() const
Definition: OgreSharedPtr.h:254
Ogre::GpuProgram::msTypeCmd
static CmdType msTypeCmd
Definition: OgreGpuProgram.h:122
OgreSerializer.h
Ogre::GpuProgram::CmdType
Command object - see ParamCommand.
Definition: OgreGpuProgram.h:73
OgrePrerequisites.h
Ogre::GpuProgram::CmdSkeletal
Definition: OgreGpuProgram.h:85
Ogre::GpuProgram::getType
virtual GpuProgramType getType(void) const
Get the program type.
Definition: OgreGpuProgram.h:235
OgreResource.h
_OgreExport
#define _OgreExport
Definition: OgrePlatform.h:257
Ogre::ResourceManager
Defines a generic resource handler.
Definition: OgreResourceManager.h:122
Ogre::GpuProgram::setVertexTextureFetchRequired
virtual void setVertexTextureFetchRequired(bool r)
Sets whether this vertex program requires support for vertex texture fetch from the hardware.
Definition: OgreGpuProgram.h:313
Ogre::GpuProgram::isPoseAnimationIncluded
virtual bool isPoseAnimationIncluded(void) const
Returns whether a vertex program includes the required instructions to perform pose animation.
Definition: OgreGpuProgram.h:305
Ogre::GpuProgram::setMorphAnimationIncluded
virtual void setMorphAnimationIncluded(bool included)
Sets whether a vertex program includes the required instructions to perform morph animation.
Definition: OgreGpuProgram.h:278
Ogre::GpuProgram::CmdSyntax
Definition: OgreGpuProgram.h:79
Ogre::SharedPtr< GpuProgramParameters >
Ogre::GpuProgram::msVTFCmd
static CmdVTF msVTFCmd
Definition: OgreGpuProgram.h:127
Ogre::GPT_COMPUTE_PROGRAM
Definition: OgreGpuProgram.h:57
Ogre::GpuProgram::getNumberOfPosesIncluded
virtual ushort getNumberOfPosesIncluded(void) const
Returns the number of simultaneous poses the vertex program can blend, for use in pose animation.
Definition: OgreGpuProgram.h:309
Ogre::GpuProgram::mMorphAnimation
bool mMorphAnimation
Does this (vertex) program include morph animation?
Definition: OgreGpuProgram.h:143
OgreIteratorWrappers.h
Ogre::Resource
Abstract class representing a loadable resource (e.g.
Definition: OgreResource.h:79
Ogre::GpuProgram::hasCompileError
virtual bool hasCompileError(void) const
Did this program encounter a compile error when loading?
Definition: OgreGpuProgram.h:377
Ogre::GpuProgram::CmdAdjacency
Definition: OgreGpuProgram.h:115
Ogre::GpuProgram::mDefaultParams
GpuProgramParametersSharedPtr mDefaultParams
The default parameters for use with this object.
Definition: OgreGpuProgram.h:151
Ogre::GPT_VERTEX_PROGRAM
Definition: OgreGpuProgram.h:52
Ogre::GpuProgram::setPoseAnimationIncluded
virtual void setPoseAnimationIncluded(ushort poseCount)
Sets whether a vertex program includes the required instructions to perform pose animation.
Definition: OgreGpuProgram.h:288
Ogre::GpuProgram::CmdPose
Definition: OgreGpuProgram.h:97
Ogre::GPT_GEOMETRY_PROGRAM
Definition: OgreGpuProgram.h:54
Ogre::GpuProgram::mPoseAnimation
ushort mPoseAnimation
Does this (vertex) program include pose animation (count of number of poses supported)
Definition: OgreGpuProgram.h:145
Ogre::GpuProgram::setAdjacencyInfoRequired
virtual void setAdjacencyInfoRequired(bool r)
Sets whether this geometry program requires adjacency information from the input primitives.
Definition: OgreGpuProgram.h:322
Ogre::GpuProgram::mManualNamedConstantsFile
String mManualNamedConstantsFile
File from which to load named constants manually.
Definition: OgreGpuProgram.h:175
Ogre::GpuProgram::_getBindingDelegate
virtual GpuProgram * _getBindingDelegate(void)
Returns the GpuProgram which should be bound to the pipeline.
Definition: OgreGpuProgram.h:241
Ogre::GpuProgram::getPassTransformStates
virtual bool getPassTransformStates(void) const
Returns whether a vertex program wants transform state to be passed through fixed pipeline low level ...
Definition: OgreGpuProgram.h:368
Ogre::GpuProgram::CmdVTF
Definition: OgreGpuProgram.h:103
Ogre::GpuProgram::mSkeletalAnimation
bool mSkeletalAnimation
Does this (vertex) program include skeletal animation?
Definition: OgreGpuProgram.h:141
Ogre::GpuProgram::CmdManualNamedConstsFile
Definition: OgreGpuProgram.h:109
Ogre::ManualResourceLoader
Interface describing a manual resource loader.
Definition: OgreResource.h:514
Ogre::GpuProgram::mFilename
String mFilename
The name of the file to load source from (may be blank)
Definition: OgreGpuProgram.h:133
Ogre::GpuProgram::mType
GpuProgramType mType
The type of the program.
Definition: OgreGpuProgram.h:131
Ogre::GpuProgram::mVertexTextureFetch
bool mVertexTextureFetch
Does this (vertex) program require support for vertex texture fetch?
Definition: OgreGpuProgram.h:147
Ogre::GpuProgram::getPassFogStates
virtual bool getPassFogStates(void) const
Returns whether a fragment program wants fog state to be passed through fixed pipeline low level API ...
Definition: OgreGpuProgram.h:360
Ogre::GpuProgram::mConstantDefs
GpuNamedConstantsPtr mConstantDefs
Parameter name -> ConstantDefinition map, shared instance used by all parameter objects.
Definition: OgreGpuProgram.h:173
Ogre::GpuProgram::getSource
virtual const String & getSource(void) const
Gets the assembler source for this program.
Definition: OgreGpuProgram.h:231
Ogre::GpuProgram::msAdjacencyCmd
static CmdAdjacency msAdjacencyCmd
Definition: OgreGpuProgram.h:129
Ogre::GpuProgram::getNamedConstants
virtual const GpuNamedConstants & getNamedConstants() const
Get a read-only reference to the named constants registered for this program (manually or automatical...
Definition: OgreGpuProgram.h:394
Ogre::GPT_DOMAIN_PROGRAM
Definition: OgreGpuProgram.h:55
Ogre::GpuProgram::hasDefaultParameters
virtual bool hasDefaultParameters(void) const
Returns true if default parameters have been set up.
Definition: OgreGpuProgram.h:342

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.