OGRE-Next: Ogre::HlmsLowLevel Class Reference

| OGRE-Next 3.0.0 Object-Oriented Graphics Rendering Engine

Loading...
Searching...
No Matches
Ogre::HlmsLowLevel Class Reference
Component » Material

This is an HLMS implementation that acts as proxy to use the Material system from Ogre 1.9 The older material system is data-driven (thanks to AutoParamDataSource) compared to HLMS where the user needs to write its own implementation in C++ (or modify an exisiting one). More...

`#include <OgreHlmsLowLevel.h>`

Inheritance diagram for Ogre::HlmsLowLevel:
[legend]

## Public Member Functions
| HlmsLowLevel ()
| ~HlmsLowLevel () override
AutoParamDataSource * | _getAutoParamDataSource () const
void | calculateHashFor (Renderable *renderable, uint32 &outHash, uint32 &outCasterHash) override
| Called by the renderable when either it changes the material, or its properties change (e.g.
void | executeCommand (const MovableObject *movableObject, Renderable *renderable, bool casterPass)
uint32 | fillBuffersFor (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, uint32 lastTextureHash) override
| Fills the constant buffers.
uint32 | fillBuffersForV1 (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, CommandBuffer *commandBuffer) override
uint32 | fillBuffersForV2 (const HlmsCache *cache, const QueuedRenderable &queuedRenderable, bool casterPass, uint32 lastCacheHash, CommandBuffer *commandBuffer) override
HlmsCache | preparePassHash (const Ogre::CompositorShadowNode *shadowNode, bool casterPass, bool dualParaboloid, SceneManager *sceneManager) override
| Called every frame by the Render Queue to cache the properties needed by this pass.
Public Member Functions inherited from Ogre::Hlms
| Hlms (HlmsTypes type, const String &typeName, Archive *dataFolder, ArchiveVec *libraryFolders)
virtual | ~Hlms ()
virtual void | _changeRenderSystem (RenderSystem *newRs)
void | _clearShaderCache ()
virtual void | _collectSamplerblocks (set< const HlmsSamplerblock * >::type &outSamplerblocks, const HlmsDatablock *datablock) const
void | _compileShaderFromPreprocessedSource (const RenderableCache &mergedCache, const String source[NumShaderTypes])
int32 | _getProperty (IdString key, int32 defaultVal=0) const
virtual void | _loadJson (const rapidjson::Value &jsonValue, const HlmsJson::NamedBlocks &blocks, HlmsDatablock *datablock, const String &resourceGroup, HlmsJsonListener *listener, const String &additionalTextureExtension) const
| Loads datablock values from a JSON value.
void | _notifyManager (HlmsManager *manager)
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.
void | _setTextureReg (ShaderType shaderType, const char *texName, int32 texUnit)
virtual void | analyzeBarriers (BarrierSolver &barrierSolver, ResourceTransitionArray &resourceTransitions, Camera *renderingCamera, const bool bCasterPass)
void | compileShaderCode (ShaderCodeCache &codeCache)
| Compiles input properties and adds it to the shader code cache.
HlmsDatablock * | createDatablock (IdString name, const String &refName, const HlmsMacroblock &macroblockRef, const HlmsBlendblock &blendblockRef, const HlmsParamVec &paramVec, bool visibleToManager=true, const String &filename=BLANKSTRING, const String &resourceGroup=BLANKSTRING)
| Creates a unique datablock that can be shared by multiple renderables.
void | destroyAllDatablocks ()
| Destroys all datablocks created with createDatablock().
void | destroyDatablock (IdString name)
| Destroys a datablocks given its name.
virtual void | frameEnded ()
| Called when the frame has fully ended (ALL passes have been executed to all RTTs).
uint16 | getAreaLightsApproxLimit () const
uint16 | getAreaLightsLtcLimit () const
HlmsDatablock * | getDatablock (IdString name) const
| Finds an existing datablock based on its name (.
const HlmsDatablockMap & | getDatablockMap () const
| Returns all datablocks owned by this Hlms, including the default one.
Archive * | getDataFolder ()
HlmsDatablock * | getDefaultDatablock () const
| Datablock to use when another datablock failed or none was specified.
bool | getFastShaderBuildHack () const
| Returns true if shaders are being compiled with Fast Shader Build Hack (D3D11 only).
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()).
HlmsManager * | getHlmsManager () const
HlmsListener * | getListener () const
| Returns the current listener.
const HlmsCache * | getMaterial (HlmsCache const *lastReturnedValue, const HlmsCache &passCache, const QueuedRenderable &queuedRenderable, bool casterPass)
| Retrieves an HlmsCache filled with the GPU programs to be used by the given renderable.
uint16 | getMaxNonCasterDirectionalLights () const
const String * | getNameStr (IdString name) const
| Returns the string name associated with its hashed name (this was passed as refName in createDatablock()).
const LibraryVec & | getPiecesLibrary () const
ArchiveVec | getPiecesLibraryAsArchiveVec () const
PrecisionMode | getPrecisionMode () const
| Returns requested precision mode (i.e.
RenderSystem * | getRenderSystem () const
const ShaderCodeCacheVec & | getShaderCodeCache () const
const String & | getShaderProfile () const
IdString | getShaderSyntax () const
bool | getStaticBranchingLights () const
PrecisionMode | getSupportedPrecisionMode () const
| Some GPUs don't support all precision modes.
void | getTemplateChecksum (uint64 outHash[2]) const
HlmsTypes | getType () const
IdString | getTypeName () const
const String & | getTypeNameStr () const
bool | parseOffline (const String &filename, String &inBuffer, String &outBuffer)
| For standalone parsing.
virtual void | postCommandBufferExecution (CommandBuffer *commandBuffer)
| This gets called after executing the command buffer.
virtual void | preCommandBufferExecution (CommandBuffer *commandBuffer)
| This gets called right before executing the command buffer.
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.
void | saveAllTexturesFromDatablocks (const String &folderPath, set< String >::type &savedTextures, bool saveOitd, bool saveOriginal, HlmsTextureExportListener *listener)
void | setAreaLightForwardSettings (uint16 areaLightsApproxLimit, uint16 areaLightsLtcLimit)
| Area lights use regular Forward.
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.
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.
void | setMaxNonCasterDirectionalLights (uint16 maxLights)
| Non-caster directional lights are hardcoded into shaders.
void | setPrecisionMode (PrecisionMode precisionMode)
| Sets the precision mode of Hlms.
virtual void | setStaticBranchingLights (bool staticBranchingLights)
| By default shadow-caster spot and point lights are hardcoded into shaders.

## Additional Inherited Members
Public Types inherited from Ogre::Hlms
typedef std::map< IdString, DatablockEntry > | HlmsDatablockMap
typedef vector< Library >::type | LibraryVec
enum | LightGatheringMode { LightGatherForward , LightGatherForwardPlus , LightGatherDeferred , LightGatherNone }
enum | PrecisionMode { PrecisionFull32 , PrecisionMidf16 , PrecisionRelaxed }
Static Public Member Functions inherited from Ogre::Hlms
static bool | findParamInVec (const HlmsParamVec &paramVec, IdString key, String &inOut)
| Finds the parameter with key 'key' in the given 'paramVec'.
static int32 | getProperty (const HlmsPropertyVec &properties, IdString key, int32 defaultVal=0)
| Utility helper, mostly useful to HlmsListener implementations.
static void | setProperty (HlmsPropertyVec &properties, IdString key, int32 value)
| Utility helper, mostly useful to HlmsListener implementations.

## Detailed Description

This is an HLMS implementation that acts as proxy to use the Material system from Ogre 1.9 The older material system is data-driven (thanks to AutoParamDataSource) compared to HLMS where the user needs to write its own implementation in C++ (or modify an exisiting one).

Old material system is still useful for:

- Quick prototyping of shaders
- Postprocessing effects. Take in mind that the old system is slow compared to Hlms. So don't use this proxy for hundreds or more entities.
  Remarks
    Only Materials with programmable shaders are supported. Fixed Function pipeline is not allowed (use the other HLMS types if you need easy to use materials)

## Constructor & Destructor Documentation

## ◆ HlmsLowLevel()

Ogre::HlmsLowLevel::HlmsLowLevel | ( |  | ) |

## ◆ ~HlmsLowLevel()

Ogre::HlmsLowLevel::~HlmsLowLevel | ( |  | ) |
| override

## Member Function Documentation

## ◆ _getAutoParamDataSource()

AutoParamDataSource * Ogre::HlmsLowLevel::_getAutoParamDataSource | ( |  | ) | const
| inline

## ◆ calculateHashFor()

void Ogre::HlmsLowLevel::calculateHashFor | ( | Renderable * | renderable,
|  | uint32 & | outHash,
|  | uint32 & | outCasterHash )
| overridevirtual

Called by the renderable when either it changes the material, or its properties change (e.g.

the mesh' uvs are stripped)

Parameters

  renderable | The renderable the material will be used on.
  movableObject | The MovableObject the material will be used on (usually the parent of renderable)
  outHash | A hash. This hash references property parameters that are already cached.

Reimplemented from Ogre::Hlms.

## ◆ executeCommand()

void Ogre::HlmsLowLevel::executeCommand | ( | const MovableObject * | movableObject,
|  | Renderable * | renderable,
|  | bool | casterPass )

## ◆ fillBuffersFor()

uint32 Ogre::HlmsLowLevel::fillBuffersFor | ( | const HlmsCache * | cache,
|  | const QueuedRenderable & | queuedRenderable,
|  | bool | casterPass,
|  | uint32 | lastCacheHash,
|  | uint32 | lastTextureHash )
| overridevirtual

Fills the constant buffers.

Gets executed right before drawing the mesh.

Parameters

  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

Returns
  New Texture hash (may be equal or different to lastTextureHash).

Implements Ogre::Hlms.

## ◆ fillBuffersForV1()

uint32 Ogre::HlmsLowLevel::fillBuffersForV1 | ( | const HlmsCache * | cache,
|  | const QueuedRenderable & | queuedRenderable,
|  | bool | casterPass,
|  | uint32 | lastCacheHash,
|  | CommandBuffer * | commandBuffer )
| overridevirtual

Implements Ogre::Hlms.

## ◆ fillBuffersForV2()

uint32 Ogre::HlmsLowLevel::fillBuffersForV2 | ( | const HlmsCache * | cache,
|  | const QueuedRenderable & | queuedRenderable,
|  | bool | casterPass,
|  | uint32 | lastCacheHash,
|  | CommandBuffer * | commandBuffer )
| overridevirtual

Implements Ogre::Hlms.

## ◆ preparePassHash()

HlmsCache Ogre::HlmsLowLevel::preparePassHash | ( | const Ogre::CompositorShadowNode * | shadowNode,
|  | bool | casterPass,
|  | bool | dualParaboloid,
|  | SceneManager * | sceneManager )
| overridevirtual

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

Parameters

  shadowNode | The shadow node currently in effect. Can be null.

Returns
  A hash and cached property parameters. Unlike calculateHashFor(), the cache must be kept by the caller and not by us (because it may change every frame and is one for the whole pass, but Mesh' properties usually stay consistent through its lifetime but may differ per mesh)

Reimplemented from Ogre::Hlms.

The documentation for this class was generated from the following file:

- OgreHlmsLowLevel.h