OGRE: Ogre::HlmsListener Class Reference

| OGRE 2.2.4 Object-Oriented Graphics Rendering Engine

Public Member Functions | List of all members
Ogre::HlmsListener Class Reference
Core » Resources

Listener that can be hooked to an Hlms implementation for extending it with custom code. More...

`#include <OgreHlmsListener.h>`

## Public Member Functions
virtual uint32 | getPassBufferSize (const CompositorShadowNode *shadowNode, bool casterPass, bool dualParaboloid, SceneManager *sceneManager) const
| Listeners should return the extra bytes they wish to allocate for storing additional data in the pass buffer. More...
virtual void | hlmsTypeChanged (bool casterPass, CommandBuffer *commandBuffer, const HlmsDatablock *datablock)
| Called when the last Renderable processed was of a different Hlms type, thus we need to rebind certain buffers (like the pass buffer). More...
virtual float * | preparePassBuffer (const CompositorShadowNode *shadowNode, bool casterPass, bool dualParaboloid, SceneManager *sceneManager, float *passBufferPtr)
| Users can write to passBufferPtr. More...
virtual void | preparePassHash (const CompositorShadowNode *shadowNode, bool casterPass, bool dualParaboloid, SceneManager *sceneManager, Hlms *hlms)
| Called right before creating the pass cache, to allow the listener to add/remove properties. More...
virtual void | propertiesMergedPreGenerationStep (const String &shaderProfile, const HlmsCache &passCache, const HlmsPropertyVec &renderableCacheProperties, const PiecesMap renderableCachePieces[NumShaderTypes], const HlmsPropertyVec &properties, const QueuedRenderable &queuedRenderable)
| Similar to HlmsListener::shaderCacheEntryCreated, but it gets called before creating any shader. More...
virtual void | shaderCacheEntryCreated (const String &shaderProfile, const HlmsCache *hlmsCacheEntry, const HlmsCache &passCache, const HlmsPropertyVec &properties, const QueuedRenderable &queuedRenderable)
| Called after the shader was created/compiled, and right before bindGpuProgramParameters (relevant information for OpenGL programs). More...

## Detailed Description

Listener that can be hooked to an Hlms implementation for extending it with custom code.

See "8.6.5 Customizing an existing implementation" of the 2.x manual on the different approaches to customizing Hlms implementations.

Remarks
  For performance reasons, the listener interface does not allow you to add customizations that work per Renderable, as that loop is performance sensitive. The only listener callback that works inside Hlms::fillBuffersFor is hlmsTypeChanged which only gets evaluated when the previous Renderable used a different Hlms implementation; which is rare, and since we sort the RenderQueue, it often branch predicts well.

## Member Function Documentation

## ◆ getPassBufferSize()

virtual uint32 Ogre::HlmsListener::getPassBufferSize | ( | const CompositorShadowNode * | shadowNode,
|  | bool | casterPass,
|  | bool | dualParaboloid,
|  | SceneManager * | sceneManager
| ) |  | const
| inlinevirtual

Listeners should return the extra bytes they wish to allocate for storing additional data in the pass buffer.

Return value must be in bytes.

## ◆ hlmsTypeChanged()

virtual void Ogre::HlmsListener::hlmsTypeChanged | ( | bool | casterPass,
|  | CommandBuffer * | commandBuffer,
|  | const HlmsDatablock * | datablock
| ) |  |
| inlinevirtual

Called when the last Renderable processed was of a different Hlms type, thus we need to rebind certain buffers (like the pass buffer).

You can use this moment to bind your own buffers.

## ◆ preparePassBuffer()

virtual float* Ogre::HlmsListener::preparePassBuffer | ( | const CompositorShadowNode * | shadowNode,
|  | bool | casterPass,
|  | bool | dualParaboloid,
|  | SceneManager * | sceneManager,
|  | float * | passBufferPtr
| ) |  |
| inlinevirtual

Users can write to passBufferPtr.

Implementations must ensure they make the buffer big enough via getPassBufferSize. The passBufferPtr is already aligned to 16 bytes. Implementations must return the pointer past the end, aligned to 16 bytes.

## ◆ preparePassHash()

virtual void Ogre::HlmsListener::preparePassHash | ( | const CompositorShadowNode * | shadowNode,
|  | bool | casterPass,
|  | bool | dualParaboloid,
|  | SceneManager * | sceneManager,
|  | Hlms * | hlms
| ) |  |
| inlinevirtual

Called right before creating the pass cache, to allow the listener to add/remove properties.

Remarks
  For the rest of the parameters,

See also
  Hlms::preparePassHash

Parameters

  hlms | Caller Hlms; from which you can alter the properties using Hlms::setProperty

## ◆ propertiesMergedPreGenerationStep()

virtual void Ogre::HlmsListener::propertiesMergedPreGenerationStep | ( | const String & | shaderProfile,
|  | const HlmsCache & | passCache,
|  | const HlmsPropertyVec & | renderableCacheProperties,
|  | const PiecesMap | renderableCachePieces[NumShaderTypes],
|  | const HlmsPropertyVec & | properties,
|  | const QueuedRenderable & | queuedRenderable
| ) |  |
| inlinevirtual

Similar to HlmsListener::shaderCacheEntryCreated, but it gets called before creating any shader.

The main difference is that there is no hlmsCacheEntry (because it hasn't been generated yet) and the properties are before they are transformed by the templates

propertiesMergedPreGenerationStep

Parameters

  shaderProfile |
  passCache | Properties used by this pass
  renderableCacheProperties | Properties assigned to the renderable
  renderableCachePieces | Pieces that can be inserted, belonging to the renderable. The PiecesMap pointer cannot be null
  properties | Combined properties of both renderableCacheProperties & passCache.setProperties
  queuedRenderable |

## ◆ shaderCacheEntryCreated()

virtual void Ogre::HlmsListener::shaderCacheEntryCreated | ( | const String & | shaderProfile,
|  | const HlmsCache * | hlmsCacheEntry,
|  | const HlmsCache & | passCache,
|  | const HlmsPropertyVec & | properties,
|  | const QueuedRenderable & | queuedRenderable
| ) |  |
| inlinevirtual

Called after the shader was created/compiled, and right before bindGpuProgramParameters (relevant information for OpenGL programs).

Parameters

  shaderProfile |

See also
  Hlms::mShaderProfile

Parameters

  hlmsCacheEntry | The created shader.
  passCache |

See also
  Hlms::createShaderCacheEntry

Parameters

  properties | The current contents of Hlms::mSetProperties
  queuedRenderable |

See also
  Hlms::createShaderCacheEntry

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

- OgreHlmsListener.h