OGRE-Next  4.0.0unstable
Object-Oriented Graphics Rendering Engine
Ogre::HlmsLowLevel Class Reference

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:

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. More...
 
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. More...
 
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. More...
 
- 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], const uint32 shaderCounter, size_t tid)
 
int32 _getProperty (size_t tid, 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. More...
 
void _notifyManager (HlmsManager *manager)
 
virtual void _saveJson (const HlmsDatablock *datablock, String &outString, HlmsJsonListener *listener, const String &additionalTextureExtension) const
 
void _setNumThreads (size_t numThreads)
 
void _setProperty (size_t tid, IdString key, int32 value)
 For debugging stuff. I.e. the Command line uses it for testing manually set properties. More...
 
void _setShadersGenerated (uint32 shadersGenerated)
 
void _setTextureReg (size_t tid, ShaderType shaderType, const char *texName, int32 texUnit)
 
void _tagShaderCodeCacheUpToDate ()
 
virtual void analyzeBarriers (BarrierSolver &barrierSolver, ResourceTransitionArray &resourceTransitions, Camera *renderingCamera, const bool bCasterPass)
 
void compileShaderCode (ShaderCodeCache &codeCache, uint32 shaderCounter, size_t tid)
 Compiles input properties and adds it to the shader code cache. More...
 
void compileStubEntry (const HlmsCache &passCache, HlmsCache *reservedStubEntry, QueuedRenderable queuedRenderable, uint32 renderableHash, uint32 finalHash, size_t tid)
 Called by ParallelHlmsCompileQueue to finish the job started in getMaterial() More...
 
HlmsDatablockcreateDatablock (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. More...
 
void destroyAllDatablocks ()
 Destroys all datablocks created with createDatablock(). More...
 
void destroyDatablock (IdString name)
 Destroys a datablocks given its name. More...
 
virtual void frameEnded ()
 Called when the frame has fully ended (ALL passes have been executed to all RTTs) More...
 
uint16 getAreaLightsApproxLimit () const
 
uint16 getAreaLightsLtcLimit () const
 
HlmsDatablockgetDatablock (IdString name) const
 Finds an existing datablock based on its name (. More...
 
const HlmsDatablockMapgetDatablockMap () const
 Returns all datablocks owned by this Hlms, including the default one. More...
 
ArchivegetDataFolder ()
 
HlmsDatablockgetDefaultDatablock () const
 Datablock to use when another datablock failed or none was specified. More...
 
bool getFastShaderBuildHack () const
 Returns true if shaders are being compiled with Fast Shader Build Hack (D3D11 only) 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...
 
HlmsManagergetHlmsManager () const
 
HlmsListenergetListener () const
 Returns the current listener. More...
 
const HlmsCachegetMaterial (HlmsCache const *lastReturnedValue, const HlmsCache &passCache, const QueuedRenderable &queuedRenderable, bool casterPass, ParallelHlmsCompileQueue *parallelQueue)
 Retrieves an HlmsCache filled with the GPU programs to be used by the given renderable. More...
 
uint32 getMaterialSerial01 (uint32 lastReturnedValue, const HlmsCache &passCache, const size_t passCacheIdx, const QueuedRenderable &queuedRenderable, bool casterPass, ParallelHlmsCompileQueue &parallelQueue)
 This is extremely similar to getMaterial() except it's been designed to be always in parallel and to be used by warm_up passes. More...
 
uint16 getMaxNonCasterDirectionalLights () const
 
const StringgetNameStr (IdString name) const
 Returns the string name associated with its hashed name (this was passed as refName in createDatablock()). More...
 
const LibraryVecgetPiecesLibrary () const
 
ArchiveVec getPiecesLibraryAsArchiveVec () const
 
PrecisionMode getPrecisionMode () const
 Returns requested precision mode (i.e. More...
 
RenderSystemgetRenderSystem () const
 
const ShaderCodeCacheVec & getShaderCodeCache () const
 
const StringgetShaderProfile () const
 
IdString getShaderSyntax () const
 
bool getStaticBranchingLights () const
 
PrecisionMode getSupportedPrecisionMode () const
 Some GPUs don't support all precision modes. More...
 
void getTemplateChecksum (uint64 outHash[2]) const
 
HlmsTypes getType () const
 
IdString getTypeName () const
 
const StringgetTypeNameStr () const
 
bool isShaderCodeCacheDirty () const
 Users can check this function to tell if HlmsDiskCache needs saving. More...
 
bool parseOffline (const String &filename, String &inBuffer, String &outBuffer, size_t tid)
 For standalone parsing. 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 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 areaLightsApproxLimit, uint16 areaLightsLtcLimit)
 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 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...
 
void setMaxNonCasterDirectionalLights (uint16 maxLights)
 Non-caster directional lights are hardcoded into shaders. More...
 
void setPrecisionMode (PrecisionMode precisionMode)
 Sets the precision mode of Hlms. More...
 
virtual void setStaticBranchingLights (bool staticBranchingLights)
 By default shadow-caster spot and point lights are hardcoded into shaders. More...
 

Additional Inherited Members

- Public Types inherited from Ogre::Hlms
typedef std::map< IdString, DatablockEntryHlmsDatablockMap
 
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'. More...
 
static int32 getProperty (const HlmsPropertyVec &properties, IdString key, int32 defaultVal=0)
 Utility helper, mostly useful to HlmsListener implementations. More...
 
static void setProperty (HlmsPropertyVec &properties, IdString key, int32 value)
 Utility helper, mostly useful to HlmsListener implementations. More...
 
- Static Public Attributes inherited from Ogre::Hlms
static constexpr size_t kNoTid = 0u
 For single-threaded operations. More...
 

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
renderableThe renderable the material will be used on.
movableObjectThe MovableObject the material will be used on (usually the parent of renderable)
outHashA 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
cacheCurrent cache of Shaders to be used.
queuedRenderableThe Renderable-MovableObject pair about to be rendered.
casterPassWhether this is a shadow mapping caster pass.
lastCacheHashThe hash of the cache of shaders that was the used by the previous renderable.
lastTextureHashLast 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
shadowNodeThe 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: