OGRE-Next
4.0.0unstable
Object-Oriented Graphics Rendering Engine
|
Listener that can be hooked to an Hlms implementation for extending it with custom code. More...
#include <OgreHlmsListener.h>
Public Member Functions | |
virtual uint16 | getNumExtraPassTextures (const HlmsPropertyVec &properties, bool casterPass) const |
If hlmsTypeChanged is going to be binding extra textures, override this function to tell us how many textures you will use, so that we don't use those slots. More... | |
virtual uint32 | getPassBufferSize (const CompositorShadowNode *shadowNode, bool casterPass, bool dualParaboloid, SceneManager *sceneManager) const |
Listeners should return the number of 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, size_t texUnit) |
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) |
Write additional data in the pass buffer. 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 (Hlms *hlms, const HlmsCache &passCache, const HlmsPropertyVec &renderableCacheProperties, const PiecesMap renderableCachePieces[NumShaderTypes], const HlmsPropertyVec &properties, const QueuedRenderable &queuedRenderable, size_t tid) |
Similar to HlmsListener::shaderCacheEntryCreated, but it gets called before creating any shader. More... | |
virtual void | setupRootLayout (RootLayout &rootLayout, const HlmsPropertyVec &properties, size_t tid) const |
Called right before compiling. More... | |
virtual void | shaderCacheEntryCreated (const String &shaderProfile, const HlmsCache *hlmsCacheEntry, const HlmsCache &passCache, const HlmsPropertyVec &properties, const QueuedRenderable &queuedRenderable, size_t tid) |
Called after the shader was created/compiled, and right before bindGpuProgramParameters (relevant information for OpenGL programs). More... | |
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.
|
inlinevirtual |
If hlmsTypeChanged is going to be binding extra textures, override this function to tell us how many textures you will use, so that we don't use those slots.
May be called from any thread.
|
inlinevirtual |
Listeners should return the number of extra bytes they wish to allocate for storing additional data in the pass buffer.
The actual data will be provided by a preparePassBuffer() override.
The Thread Idx is always Hlms::kNoTid
|
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.
The Thread Idx is always Hlms::kNoTid
|
inlinevirtual |
Write additional data in the pass buffer.
Users can write to passBufferPtr. Implementations must ensure they make the buffer big enough via getPassBufferSize(). The passBufferPtr is already aligned to 16 bytes.
The Thread Idx is always Hlms::kNoTid
|
inlinevirtual |
Called right before creating the pass cache, to allow the listener to add/remove properties.
The Thread Idx is always Hlms::kNoTid
hlms | Caller Hlms; from which you can alter the properties using Hlms::setProperty |
|
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
hlms | Pointer to caller. WARNING: Note that any modified property WON'T BE CACHED. If you set a property based on external information, it will break caches. You can only set new properties that are derived from existing properties e.g. c = a + b, which means caching a and b will always result in c being the same value |
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 | |
tid | Thread Idx |
|
inlinevirtual |
Called right before compiling.
If customizations require additional resources slots (e.g. more textures) then this function should modify the root layout accordingly
To allow caches to work, the rootLayout must only be generated from values in 'properties' (or via constant modifications) otherwise there is no guarantee a cached version can recreate the same state.
This is why the function is marked const.
rootLayout | An already-filled rootLayout derived classes can modify |
properties | The current contents of Hlms::mSetProperties |
tid | Thread Idx |
|
inlinevirtual |
Called after the shader was created/compiled, and right before bindGpuProgramParameters (relevant information for OpenGL programs).
shaderProfile | See Hlms::mShaderProfile |
hlmsCacheEntry | The created shader. |
passCache | See Hlms::createShaderCacheEntry |
properties | The current contents of Hlms::mSetProperties |
queuedRenderable | See Hlms::createShaderCacheEntry |
tid | Thread Idx |