OGRE  1.9.0
OgreShaderGenerator.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 _ShaderGenerator_
28#define _ShaderGenerator_
29
31#include "OgreSingleton.h"
32#include "OgreFileSystemLayer.h"
34#include "OgreSceneManager.h"
38
39
40namespace Ogre {
41namespace RTShader {
42
53class _OgreRTSSExport ShaderGenerator : public Singleton<ShaderGenerator>, public RTShaderSystemAlloc
54{
55// Interface.
56public:
57
62 static bool initialize();
63
67 static void destroy();
68
69
86
87
104
110
116
122
128 void setTargetLanguage(const String& shaderLanguage);
129
133 const String& getTargetLanguage() const { return mShaderLanguage; }
134
139 void setVertexShaderProfiles(const String& vertexShaderProfiles);
140
144 const String& getVertexShaderProfiles() const { return mVertexShaderProfiles; }
145
149 const StringVector& getVertexShaderProfilesList() const { return mVertexShaderProfilesList; }
150
151
156 void setFragmentShaderProfiles(const String& fragmentShaderProfiles);
157
161 const String& getFragmentShaderProfiles() const { return mFragmentShaderProfiles; }
162
166 const StringVector& getFragmentShaderProfilesList() const { return mFragmentShaderProfilesList; }
167
174 void setShaderCachePath(const String& cachePath);
175
179 const String& getShaderCachePath() const { return mShaderCachePath; }
180
186
195 RenderState* getRenderState(const String& schemeName);
196
197
198 typedef std::pair<RenderState*, bool> RenderStateCreateOrRetrieveResult;
204
205
210 bool hasRenderState(const String& schemeName) const;
211
212
220 RenderState* getRenderState(const String& schemeName, const String& materialName, unsigned short passIndex);
221
230 RenderState* getRenderState(const String& schemeName, const String& materialName, const String& groupName, unsigned short passIndex);
231
239
244
250
255
261
267
268
274
275
283 bool hasShaderBasedTechnique(const String& materialName, const String& srcTechniqueSchemeName, const String& dstTechniqueSchemeName) const;
284
293 bool hasShaderBasedTechnique(const String& materialName, const String& groupName, const String& srcTechniqueSchemeName, const String& dstTechniqueSchemeName) const;
294
304 bool createShaderBasedTechnique(const String& materialName, const String& srcTechniqueSchemeName, const String& dstTechniqueSchemeName, bool overProgrammable = false);
305
316 bool createShaderBasedTechnique(const String& materialName, const String& groupName, const String& srcTechniqueSchemeName, const String& dstTechniqueSchemeName, bool overProgrammable = false);
317
318
327 bool removeShaderBasedTechnique(const String& materialName, const String& srcTechniqueSchemeName, const String& dstTechniqueSchemeName);
328
338 bool removeShaderBasedTechnique(const String& materialName, const String& groupName, const String& srcTechniqueSchemeName, const String& dstTechniqueSchemeName);
339
340
347 bool removeAllShaderBasedTechniques(const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
348
359 bool cloneShaderBasedTechniques(const String& srcMaterialName,
360 const String& srcGroupName, const String& dstMaterialName, const String& dstGroupName);
361
366
371 void createScheme(const String& schemeName);
372
378 void invalidateScheme(const String& schemeName);
379
385 bool validateScheme(const String& schemeName);
386
394 void invalidateMaterial(const String& schemeName, const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
395
403 bool validateMaterial(const String& schemeName, const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
404
412 void invalidateMaterialIlluminationPasses(const String& schemeName, const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
413
421 bool validateMaterialIlluminationPasses(const String& schemeName, const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
422
435
436
438 size_t getVertexShaderCount() const;
439
440
443
444
445
450 void setVertexShaderOutputsCompactPolicy(VSOutputCompactPolicy policy) { mVSOutputCompactPolicy = policy; }
451
455 VSOutputCompactPolicy getVertexShaderOutputsCompactPolicy() const { return mVSOutputCompactPolicy; }
456
457
463 void setCreateShaderOverProgrammablePass(bool value) { mCreateShaderOverProgrammablePass = value; }
464
468 bool getCreateShaderOverProgrammablePass() const { return mCreateShaderOverProgrammablePass; }
469
470
474
477 const String& getRTShaderScheme(size_t index) const;
478
481
482// Protected types.
483protected:
484 class SGPass;
485 class SGTechnique;
486 class SGMaterial;
487 class SGScheme;
488
489 typedef std::pair<String,String> MatGroupPair;
491 {
492 // ensure we arrange the list first by material name then by group name
493 bool operator()(const MatGroupPair& p1, const MatGroupPair& p2) const
494 {
495 int cmpVal = strcmp(p1.first.c_str(),p2.first.c_str());
496 return (cmpVal < 0) || ((cmpVal == 0) && (strcmp(p1.second.c_str(),p2.second.c_str()) < 0));
497 }
498 };
499
501 typedef SGPassList::iterator SGPassIterator;
502 typedef SGPassList::const_iterator SGPassConstIterator;
503
505 typedef SGTechniqueList::iterator SGTechniqueIterator;
506 typedef SGTechniqueList::const_iterator SGTechniqueConstIterator;
507
509 typedef SGTechniqueMap::iterator SGTechniqueMapIterator;
510
512 typedef SGMaterialMap::iterator SGMaterialIterator;
513 typedef SGMaterialMap::const_iterator SGMaterialConstIterator;
514
516 typedef SGSchemeMap::iterator SGSchemeIterator;
517 typedef SGSchemeMap::const_iterator SGSchemeConstIterator;
518
520 typedef SGScriptTranslatorMap::iterator SGScriptTranslatorIterator;
521 typedef SGScriptTranslatorMap::const_iterator SGScriptTranslatorConstIterator;
522
523
524
527 {
528 public:
529 SGPass(SGTechnique* parent, Pass* srcPass, Pass* dstPass, IlluminationStage stage);
531
534
537
540
541
543 void notifyRenderSingleObject(Renderable* rend, const AutoParamDataSource* source, const LightList* pLightList, bool suppressRenderStateChanges);
544
546 Pass* getSrcPass() { return mSrcPass; }
547
549 Pass* getDstPass() { return mDstPass; }
550
553
555 bool isIlluminationPass() { return mStage != IS_UNKNOWN; }
556
559
561 RenderState* getCustomRenderState() { return mCustomRenderState; }
562
564 void setCustomRenderState(RenderState* customRenderState) { mCustomRenderState = customRenderState; }
565
566 // Key name for associating with a Pass instance.
568
569 protected:
570 SubRenderState* getCustomFFPSubState(int subStateOrder, const RenderState* renderState);
571
572 protected:
573 // Parent technique.
575 // Source pass.
577 // Destination pass.
579 // Illumination stage
581 // Custom render state.
583 // The compiled render state.
585 };
586
587
590 {
591 public:
592 SGTechnique(SGMaterial* parent, Technique* srcTechnique, const String& dstTechniqueSchemeName);
594
596 const SGMaterial* getParent() const { return mParent; }
597
599 Technique* getSourceTechnique() { return mSrcTechnique; }
600
602 Technique* getDestinationTechnique() { return mDstTechnique; }
603
605 const String& getDestinationTechniqueSchemeName() const { return mDstTechniqueSchemeName; }
606
609
612
615
618
621
624
626 void setBuildDestinationTechnique(bool buildTechnique) { mBuildDstTechnique = buildTechnique; }
627
629 bool getBuildDestinationTechnique() const { return mBuildDstTechnique; }
630
634 RenderState* getRenderState(unsigned short passIndex);
636 bool hasRenderState(unsigned short passIndex);
637
638 // Key name for associating with a Technique instance.
640
641 protected:
642
645
648
651
652 protected:
653 // Auto mutex.
655 // Parent material.
657 // Source technique.
659 // Destination technique.
661 // All passes entries, both normal and illumination.
663 // The custom render states of all passes.
665 // Flag that tells if destination technique should be build.
667 // Scheme name of destination technique.
669 };
670
671
674 {
675
676 public:
678 SGMaterial(const String& materialName, const String& groupName) : mName(materialName), mGroup(groupName)
679 {
680
681 }
682
684 const String& getMaterialName() const { return mName; }
685
687 const String& getGroupName() const { return mGroup; }
688
690 const SGTechniqueList& getTechniqueList() const { return mTechniqueEntries; }
691
693 SGTechniqueList& getTechniqueList() { return mTechniqueEntries; }
694
695 protected:
696 // The material name.
698 // The group name.
700 // All passes entries.
702 };
703
704
707 {
708 public:
709 SGScheme(const String& schemeName);
711
712
715 bool empty() const { return mTechniqueEntries.empty(); }
716
721
725 void validate();
726
730 void invalidate(const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
731
735 bool validate(const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
736
740 void invalidateIlluminationPasses(const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
741
745 bool validateIlluminationPasses(const String& materialName, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
746
749
752
753
758
762 RenderState* getRenderState(const String& materialName, const String& groupName, unsigned short passIndex);
763
764 protected:
767
770
771
772 protected:
773 // Scheme name.
775 // Technique entries.
777 // Tells if this scheme is out of date.
779 // The global render state of this scheme.
781 // Current fog mode.
783 };
784
785
786// Protected types.
787protected:
788
791 {
792 public:
794 {
795 mOwner = owner;
796 }
797
801 virtual void notifyRenderSingleObject(Renderable* rend, const Pass* pass,
802 const AutoParamDataSource* source,
803 const LightList* pLightList, bool suppressRenderStateChanges)
804 {
805 mOwner->notifyRenderSingleObject(rend, pass, source, pLightList, suppressRenderStateChanges);
806 }
807
808 protected:
810 };
811
814 {
815 public:
817 {
818 mOwner = owner;
819 }
820
824 virtual void preFindVisibleObjects(SceneManager* source,
826 {
827 mOwner->preFindVisibleObjects(source, irs, v);
828 }
829
832 {
833
834 }
835
836 virtual void shadowTexturesUpdated(size_t numberOfShadowTextures)
837 {
838
839 }
840
842 Camera* camera, size_t iteration)
843 {
844
845 }
846
848 Frustum* frustum)
849 {
850
851 }
852
853 protected:
854 // The shader generator instance.
856 };
857
860 {
861 public:
863 {
864 mOwner = owner;
865 }
866
868 virtual size_t getNumTranslators() const
869 {
870 return mOwner->getNumTranslators();
871 }
872
875 {
876 return mOwner->getTranslator(node);
877 }
878
879 protected:
880 // The shader generator instance.
882 };
883
884 //-----------------------------------------------------------------------------
886 typedef SubRenderStateFactoryMap::iterator SubRenderStateFactoryIterator;
887 typedef SubRenderStateFactoryMap::const_iterator SubRenderStateFactoryConstIterator;
888
889 //-----------------------------------------------------------------------------
891 typedef SceneManagerMap::iterator SceneManagerIterator;
892 typedef SceneManagerMap::const_iterator SceneManagerConstIterator;
893
894protected:
897
900
903
905 void _destroy();
906
908 Technique* findSourceTechnique(const String& materialName, const String& groupName, const String& srcTechniqueSchemeName, bool allowProgrammable);
909
911 bool isProgrammable(Technique* tech) const;
912
914 void notifyRenderSingleObject(Renderable* rend, const Pass* pass, const AutoParamDataSource* source, const LightList* pLightList, bool suppressRenderStateChanges);
915
918
921
924
934
944
951 bool addCustomScriptTranslator(const String& key, ScriptTranslator* translator);
952
959
961 size_t getNumTranslators() const;
962
965
966
973
981
986 SGMaterialIterator findMaterialEntryIt(const String& materialName, const String& groupName);
987 SGMaterialConstIterator findMaterialEntryIt(const String& materialName, const String& groupName) const;
988
989
990 typedef std::pair<SGScheme*, bool> SchemeCreateOrRetrieveResult;
996
998 bool getIsFinalizing() const;
999protected:
1000 // Auto mutex.
1002 // The active scene manager.
1004 // A map of all scene managers this generator is bound to.
1006 // Render object listener.
1008 // Scene manager listener.
1010 // Script translator manager.
1012 // Custom material Serializer listener - allows exporting material that contains shader generated techniques.
1014 // A map of the registered custom script translators.
1016 // The core translator of the RT Shader System.
1018 // The target shader language (currently only cg supported).
1020 // The target vertex shader profile. Will be used as argument for program compilation.
1022 // List of target vertex shader profiles.
1024 // The target fragment shader profile. Will be used as argument for program compilation.
1026 // List of target fragment shader profiles..
1028 // Path for caching the generated shaders.
1030 // Shader program manager.
1032 // Shader program writer manager.
1034 // File system layer manager.
1036 // Fixed Function Render state builder.
1037 FFPRenderStateBuilder* mFFPRenderStateBuilder;
1038 // Material entries map.
1040 // Scheme entries map.
1042 // All technique entries map.
1044 // Sub render state registered factories.
1046 // Sub render state core extension factories.
1048 // True if active view port use a valid SGScheme.
1050 // Light count per light type.
1051 int mLightCount[3];
1052 // Vertex shader outputs compact policy.
1054 // Tells whether shaders are created for passes with shaders
1056 // a flag to indicate finalizing
1058private:
1059 friend class SGPass;
1060 friend class FFPRenderStateBuilder;
1064
1065};
1066
1070}
1071}
1072
1073#endif
1074
#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...
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:87
Provides methods to find out where the Ogre config files are stored and where logs and settings files...
A frustum represents a pyramid, capped at the near and far end which is used to represent either a vi...
Definition: OgreFrustum.h:86
Representation of a dynamic light source in the scene.
Definition: OgreLight.h:74
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.
A singleton manager class that manages 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 responsible for translating core features of the RT Shader System for Ogre material script...
Shader generator material wrapper class.
const SGTechniqueList & getTechniqueList() const
Get the const techniques list of this material.
SGTechniqueList & getTechniqueList()
Get the techniques list of this material.
const String & getGroupName() const
Get the group name.
SGMaterial(const String &materialName, const String &groupName)
Class constructor.
const String & getMaterialName() const
Get the material name.
Shader generator pass wrapper class.
SGPass(SGTechnique *parent, Pass *srcPass, Pass *dstPass, IlluminationStage stage)
void setCustomRenderState(RenderState *customRenderState)
Set the custom render state of this pass.
Pass * getDstPass()
Get destination pass.
void buildTargetRenderState()
Build the render state.
SubRenderState * getCustomFFPSubState(int subStateOrder, const RenderState *renderState)
IlluminationStage getIlluminationStage()
Get illumination stage.
RenderState * getCustomRenderState()
Get custom render state of this pass.
void releasePrograms()
Release the CPU/GPU programs of this pass.
void notifyRenderSingleObject(Renderable *rend, const AutoParamDataSource *source, const LightList *pLightList, bool suppressRenderStateChanges)
Called when a single object is about to be rendered.
SubRenderState * getCustomFFPSubState(int subStateOrder)
Get custom FPP sub state of this pass.
bool isIlluminationPass()
Get illumination state.
void acquirePrograms()
Acquire the CPU/GPU programs for this pass.
Shader generator RenderObjectListener sub class.
virtual void notifyRenderSingleObject(Renderable *rend, const Pass *pass, const AutoParamDataSource *source, const LightList *pLightList, bool suppressRenderStateChanges)
Listener overridden function notify the shader generator when rendering single object.
virtual void shadowTextureReceiverPreViewProj(Light *light, Frustum *frustum)
This event occurs just before the view & projection matrices are set for re-rendering a shadow receiv...
virtual void shadowTextureCasterPreViewProj(Light *light, Camera *camera, size_t iteration)
This event occurs just before the view & projection matrices are set for rendering into a shadow text...
virtual void preFindVisibleObjects(SceneManager *source, SceneManager::IlluminationRenderStage irs, Viewport *v)
Listener overridden function notify the shader generator when finding visible objects process started...
virtual void postFindVisibleObjects(SceneManager *source, SceneManager::IlluminationRenderStage irs, Viewport *v)
Called after searching for visible objects in this SceneManager.
virtual void shadowTexturesUpdated(size_t numberOfShadowTextures)
Event raised after all shadow textures have been rendered into for all queues / targets but before an...
void invalidate()
Invalidate the whole scheme.
bool empty() const
Return true if this scheme dose not contains any techniques.
void addTechniqueEntry(SGTechnique *techEntry)
Add a technique to current techniques list.
bool validate(const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate specific material.
void synchronizeWithLightSettings()
Synchronize the current light settings of this scheme with the current settings of the scene.
RenderState * getRenderState(const String &materialName, const String &groupName, unsigned short passIndex)
Get specific pass render state.
RenderState * getRenderState()
Get global render state of this scheme.
SGScheme(const String &schemeName)
void invalidateIlluminationPasses(const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate illumination passes of the specific material.
void synchronizeWithFogSettings()
Synchronize the fog settings of this scheme with the current settings of the scene.
void validate()
Validate the whole scheme.
bool validateIlluminationPasses(const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate illumination passes of the specific material.
void invalidate(const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Invalidate specific material.
void removeTechniqueEntry(SGTechnique *techEntry)
Remove a technique from the current techniques list.
Shader generator ScriptTranslatorManager sub class.
virtual size_t getNumTranslators() const
Returns the number of translators being managed.
virtual ScriptTranslator * getTranslator(const AbstractNodePtr &node)
Returns a manager for the given object abstract node, or null if it is not supported.
Shader generator technique wrapper class.
bool hasRenderState(unsigned short passIndex)
Tells if a custom render state exists for the given pass.
void destroyIlluminationSGPasses()
Destroy the illumination passes entries.
const SGMaterial * getParent() const
Get the parent SGMaterial.
void buildTargetRenderState()
Build the render state.
const String & getDestinationTechniqueSchemeName() const
Get the destination technique scheme name.
SGTechnique(SGMaterial *parent, Technique *srcTechnique, const String &dstTechniqueSchemeName)
Technique * getSourceTechnique()
Get the source technique.
void createIlluminationSGPasses()
Create the illumination passes entries.
Technique * getDestinationTechnique()
Get the destination technique.
RenderState * getRenderState(unsigned short passIndex)
Get render state of specific pass.
void acquirePrograms()
Acquire the CPU/GPU programs for this technique.
void setBuildDestinationTechnique(bool buildTechnique)
Tells the technique that it needs to generate shader code.
bool getBuildDestinationTechnique() const
Tells if the destination technique should be build.
void destroySGPasses()
Destroy the passes entries.
void buildIlluminationTargetRenderState()
Build the render state for illumination passes.
void acquireIlluminationPrograms()
Acquire the CPU/GPU programs for illumination passes of this technique.
void releasePrograms()
Release the CPU/GPU programs of this technique.
void createSGPasses()
Create the passes entries.
Shader generator system main interface.
SGTechniqueList::const_iterator SGTechniqueConstIterator
SubRenderStateFactory * getSubRenderStateFactory(const String &type)
Returns a sub render state factory by name.
const String & getRTShaderScheme(size_t index) const
Returns the scheme name used in the for RT shader generation by index.
SceneManager * getActiveSceneManager()
Get the active scene manager that is doint the actual scene rendering.
RenderState * getRenderState(const String &schemeName, const String &materialName, const String &groupName, unsigned short passIndex)
Get render state of specific pass.
vector< SGPass * >::type SGPassList
const String & getTargetLanguage() const
Return the target shader language currently in use.
SubRenderStateFactoryMap::const_iterator SubRenderStateFactoryConstIterator
void removeSceneManager(SceneManager *sceneMgr)
Remove a scene manager from the shader generator scene managers list.
SGMaterialConstIterator findMaterialEntryIt(const String &materialName, const String &groupName) const
SGSchemeMap::iterator SGSchemeIterator
bool _initialize()
Initialize the shader generator instance.
void setVertexShaderProfiles(const String &vertexShaderProfiles)
Set the output vertex shader target profiles.
std::pair< SGScheme *, bool > SchemeCreateOrRetrieveResult
void setFragmentShaderProfiles(const String &fragmentShaderProfiles)
Set the output fragment shader target profiles.
map< String, SceneManager * >::type SceneManagerMap
bool removeShaderBasedTechnique(const String &materialName, const String &groupName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName)
Remove shader based technique from a given technique.
SubRenderState * createSubRenderState(ScriptCompiler *compiler, PropertyAbstractNode *prop, Pass *pass, SGScriptTranslator *translator)
Create an instance of the SubRenderState based on script properties using the current sub render stat...
bool hasShaderBasedTechnique(const String &materialName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName) const
Checks if a shader based technique has been created for a given technique.
void flushShaderCache()
Flush the shader cache.
static void destroy()
Destroy the Shader Generator instance.
size_t getNumTranslators() const
Return number of script translators.
bool validateMaterial(const String &schemeName, const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate specific material scheme.
RenderState * getRenderState(const String &schemeName, const String &materialName, unsigned short passIndex)
Get render state of specific pass.
RenderState * getRenderState(const String &schemeName)
Return a global render state associated with the given scheme name.
size_t getFragmentShaderCount() const
Return the current number of generated fragment shaders.
void invalidateScheme(const String &schemeName)
Invalidate a given scheme.
void setTargetLanguage(const String &shaderLanguage)
Set the target shader language.
~ShaderGenerator()
Class destructor.
void createScheme(const String &schemeName)
Create a scheme.
map< String, SGScheme * >::type SGSchemeMap
void serializePassAttributes(MaterialSerializer *ser, SGPass *passEntry)
This method called by instance of SGMaterialSerializerListener and serialize a given pass entry attri...
void invalidateMaterial(const String &schemeName, const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Invalidate specific material scheme.
ProgramWriterManager * mProgramWriterManager
static String DEFAULT_SCHEME_NAME
Default material scheme of the shader generator.
bool hasRenderState(const String &schemeName) const
Tells if a given render state exists.
size_t getVertexShaderCount() const
Return the current number of generated vertex shaders.
SGSceneManagerListener * mSceneManagerListener
void destroySubRenderState(SubRenderState *subRenderState)
Destroy an instance of sub render state.
void addSceneManager(SceneManager *sceneMgr)
Add a scene manager to the shader generator scene managers list.
SubRenderStateFactoryMap mSubRenderStateExFactories
SGMaterialMap::const_iterator SGMaterialConstIterator
bool hasShaderBasedTechnique(const String &materialName, const String &groupName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName) const
Checks if a shader based technique has been created for a given technique.
bool validateScheme(const String &schemeName)
Validate a given scheme.
SGRenderObjectListener * mRenderObjectListener
ShaderGenerator()
Class default constructor.
bool getCreateShaderOverProgrammablePass() const
Returns whether shaders are created for passes with shaders.
SubRenderStateFactoryMap mSubRenderStateFactories
void setShaderCachePath(const String &cachePath)
Set the output shader cache path.
VSOutputCompactPolicy getVertexShaderOutputsCompactPolicy() const
Get the vertex shader outputs compaction policy.
bool createShaderBasedTechnique(const String &materialName, const String &groupName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName, bool overProgrammable=false)
Create shader based technique from a given technique.
bool createShaderBasedTechnique(const String &materialName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName, bool overProgrammable=false)
Create shader based technique from a given technique.
const String & getShaderCachePath() const
Get the output shader cache path.
void invalidateMaterialIlluminationPasses(const String &schemeName, const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Invalidate specific material scheme.
SGMaterialSerializerListener * mMaterialSerializerListener
SceneManagerMap::iterator SceneManagerIterator
RenderStateCreateOrRetrieveResult createOrRetrieveRenderState(const String &schemeName)
Returns a requested render state.
const String & getFragmentShaderProfiles() const
Get the output fragment shader target profiles.
SceneManagerMap::const_iterator SceneManagerConstIterator
bool removeCustomScriptTranslator(const String &key)
Remove custom script translator.
void _destroy()
Destory the shader generator instance.
SGMaterialSerializerListener * getMaterialSerializerListener()
Return custom material Serializer of the shader generator.
ScriptTranslator * getTranslator(const AbstractNodePtr &node)
Return a matching script translator.
static ShaderGenerator * getSingletonPtr()
Override standard Singleton retrieval.
const StringVector & getFragmentShaderProfilesList() const
Get the output fragment shader target profiles as list of strings.
VSOutputCompactPolicy mVSOutputCompactPolicy
size_t getNumSubRenderStateFactories() const
Returns the number of existing factories.
bool removeAllShaderBasedTechniques(const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Remove all shader based techniques of the given material.
void setCreateShaderOverProgrammablePass(bool value)
Sets whether shaders are created for passes with shaders.
bool getIsFinalizing() const
Used to check if finalizing.
void notifyRenderSingleObject(Renderable *rend, const Pass *pass, const AutoParamDataSource *source, const LightList *pLightList, bool suppressRenderStateChanges)
Called from the sub class of the RenderObjectLister when single object is rendered.
SubRenderState * createSubRenderState(const String &type)
Create an instance of sub render state from a given type.
SGMaterialMap::iterator SGMaterialIterator
map< String, SubRenderStateFactory * >::type SubRenderStateFactoryMap
SGMaterialIterator findMaterialEntryIt(const String &materialName, const String &groupName)
Finds an entry iterator in the mMaterialEntriesMap map.
bool cloneShaderBasedTechniques(const String &srcMaterialName, const String &srcGroupName, const String &dstMaterialName, const String &dstGroupName)
Clone all shader based techniques from one material to another.
SGScriptTranslatorMap::iterator SGScriptTranslatorIterator
SchemeCreateOrRetrieveResult createOrRetrieveScheme(const String &schemeName)
Returns a requested scheme.
vector< SGTechnique * >::type SGTechniqueList
SubRenderStateFactory * getSubRenderStateFactory(size_t index)
Returns a sub render state factory by index.
bool isProgrammable(Technique *tech) const
Checks if a given technique has passes with shaders.
bool removeShaderBasedTechnique(const String &materialName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName)
Remove shader based technique from a given technique.
void addSubRenderStateFactory(SubRenderStateFactory *factory)
Add sub render state factory.
SubRenderStateFactoryMap::iterator SubRenderStateFactoryIterator
bool addCustomScriptTranslator(const String &key, ScriptTranslator *translator)
Add custom script translator.
void setVertexShaderOutputsCompactPolicy(VSOutputCompactPolicy policy)
Set the vertex shader outputs compaction policy.
std::pair< RenderState *, bool > RenderStateCreateOrRetrieveResult
void serializeTextureUnitStateAttributes(MaterialSerializer *ser, SGPass *passEntry, const TextureUnitState *srcTextureUnit)
This method called by instance of SGMaterialSerializerListener and serialize a given textureUnitState...
Technique * findSourceTechnique(const String &materialName, const String &groupName, const String &srcTechniqueSchemeName, bool allowProgrammable)
Find source technique to generate shader based technique based on it.
SGSchemeMap::const_iterator SGSchemeConstIterator
static bool initialize()
Initialize the Shader Generator System.
SGTechniqueMap::iterator SGTechniqueMapIterator
SGTechniqueList::iterator SGTechniqueIterator
map< MatGroupPair, SGMaterial *, MatGroupPair_less >::type SGMaterialMap
void createSubRenderStateExFactories()
Create sub render state core extensions factories.
bool validateMaterialIlluminationPasses(const String &schemeName, const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate specific material scheme.
map< String, ScriptTranslator * >::type SGScriptTranslatorMap
void removeSubRenderStateFactory(SubRenderStateFactory *factory)
Remove sub render state factory.
FFPRenderStateBuilder * mFFPRenderStateBuilder
void removeAllShaderBasedTechniques()
Remove all shader based techniques that created by this shader generator.
std::pair< String, String > MatGroupPair
SGPassList::const_iterator SGPassConstIterator
const String & getVertexShaderProfiles() const
Get the output vertex shader target profiles.
void preFindVisibleObjects(SceneManager *source, SceneManager::IlluminationRenderStage irs, Viewport *v)
Called from the sub class of the SceneManager::Listener when finding visible object process starts.
map< SGTechnique *, SGTechnique * >::type SGTechniqueMap
SGScriptTranslatorMap::const_iterator SGScriptTranslatorConstIterator
void destroySubRenderStateExFactories()
Destroy sub render state core extensions factories.
static ShaderGenerator & getSingleton()
Override standard Singleton retrieval.
SGScriptTranslatorManager * mScriptTranslatorManager
SGScriptTranslatorMap mScriptTranslatorsMap
const StringVector & getVertexShaderProfilesList() const
Get the output vertex shader target profiles as list of strings.
SubRenderState * createSubRenderState(ScriptCompiler *compiler, PropertyAbstractNode *prop, TextureUnitState *texState, SGScriptTranslator *translator)
Create an instance of the SubRenderState based on script properties using the current sub render stat...
size_t getRTShaderSchemeCount() const
Returns the amount of schemes used in the for RT shader generation.
Abstract factory interface for creating SubRenderState implementation instances.
This class is the base interface of sub part from a shader based rendering pipeline.
This is the target render state.
Abstract interface which classes must implement if they wish to receive events from the scene manager...
Abstract class defining the interface all renderable objects must implement.
Class that allows listening in on the various stages of SceneManager processing, so that custom behav...
Manages the organisation and rendering of a 'scene' i.e.
IlluminationRenderStage
Describes the stage of rendering when performing complex illumination.
This is the main class for the compiler.
The ScriptTranslatorManager manages the lifetime and access to script translators.
This class translates script AST (abstract syntax tree) into Ogre resources.
Reference-counted shared pointer, used for objects where implicit destruction is required.
Template class for creating single-instance global classes.
Definition: OgreSingleton.h:65
Class representing an approach to rendering this particular Material.
Definition: OgreTechnique.h:54
Class representing the state of a single texture unit during a Pass of a Technique,...
An abstraction of a viewport, i.e.
Definition: OgreViewport.h:58
vector< String >::type StringVector
FogMode
Fog modes.
Definition: OgreCommon.h:122
IlluminationStage
Categorisation of passes for the purpose of additive lighting.
Definition: OgrePass.h:50
@ IS_UNKNOWN
Not determined.
Definition: OgrePass.h:58
vector< RenderState * >::type RenderStateList
_StringBase String
bool operator()(const MatGroupPair &p1, const MatGroupPair &p2) const
std::map< K, V, P, A > type
std::vector< T, A > type