27#ifndef _ShaderGenerator_
28#define _ShaderGenerator_
360 const String& srcGroupName,
const String& dstMaterialName,
const String& dstGroupName);
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));
715 bool empty()
const {
return mTechniqueEntries.empty(); }
730 void invalidate(
const String& materialName,
const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
735 bool validate(
const String& materialName,
const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
803 const LightList* pLightList,
bool suppressRenderStateChanges)
805 mOwner->notifyRenderSingleObject(rend, pass, source, pLightList, suppressRenderStateChanges);
827 mOwner->preFindVisibleObjects(source, irs, v);
842 Camera* camera,
size_t iteration)
870 return mOwner->getNumTranslators();
876 return mOwner->getTranslator(node);
1060 friend class FFPRenderStateBuilder;
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.
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...
Representation of a dynamic light source in the scene.
Class for serializing Materials to / from a .material script.
Class defining a single pass of a Technique (of a Material), i.e.
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.
SGTechniqueList mTechniqueEntries
SGMaterial(const String &materialName, const String &groupName)
Class constructor.
const String & getMaterialName() const
Get the material name.
Shader generator pass wrapper class.
Pass * getSrcPass()
Get source pass.
SGPass(SGTechnique *parent, Pass *srcPass, Pass *dstPass, IlluminationStage stage)
void setCustomRenderState(RenderState *customRenderState)
Set the custom render state of this pass.
RenderState * mCustomRenderState
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.
TargetRenderState * mTargetRenderState
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.
SGRenderObjectListener(ShaderGenerator *owner)
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.
Shader generator scene manager sub class.
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...
SGSceneManagerListener(ShaderGenerator *owner)
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...
Shader generator scheme class.
RenderState * mRenderState
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.
SGTechniqueList mTechniqueEntries
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.
SGScriptTranslatorManager(ShaderGenerator *owner)
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.
Technique * mDstTechnique
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.
RenderStateList mCustomRenderStates
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.
String mDstTechniqueSchemeName
Technique * mSrcTechnique
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.
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.
std::pair< RenderState *, bool > RenderStateCreateOrRetrieveResult
SceneManagerMap::const_iterator SceneManagerConstIterator
RenderState * getRenderState(const String &schemeName, const String &materialName, const String &groupName, unsigned short passIndex)
Get render state of specific pass.
SceneManager * mActiveSceneMgr
ProgramManager * mProgramManager
map< String, SGScheme * >::type SGSchemeMap
const String & getTargetLanguage() const
Return the target shader language currently in use.
SGMaterialMap mMaterialEntriesMap
FileSystemLayer * mFSLayer
void removeSceneManager(SceneManager *sceneMgr)
Remove a scene manager from the shader generator scene managers list.
SGMaterialConstIterator findMaterialEntryIt(const String &materialName, const String &groupName) const
bool _initialize()
Initialize the shader generator instance.
SGSchemeMap::iterator SGSchemeIterator
void setVertexShaderProfiles(const String &vertexShaderProfiles)
Set the output vertex shader target profiles.
void setFragmentShaderProfiles(const String &fragmentShaderProfiles)
Set the output fragment shader target profiles.
SGTechniqueMap::iterator SGTechniqueMapIterator
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.
StringVector mFragmentShaderProfilesList
SGPassList::const_iterator SGPassConstIterator
bool validateMaterial(const String &schemeName, const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate specific material scheme.
String mFragmentShaderProfiles
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.
SGPassList::iterator SGPassIterator
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
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.
std::pair< SGScheme *, bool > SchemeCreateOrRetrieveResult
bool validateScheme(const String &schemeName)
Validate a given scheme.
SGRenderObjectListener * mRenderObjectListener
ShaderGenerator()
Class default constructor.
SGMaterialMap::iterator SGMaterialIterator
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
bool mCreateShaderOverProgrammablePass
vector< SGPass * >::type SGPassList
RenderStateCreateOrRetrieveResult createOrRetrieveRenderState(const String &schemeName)
Returns a requested render state.
const String & getFragmentShaderProfiles() const
Get the output fragment shader target profiles.
bool removeCustomScriptTranslator(const String &key)
Remove custom script translator.
SubRenderStateFactoryMap::const_iterator SubRenderStateFactoryConstIterator
void _destroy()
Destory the shader generator instance.
SubRenderStateFactoryMap::iterator SubRenderStateFactoryIterator
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.
SGTechniqueList::const_iterator SGTechniqueConstIterator
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.
StringVector mVertexShaderProfilesList
SubRenderState * createSubRenderState(const String &type)
Create an instance of sub render state from a given type.
SGScriptTranslator mCoreScriptTranslator
map< MatGroupPair, SGMaterial *, MatGroupPair_less >::type SGMaterialMap
SceneManagerMap::iterator SceneManagerIterator
String mVertexShaderProfiles
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.
SGSchemeMap::const_iterator SGSchemeConstIterator
SchemeCreateOrRetrieveResult createOrRetrieveScheme(const String &schemeName)
Returns a requested scheme.
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.
SGMaterialMap::const_iterator SGMaterialConstIterator
bool removeShaderBasedTechnique(const String &materialName, const String &srcTechniqueSchemeName, const String &dstTechniqueSchemeName)
Remove shader based technique from a given technique.
SGTechniqueList::iterator SGTechniqueIterator
map< String, ScriptTranslator * >::type SGScriptTranslatorMap
void addSubRenderStateFactory(SubRenderStateFactory *factory)
Add sub render state factory.
SceneManagerMap mSceneManagerMap
bool addCustomScriptTranslator(const String &key, ScriptTranslator *translator)
Add custom script translator.
void setVertexShaderOutputsCompactPolicy(VSOutputCompactPolicy policy)
Set the vertex shader outputs compaction policy.
bool mActiveViewportValid
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.
static bool initialize()
Initialize the Shader Generator System.
SGSchemeMap mSchemeEntriesMap
void createSubRenderStateExFactories()
Create sub render state core extensions factories.
SGScriptTranslatorMap::iterator SGScriptTranslatorIterator
map< String, SubRenderStateFactory * >::type SubRenderStateFactoryMap
bool validateMaterialIlluminationPasses(const String &schemeName, const String &materialName, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Validate specific material scheme.
vector< SGTechnique * >::type SGTechniqueList
void removeSubRenderStateFactory(SubRenderStateFactory *factory)
Remove sub render state factory.
SGTechniqueMap mTechniqueEntriesMap
FFPRenderStateBuilder * mFFPRenderStateBuilder
void removeAllShaderBasedTechniques()
Remove all shader based techniques that created by this shader generator.
const String & getVertexShaderProfiles() const
Get the output vertex shader target profiles.
std::pair< String, String > MatGroupPair
map< SGTechnique *, SGTechnique * >::type SGTechniqueMap
void preFindVisibleObjects(SceneManager *source, SceneManager::IlluminationRenderStage irs, Viewport *v)
Called from the sub class of the SceneManager::Listener when finding visible object process starts.
void destroySubRenderStateExFactories()
Destroy sub render state core extensions factories.
static ShaderGenerator & getSingleton()
Override standard Singleton retrieval.
map< String, SceneManager * >::type SceneManagerMap
SGScriptTranslatorManager * mScriptTranslatorManager
SGScriptTranslatorMap mScriptTranslatorsMap
SGScriptTranslatorMap::const_iterator SGScriptTranslatorConstIterator
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.
Class representing an approach to rendering this particular Material.
Class representing the state of a single texture unit during a Pass of a Technique,...
An abstraction of a viewport, i.e.
vector< String >::type StringVector
IlluminationStage
Categorisation of passes for the purpose of additive lighting.
@ IS_UNKNOWN
Not determined.
vector< RenderState * >::type RenderStateList
bool operator()(const MatGroupPair &p1, const MatGroupPair &p2) const
std::map< K, V, P, A > type