Go to the documentation of this file.
28 #ifndef __InstanceManager_H__
29 #define __InstanceManager_H__
72 InstancingTechniquesCount
90 bool setting[NUM_SETTINGS];
94 setting[CAST_SHADOWS] =
true;
95 setting[SHOW_BOUNDINGBOX] =
false;
160 size_t instancesPerBatch,
unsigned short subMeshIdx,
bool useBoneMatrixLookup =
false);
205 {
return mNumCustomParams; }
209 {
return mInstancingTechnique; }
284 {
return mBatchSettings.find( materialName ) != mBatchSettings.end(); }
312 InstanceBatchMap::const_iterator it = mInstanceBatches.find( materialName );
313 if(it != mInstanceBatches.end())
317 "Material " + materialName +
" cannot be found.",
"InstanceManager::getInstanceBatchIterator");
324 #endif // __InstanceManager_H__
InstanceBatch * getFreeBatch(const String &materialName)
Finds a batch with at least one free instanced entity we can use.
InstanceBatchIterator getInstanceBatchIterator(const String &materialName) const
Get non-updateable iterator over instance batches for given material.
virtual ~InstanceManager()
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
size_t mMaxLookupTableInstances
InstanceManager(const String &customName, SceneManager *sceneManager, const String &meshName, const String &groupName, InstancingTechnique instancingTechnique, uint16 instancingFlags, size_t instancesPerBatch, unsigned short subMeshIdx, bool useBoneMatrixLookup=false)
SceneManager * getSceneManager() const
InstancingTechnique mInstancingTechnique
bool getSetting(BatchSettingId id, const String &materialName) const
If settings for the given material didn't exist, default value is returned.
unsigned short mSubMeshIdx
This is the main starting point for the new instancing system.
size_t getMaxOrBestNumInstancesPerBatch(String materialName, size_t suggestedSize, uint16 flags)
Calculates the maximum (or the best amount, depending on flags) of instances per batch given the sugg...
@ HWInstancingVTF
Needs SM 3.0+, HW instancing support & VTF.
void defragmentBatches(bool optimizeCulling)
After creating many entities (which turns in many batches) and then removing entities that are in the...
void setMaxLookupTableInstances(size_t maxLookupTableInstances)
Sets the size of the lookup table for techniques supporting bone lookup table.
ConstMapIterator< InstanceBatchMap > InstanceBatchMapIterator
void _updateDirtyBatches(void)
Called by SceneManager when we told it we have at least one dirty batch.
SceneManager * mSceneManager
unsigned char getNumCustomParams() const
map< String, BatchSettings >::type BatchSettingsMap
void setBatchesAsStaticAndUpdate(bool bStatic)
Tells this batch to stop updating animations, positions, rotations, and display all it's active insta...
InstancedEntity * createInstancedEntity(const String &materialName)
Creates an InstancedEntity based on an existing InstanceManager (.
void unshareVertices(const Ogre::MeshPtr &mesh)
Called when we you use a mesh which has shared vertices, the function creates separate vertex/index b...
static const String BLANK
Constant blank string, useful for returning by ref where local does not exist.
vector< InstanceBatch * >::type InstanceBatchVec
unsigned char mNumCustomParams
InstancingTechnique getInstancingTechnique() const
Manages the organisation and rendering of a 'scene' i.e.
RenderOperation mSharedRenderOperation
@ HWInstancingBasic
Needs SM 3.0+ and HW instancing support.
void _addDirtyBatch(InstanceBatch *dirtyBatch)
Called by an InstanceBatch when it requests their bounds to be updated for proper culling.
void setSetting(BatchSettingId id, bool enabled, const String &materialName=StringUtil::BLANK)
Applies a setting for all batches using the same material_ existing ones and those that will be creat...
@ ShaderBased
Any SM 2.0+.
const String & getName() const
InstanceBatchVec mDirtyBatches
@ TextureVTF
Needs Vertex Texture Fetch & SM 3.0+.
void cleanupEmptyBatches(void)
This function can be useful to improve CPU speed after having too many instances created,...
void applySettingToBatches(BatchSettingId id, bool value, const InstanceBatchVec &container)
InstanceBatch * buildNewBatch(const String &materialName, bool firstTime)
Called when batches are fully exhausted (can't return more instances) so a new batch is created.
InstanceBatchMap mInstanceBatches
map< String, InstanceBatchVec >::type InstanceBatchMap
@ SHOW_BOUNDINGBOX
Makes each batch to display it's bounding box. Useful for debugging or profiling.
void setNumCustomParams(unsigned char numCustomParams)
Sets the number of custom parameters per instance.
size_t mInstancesPerBatch
BatchSettingId
Values to be used in setSetting() & BatchSettings::setting.
InstanceBatch forms part of the new Instancing system This is an abstract class that must be derived ...
Concrete IteratorWrapper for const access to the underlying key-value container.
void setInstancesPerBatch(size_t instancesPerBatch)
Raises an exception if trying to change it after creating the first InstancedEntity.
void defragmentBatches(bool optimizeCull, vector< InstancedEntity * >::type &entities, vector< Ogre::Vector4 >::type &usedParams, InstanceBatchVec &fragmentedBatches)
InstanceBatchMapIterator getInstanceBatchMapIterator(void) const
Get non-updateable iterator over instance batches per material.
bool hasSettings(const String &materialName) const
Returns true if settings were already created for the given material name.
#define OGRE_EXCEPT(num, desc, src)
ConstVectorIterator< InstanceBatchVec > InstanceBatchIterator
BatchSettingsMap mBatchSettings
'New' rendering operation using vertex buffers.
Concrete IteratorWrapper for const access to the underlying container.
Copyright © 2012 Torus Knot Software Ltd

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.