![]() |
OGRE
2.1.0unstable
Object-Oriented Graphics Rendering Engine
|
User Interface (2D) implementation specfically designed for OpenGL ES 2.0 and other RenderSystems which do not support uniform buffers. More...
#include <OgreHlmsUnlitMobile.h>
Public Types | |
typedef std::map< IdString, DatablockEntry > | HlmsDatablockMap |
typedef vector< Library >::type | LibraryVec |
enum | LightGatheringMode { LightGatherForward, LightGatherForwardPlus, LightGatherDeferred, LightGatherNone } |
Public Member Functions | |
HlmsUnlitMobile (Archive *dataFolder, ArchiveVec *libraryFolders) | |
~HlmsUnlitMobile () | |
virtual void | _changeRenderSystem (RenderSystem *newRs) |
void | _clearShaderCache (void) |
virtual void | _collectSamplerblocks (set< const HlmsSamplerblock * >::type &outSamplerblocks, const HlmsDatablock *datablock) const |
int32 | _getProperty (IdString key, int32 defaultVal=0) const |
virtual void | _loadJson (const rapidjson::Value &jsonValue, const HlmsJson::NamedBlocks &blocks, HlmsDatablock *datablock, HlmsJsonListener *listener, const String &additionalTextureExtension) const |
Loads datablock values from a JSON value. More... | |
void | _notifyBlendblockDestroyed (uint16 id) |
When a macroblock is destroyed, the PSO is no longer valid. More... | |
void | _notifyInputLayoutDestroyed (uint16 id) |
When a macroblock is destroyed, the PSO is no longer valid. More... | |
void | _notifyMacroblockDestroyed (uint16 id) |
When a macroblock is destroyed, the PSO is no longer valid. More... | |
void | _notifyManager (HlmsManager *manager) |
void | _notifyShadowMappingBackFaceSetting (void) |
Internal use. More... | |
void | _notifyV1InputLayoutDestroyed (uint16 id) |
When a macroblock is destroyed, the PSO is no longer valid. More... | |
virtual void | _saveJson (const HlmsDatablock *datablock, String &outString, HlmsJsonListener *listener, const String &additionalTextureExtension) const |
void | _setProperty (IdString key, int32 value) |
For debugging stuff. I.e. the Command line uses it for testing manually set properties. More... | |
virtual void | calculateHashFor (Renderable *renderable, uint32 &outHash, uint32 &outCasterHash) |
Called by the renderable when either it changes the material, or its properties change (e.g. More... | |
HlmsDatablock * | createDatablock (IdString name, const String &refName, const HlmsMacroblock ¯oblockRef, const HlmsBlendblock &blendblockRef, const HlmsParamVec ¶mVec, bool visibleToManager=true, const String &filename=BLANKSTRING, const String &resourceGroup=BLANKSTRING) |
Creates a unique datablock that can be shared by multiple renderables. More... | |
void | destroyAllDatablocks (void) |
Destroys all datablocks created with @createDatablock. More... | |
void | destroyDatablock (IdString name) |
Destroys a datablocks given its name. More... | |
virtual uint32 | fillBuffersFor (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, CommandBuffer *commandBuffer) |
virtual uint32 | fillBuffersFor (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, uint32 lastTextureHash) |
Fills the constant buffers. More... | |
virtual uint32 | fillBuffersForV1 (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, CommandBuffer *commandBuffer)=0 |
virtual uint32 | fillBuffersForV2 (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, CommandBuffer *commandBuffer)=0 |
virtual void | frameEnded (void) |
Called when the frame has fully ended (ALL passes have been executed to all RTTs) More... | |
uint16 | getAreaLightsLimit (void) const |
uint8 | getAreaLightsRoundMultiple (void) const |
HlmsDatablock * | getDatablock (IdString name) const |
Finds an existing datablock based on its name (. More... | |
const HlmsDatablockMap & | getDatablockMap (void) const |
Returns all datablocks owned by this Hlms, including the default one. More... | |
Archive * | getDataFolder (void) |
HlmsDatablock * | getDefaultDatablock (void) const |
Datablock to use when another datablock failed or none was specified. More... | |
void | getFilenameAndResourceGroup (IdString name, String const **outFilename, String const **outResourceGroup) const |
Returns the filaname & resource group a datablock was created from, and is associated with its hashed name (this was passed as in @createDatablock). More... | |
bool | getHighQuality (void) const |
HlmsManager * | getHlmsManager (void) const |
HlmsListener * | getListener (void) const |
Returns the current listener. More... | |
const HlmsCache * | getMaterial (HlmsCache const *lastReturnedValue, const HlmsCache &passCache, const QueuedRenderable &queuedRenderable, uint8 inputLayout, bool casterPass) |
Retrieves an HlmsCache filled with the GPU programs to be used by the given renderable. More... | |
const String * | getNameStr (IdString name) const |
Returns the string name associated with its hashed name (this was passed as refName in @createDatablock). More... | |
const LibraryVec & | getPiecesLibrary (void) const |
ArchiveVec | getPiecesLibraryAsArchiveVec (void) const |
RenderSystem * | getRenderSystem (void) const |
HlmsTypes | getType (void) const |
IdString | getTypeName (void) const |
const String & | getTypeNameStr (void) const |
void | operator delete (void *ptr) |
void | operator delete (void *ptr, const char *, int, const char *) |
void | operator delete (void *ptr, void *) |
void | operator delete[] (void *ptr) |
void | operator delete[] (void *ptr, const char *, int, const char *) |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, const char *file, int line, const char *func) |
operator new, with debug line info More... | |
void * | operator new (size_t sz, void *ptr) |
placement operator new More... | |
void * | operator new[] (size_t sz) |
void * | operator new[] (size_t sz, const char *file, int line, const char *func) |
array operator new, with debug line info More... | |
virtual void | postCommandBufferExecution (CommandBuffer *commandBuffer) |
This gets called after executing the command buffer. More... | |
virtual void | preCommandBufferExecution (CommandBuffer *commandBuffer) |
This gets called right before executing the command buffer. More... | |
virtual HlmsCache | preparePassHash (const Ogre::CompositorShadowNode *shadowNode, bool casterPass, bool dualParaboloid, SceneManager *sceneManager) |
Called every frame by the Render Queue to cache the properties needed by this pass. More... | |
virtual void | reloadFrom (Archive *newDataFolder, ArchiveVec *libraryFolders=0) |
Destroys all the cached shaders and in the next opportunity will recreate them from the new location. More... | |
void | saveAllTexturesFromDatablocks (const String &folderPath, set< String >::type &savedTextures, bool saveOitd, bool saveOriginal, HlmsTextureExportListener *listener) |
void | setAreaLightForwardSettings (uint16 areaLightsLimit, uint8 areaLightsRoundMultiple) |
Area lights use regular Forward. More... | |
void | setDebugOutputPath (bool enableDebugOutput, bool outputProperties, const String &path=BLANKSTRING) |
Call to output the automatically generated shaders (which are usually made from templates) on the given folder for inspection, analyzing, debugging, etc. More... | |
void | setHighQuality (bool highQuality) |
Sets the quality of the Hlms. More... | |
void | setListener (HlmsListener *listener) |
Sets a listener to extend an existing Hlms implementation's with custom code, without having to rewrite it or modify the source code directly. More... | |
Static Public Member Functions | |
static bool | findParamInVec (const HlmsParamVec ¶mVec, IdString key, String &inOut) |
Finds the parameter with key 'key' in the given 'paramVec'. More... | |
static int32 | getProperty (const HlmsPropertyVec &properties, IdString key, int32 defaultVal=0) |
Utility helper, mostly useful to HlmsListener implementations. More... | |
User Interface (2D) implementation specfically designed for OpenGL ES 2.0 and other RenderSystems which do not support uniform buffers.
|
inherited |
|
inherited |
|
inherited |
Ogre::HlmsUnlitMobile::HlmsUnlitMobile | ( | Archive * | dataFolder, |
ArchiveVec * | libraryFolders | ||
) |
Ogre::HlmsUnlitMobile::~HlmsUnlitMobile | ( | ) |
|
virtualinherited |
Reimplemented in Ogre::HlmsPbs, Ogre::HlmsCompute, Ogre::HlmsBufferManager, and Ogre::HlmsUnlit.
|
inherited |
|
inlinevirtualinherited |
Reimplemented in Ogre::HlmsPbs, and Ogre::HlmsUnlit.
|
inlinevirtualinherited |
Loads datablock values from a JSON value.
jsonValue | JSON Object containing the definition of this datablock. |
blocks | All the loaded Macro-, Blend- & Samplerblocks the JSON has defined and may be referenced by the datablock declaration. |
datablock | Datablock to fill the values. |
Reimplemented in Ogre::HlmsPbs, and Ogre::HlmsUnlit.
|
inherited |
When a macroblock is destroyed, the PSO is no longer valid.
We need to destroy it. Otherwise when we try to reuse a macroblock with the same internal ID but different settings, the old (wrong) PSO will be used.
|
inherited |
When a macroblock is destroyed, the PSO is no longer valid.
We need to destroy it. Otherwise when we try to reuse a macroblock with the same internal ID but different settings, the old (wrong) PSO will be used.
|
inherited |
When a macroblock is destroyed, the PSO is no longer valid.
We need to destroy it. Otherwise when we try to reuse a macroblock with the same internal ID but different settings, the old (wrong) PSO will be used.
|
inlineinherited |
|
inherited |
Internal use.
|
inherited |
When a macroblock is destroyed, the PSO is no longer valid.
We need to destroy it. Otherwise when we try to reuse a macroblock with the same internal ID but different settings, the old (wrong) PSO will be used.
|
inlinevirtualinherited |
Reimplemented in Ogre::HlmsPbs, and Ogre::HlmsUnlit.
For debugging stuff. I.e. the Command line uses it for testing manually set properties.
|
virtual |
Called by the renderable when either it changes the material, or its properties change (e.g.
the mesh' uvs are stripped)
renderable | The renderable the material will be used on. |
movableObject | The MovableObject the material will be used on (usually the parent of renderable) |
Reimplemented from Ogre::Hlms.
|
inherited |
Creates a unique datablock that can be shared by multiple renderables.
name | Name of the Datablock, must be unique within all Hlms types, not just this one. 99% you want this to be IdString( refName ); however this is not enforced. |
refName | Name of the Datablock. The engine doesn't use this value at all. It is only useful for UI editors which want to enumerate all existing datablocks and display its name to the user. |
macroblockRef | @See HlmsManager::getMacroblock |
blendblockRef | @See HlmsManager::getBlendblock |
paramVec | Key - String Value list of paramters. MUST BE SORTED. |
visibleToManager | When false, HlmsManager::getDatablock won't find this datablock. True by default |
filename | Filename in which it was defined, so that this information can be retrieved later by the user if needed. This is only for informational purposes. |
resourceGroup | ResourceGroup. See filename param. |
|
inherited |
Destroys all datablocks created with @createDatablock.
Caller is responsible for ensuring those pointers aren't still in use (i.e. dangling pointers) The default datablock will be recreated.
|
inherited |
Destroys a datablocks given its name.
Caller is responsible for ensuring those pointers aren't still in use (i.e. dangling pointers)
|
virtual |
|
virtual |
Fills the constant buffers.
Gets executed right before drawing the mesh.
cache | Current cache of Shaders to be used. |
queuedRenderable | The Renderable-MovableObject pair about to be rendered. |
casterPass | Whether this is a shadow mapping caster pass. |
lastCacheHash | The hash of the cache of shaders that was the used by the previous renderable. |
lastTextureHash | Last Texture Hash, used to let the Hlms know whether the textures should be changed again |
Implements Ogre::Hlms.
|
pure virtualinherited |
Implemented in Ogre::HlmsPbs, Ogre::HlmsCompute, Ogre::HlmsUnlit, and Ogre::HlmsLowLevel.
|
pure virtualinherited |
Implemented in Ogre::HlmsPbs, Ogre::HlmsCompute, Ogre::HlmsUnlit, and Ogre::HlmsLowLevel.
|
staticinherited |
Finds the parameter with key 'key' in the given 'paramVec'.
If found, outputs the value to 'inOut', otherwise leaves 'inOut' as is.
|
inlinevirtualinherited |
Called when the frame has fully ended (ALL passes have been executed to all RTTs)
Reimplemented in Ogre::HlmsPbs, Ogre::HlmsBufferManager, and Ogre::HlmsUnlit.
|
inlineinherited |
|
inlineinherited |
|
inherited |
Finds an existing datablock based on its name (.
|
inlineinherited |
Returns all datablocks owned by this Hlms, including the default one.
|
inlineinherited |
|
inherited |
Datablock to use when another datablock failed or none was specified.
|
inherited |
Returns the filaname & resource group a datablock was created from, and is associated with its hashed name (this was passed as in @createDatablock).
Returns null ptr if not found. Note that it may also be a valid pointer but contain an empty string. The reason this String doesn't live in HlmsDatablock is to prevent cache trashing (datablocks are hot iterated every frame, and the filename & resource groups are rarely ever used) Usage: String const *filename; String const *resourceGroup; datablock->getFilenameAndResourceGroup( &filename, &resourceGroup ); if( filename && resourceGroup && !filename->empty() && !resourceGroup->empty() ) { //Valid filename & resource group. }
|
inlineinherited |
|
inlineinherited |
|
inherited |
Returns the current listener.
|
inherited |
Retrieves an HlmsCache filled with the GPU programs to be used by the given renderable.
If the shaders have already been created (i.e. whether for this renderable, or another one) it gets them from a cache. Otherwise we create it. It assumes that renderable->setHlms( this, parameters ) has already called.
lastReturnedValue | The last value returned by getMaterial. |
passCache | The cache returned by @preparePassHash. |
renderable | The renderable the caller wants us to give the shaders. |
movableObject | The MovableObject owner of the renderable (we need it to know if renderable should cast shadows) |
casterPass | True if this pass is the shadow mapping caster pass, false otherwise |
Returns the string name associated with its hashed name (this was passed as refName in @createDatablock).
Returns null ptr if not found. The reason this String doesn't live in HlmsDatablock is to prevent cache trashing (datablocks are hot iterated every frame, and the full name is rarely ever used)
|
inlineinherited |
|
inherited |
|
staticinherited |
Utility helper, mostly useful to HlmsListener implementations.
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
operator new, with debug line info
|
inlineinherited |
placement operator new
|
inlineinherited |
|
inlineinherited |
array operator new, with debug line info
|
inlinevirtualinherited |
This gets called after executing the command buffer.
Reimplemented in Ogre::HlmsPbs, and Ogre::HlmsBufferManager.
|
inlinevirtualinherited |
This gets called right before executing the command buffer.
Reimplemented in Ogre::HlmsBufferManager.
|
virtual |
Called every frame by the Render Queue to cache the properties needed by this pass.
i.e. Number of PSSM splits, number of shadow casting lights, etc
shadowNode | The shadow node currently in effect. Can be null. |
Reimplemented from Ogre::Hlms.
|
virtualinherited |
Destroys all the cached shaders and in the next opportunity will recreate them from the new location.
This is very useful for fast iteration and real-time editing of Hlms shader templates.
libraryFolders | When null pointer, the library folders paths won't be changed at all (but still will be reloaded). When non-null pointer, the library folders will be overwriten. Pass an empty container if you want to stop using libraries. |
Reimplemented in Ogre::HlmsCompute.
|
inherited |
|
inherited |
Area lights use regular Forward.
areaLightsLimit | Maximum number of area lights that will be considered by the shader. Default value is 1. Use 0 to disable area lights. |
areaLightsRoundMultiple | To prevent frequent shader recompiles, you can round the number of area lights to the next multiple. |
For example when areaLightsRoundMultiple = 1, if there are two area lights in the frustum, shader 'A' will be used. If the camera moves and now only one are light is in the frustum, shader 'B' will be used.
This maximizes GPU performance, but if the number of area lights is constantly jumping, you may see a lot of recompiles until all variations are cached, which can be very slow.
By setting for example, areaLightsRoundMultiple = 2, we will always generate shader variations that use 2 area lights, even if there's only 1 area light in the camera (if there's none, we use a different variation). The unused slot will just output black. If there's 3 area lights, the shader variation will be compiled to use 4. This sacrifices some pixel shader GPU performance, but prevents permutation explosion.
By setting areaLightsLimit = areaLightsRoundMultiple, you will minimize the number of permutations and stabilize frame rates; but average framerate may be lower if there are less area lights.
Default value is 1. This value cannot be 0. This value must be <= areaLightsLimit, unless areaLightsLimit is 0.
|
inherited |
Call to output the automatically generated shaders (which are usually made from templates) on the given folder for inspection, analyzing, debugging, etc.
enableDebugOutput | Whether to enable or disable dumping the shaders into a folder |
outputProperties | Whether to dump properties and pieces at the beginning of the shader file. This is very useful for determining what caused Ogre to compile a new variation. Note that this setting may not always produce valid shader code in the dumped files (but it we'll still produce valid shader code while at runtime) If you want to compile the dumped file and it is invalid, just strip this info. |
path | Path location on where to dump it. Should end with slash for proper concatenation (i.e. C:/path/ instead of C:/path; or /home/user/ instead of /home/user) |
|
inherited |
Sets the quality of the Hlms.
This function is most relevant for mobile and almost or completely ignored by Desktop. The default value is false.
|
inherited |
Sets a listener to extend an existing Hlms implementation's with custom code, without having to rewrite it or modify the source code directly.
listener | Listener pointer. Use null to disable. |