Wrap-around class that contains multiple ArrayMemoryManager, one per render queue.
More...
#include <OgreObjectMemoryManager.h>
|
| ObjectMemoryManager () |
|
virtual | ~ObjectMemoryManager () |
|
SceneNode * | _getDummyNode () const |
| Returns the pointer to the dummy node (useful when detaching)
|
|
size_t | _getTotalRenderQueues () const |
|
void | _setTwin (SceneMemoryMgrTypes memoryManagerType, ObjectMemoryManager *twinMemoryManager) |
| @See mMemoryManagerType
|
|
virtual void | applyRebase (uint16 level, const MemoryPoolVec &newBasePtrs, const ArrayMemoryManager::PtrdiffVec &diffsList) |
| Called when the manager already grew it's memory pool to honour more node requests.
|
|
virtual void | buildDiffList (uint16 level, const MemoryPoolVec &basePtrs, ArrayMemoryManager::PtrdiffVec &outDiffsList) |
| Called when the manager needs to grow it's memory pool to honour more node requests.
|
|
size_t | calculateTotalNumObjectDataIncludingFragmentedSlots () const |
| This is the opposite of getTotalNumObjects.
|
|
size_t | getFirstObjectData (ObjectData &outObjectData, size_t renderQueue) |
| Retrieves a ObjectData pointing to the first MovableObject in the given render queue.
|
|
SceneMemoryMgrTypes | getMemoryManagerType () const |
|
size_t | getNumRenderQueues () const |
| Retrieves the number of render queues that have been created.
|
|
size_t | getTotalNumObjects () const |
| Retrieves the sum of the number of objects in all render queues.
|
|
ObjectMemoryManager * | getTwin () const |
| Note the return value can be null.
|
|
void | migrateTo (ObjectData &inOutTransform, size_t renderQueue, ObjectMemoryManager *dstObjectMemoryManager) |
| Releases memory belonging to us, not before copying it into another manager.
|
|
void | objectCreated (ObjectData &outObjectData, size_t renderQueue) |
| Requests memory for the given ObjectData, initializing values.
|
|
void | objectDestroyed (ObjectData &outObjectData, size_t renderQueue) |
| Releases current memory.
|
|
void | objectMoved (ObjectData &inOutObjectData, size_t oldRenderQueue, size_t newRenderQueue) |
| Requests memory for the given ObjectData to be moved to a different render queue, transferring existing values inside to the new memory slot.
|
|
virtual void | performCleanup (uint16 level, const MemoryPoolVec &basePtrs, size_t const *elementsMemSizes, size_t startInstance, size_t diffInstances) |
| Called when too many nodes were destroyed in a non-LIFO fashion.
|
|
Wrap-around class that contains multiple ArrayMemoryManager, one per render queue.
- Note that some SceneManager implementations (i.e. Octree like) may want to have more than one ObjectMemoryManager, for example one per octant.
◆ ObjectMemoryManager()
Ogre::ObjectMemoryManager::ObjectMemoryManager |
( |
| ) |
|
◆ ~ObjectMemoryManager()
virtual Ogre::ObjectMemoryManager::~ObjectMemoryManager |
( |
| ) |
|
|
virtual |
◆ _getDummyNode()
SceneNode * Ogre::ObjectMemoryManager::_getDummyNode |
( |
| ) |
const |
|
inline |
Returns the pointer to the dummy node (useful when detaching)
◆ _getTotalRenderQueues()
size_t Ogre::ObjectMemoryManager::_getTotalRenderQueues |
( |
| ) |
const |
|
inline |
◆ _setTwin()
◆ applyRebase()
Called when the manager already grew it's memory pool to honour more node requests.
- See also
- buildDiffList() to know what mChunkPtr & mIndex needs to be set for each ArrayVector3/etc we have.
- Parameters
-
level | The hierarchy depth level |
newBasePtrs | The new base ptr. |
diffsList | The list built in buildDiffList |
Implements Ogre::ArrayMemoryManager::RebaseListener.
◆ buildDiffList()
Called when the manager needs to grow it's memory pool to honour more node requests.
See the class description on why we need to do this (to avoid C++ undefined behavior)
- Parameters
-
level | The hierarchy depth level |
basePtrs | The base pointers from each pool so we can calculate the differences |
utDiffsList | The list we'll generate. "outDiffsList" already has enough reserved space |
Implements Ogre::ArrayMemoryManager::RebaseListener.
◆ calculateTotalNumObjectDataIncludingFragmentedSlots()
size_t Ogre::ObjectMemoryManager::calculateTotalNumObjectDataIncludingFragmentedSlots |
( |
| ) |
const |
This is the opposite of getTotalNumObjects.
This function returns the sum of the return values of getFirstObjectData
◆ getFirstObjectData()
◆ getMemoryManagerType()
◆ getNumRenderQueues()
size_t Ogre::ObjectMemoryManager::getNumRenderQueues |
( |
| ) |
const |
Retrieves the number of render queues that have been created.
◆ getTotalNumObjects()
size_t Ogre::ObjectMemoryManager::getTotalNumObjects |
( |
| ) |
const |
|
inline |
Retrieves the sum of the number of objects in all render queues.
- When ARRAY_PACKED_REALS = 4, and 4 objects have been created but the 2nd one has been deleted, getFirstObjectData will still return 4 until the 4th object is removed or a cleanup is performed; whereas getTotalNumObjects will return the actual number of objects.
◆ getTwin()
Note the return value can be null.
◆ migrateTo()
Releases memory belonging to us, not before copying it into another manager.
- Parameters
-
inOutTransform | Valid Transform that belongs to us. Output will belong to the other memory mgr. |
depth | Current hierarchy level depth it belongs to. |
dstObjectMemoryManager | ObjectMemoryManager that will now own the transform. |
◆ objectCreated()
Requests memory for the given ObjectData, initializing values.
- Parameters
-
◆ objectDestroyed()
Releases current memory.
- Parameters
-
outObjectData | ObjectData whose pointers will be nullified. |
renderQueue | Current render queue it belongs to. |
◆ objectMoved()
Requests memory for the given ObjectData to be moved to a different render queue, transferring existing values inside to the new memory slot.
- Parameters
-
◆ performCleanup()
Called when too many nodes were destroyed in a non-LIFO fashion.
Without cleaning up, the scene manager will waste CPU & bandwidth on processing vectors & matrices that are not in use. The more fragmented/unordered those removals were, the worst it is. Try to create everything static first, then dynamic content.
In a way, it's very similar to vector::remove(), as removing an element from the middle means we need to shift everything past that point one place (or more).
- Parameters
-
level | The hierarchy depth level |
basePtrs | The base ptrs. |
startInstance | The instance to which past that we need to shift |
diffInstances | How many places we need to shift backwards. |
Implements Ogre::ArrayMemoryManager::RebaseListener.
The documentation for this class was generated from the following file: