OGRE-Next  2.3
Object-Oriented Graphics Rendering Engine
Ogre::KfTransformArrayMemoryManager Class Reference

Implementation to create the KfTransform variables needed by SkeletonTrack @See SkeletonAnimationDef and. More...

#include <OgreKfTransformArrayMemoryManager.h>

+ Inheritance diagram for Ogre::KfTransformArrayMemoryManager:

Public Types

enum  MemoryTypes { KfTransformType = 0 , NumMemoryTypes }
 
typedef std::vector< ptrdiff_t > PtrdiffVec
 

Public Member Functions

 KfTransformArrayMemoryManager (uint16 depthLevel, size_t hintMaxNodes, size_t cleanupThreshold=100, size_t maxHardLimit=MAX_MEMORY_SLOTS, RebaseListener *rebaseListener=0)
 Constructor. More...
 
virtual ~KfTransformArrayMemoryManager ()
 
void createNewNode (KfTransform **outTransform)
 Requests memory for a new KfTransofrm (for the Array vectors & matrices) More...
 
void defragment ()
 Triggers on demand a defragmentation of the pools, so that all slots become contiguous in memory. More...
 
void destroy ()
 Destroys the memory ptrs. More...
 
size_t getAllMemory () const
 Gets all memory reserved for this manager. More...
 
size_t getFreeMemory () const
 Gets available memory in bytes. More...
 
size_t getNumUsedSlotsIncludingFragmented () const
 Returns mUsedMemory. More...
 
size_t getUsedMemory () const
 Gets used memory in bytes (not including waste) More...
 
size_t getWastedMemory () const
 Gets wasted memory (perform a cleanup to fix) More...
 
void initialize ()
 Initializes mMemoryPools. More...
 
void shrinkToFit ()
 Defragments memory, then reallocates a smaller pool that tightly fits the current number of objects. More...
 

Static Public Attributes

static const size_t ElementsMemSize [NumMemoryTypes]
 
static const size_t MAX_MEMORY_SLOTS
 

Detailed Description

Implementation to create the KfTransform variables needed by SkeletonTrack @See SkeletonAnimationDef and.

See also
SkeletonTrack
Author
Matias N. Goldberg
Version
1.0

Member Typedef Documentation

◆ PtrdiffVec

typedef std::vector<ptrdiff_t> Ogre::ArrayMemoryManager::PtrdiffVec
inherited

Member Enumeration Documentation

◆ MemoryTypes

Enumerator
KfTransformType 
NumMemoryTypes 

Constructor & Destructor Documentation

◆ KfTransformArrayMemoryManager()

Ogre::KfTransformArrayMemoryManager::KfTransformArrayMemoryManager ( uint16  depthLevel,
size_t  hintMaxNodes,
size_t  cleanupThreshold = 100,
size_t  maxHardLimit = MAX_MEMORY_SLOTS,
RebaseListener rebaseListener = 0 
)

Constructor.

@See intialize. @See destroy.

Parameters
elementsMemSizeArray containing the size in bytes of each element type (i.e. NodeElementsMemSize)
initRoutinesArray containing the cleanup function that will be called when default initializing memory. Unlike cleanupRoutines, just leave the function pointer null if all you want is just to initialize to 0.
cleanupRoutinesArray containing the cleanup function that will be called when performing cleanups. Many pointers can use the flatCleaner and is the fastest. However Array variables (i.e. ArrayVector3) have a layout where flatCleaner won't work correctly because the data is interleaved (rather than flat).
numElementsSizeNumber of entries in elementsMemSize
depthLevelValue only used to pass to the listener. Identifies to which hierarchy depth level this memory manager belongs to.
hintMaxNodesHint on how many SceneNodes we'll be creating.
cleanupThresholdThe threshold at which a cleanup is triggered after too many nodes have been destroyed in a non-LIFO order or without being created again. -1 to disable cleanups.
maxHardLimitMaximum amount of SceneNodes. The manager is not allowed to grow and consume more memory past that limit. MAX_MEMORY_SLOTS for no limit. This is useful when target architecture has much less memory than the dev machine.
Note that if hintMaxNodes < maxHardLimit, the manager may be forced to do temporary allocations (to do the reallocs) thus during a brief perdiod of time it may consume more memory than the established hard limit (up to 2x).
Parameters
rebaseListenerThe listener to be called when cleaning up or growing the memory pool. If null, cleanupThreshold is set to -1 & maxHardLimit will be set to hintMaxNodes

◆ ~KfTransformArrayMemoryManager()

virtual Ogre::KfTransformArrayMemoryManager::~KfTransformArrayMemoryManager ( )
inlinevirtual

Member Function Documentation

◆ createNewNode()

void Ogre::KfTransformArrayMemoryManager::createNewNode ( KfTransform **  outTransform)

Requests memory for a new KfTransofrm (for the Array vectors & matrices)

Remarks
Uses all slots. Deletion is assumed to take place when the memory manager is destroyed; as this manager is run in a controlled environment.
Parameters
outTransformOut: The transform with filled memory pointers

◆ defragment()

void Ogre::ArrayMemoryManager::defragment ( )
inherited

Triggers on demand a defragmentation of the pools, so that all slots become contiguous in memory.

ArrayMemoryManager::destroySlot already does this when the number of fragmented slots reaches mCleanupThreshold

◆ destroy()

void Ogre::ArrayMemoryManager::destroy ( )
inherited

Destroys the memory ptrs.

@See initialize

Remarks
If there were slots in use, make sure they're no longer used, as their ptrs will become dangling ptrs. We don't assert because this may be valid behavior (i.e. on shutdown)

◆ getAllMemory()

size_t Ogre::ArrayMemoryManager::getAllMemory ( ) const
inherited

Gets all memory reserved for this manager.

◆ getFreeMemory()

size_t Ogre::ArrayMemoryManager::getFreeMemory ( ) const
inherited

Gets available memory in bytes.

◆ getNumUsedSlotsIncludingFragmented()

size_t Ogre::ArrayMemoryManager::getNumUsedSlotsIncludingFragmented ( ) const
inherited

Returns mUsedMemory.

When ARRAY_PACKED_REALS = 4, and 4 objects have been created but the 2nd one has been deleted, getNumUsedSlotsIncludingFragmented will still return 4 until the 4th object is removed or a cleanup is performed

◆ getUsedMemory()

size_t Ogre::ArrayMemoryManager::getUsedMemory ( ) const
inherited

Gets used memory in bytes (not including waste)

◆ getWastedMemory()

size_t Ogre::ArrayMemoryManager::getWastedMemory ( ) const
inherited

Gets wasted memory (perform a cleanup to fix)

◆ initialize()

void Ogre::ArrayMemoryManager::initialize ( )
inherited

Initializes mMemoryPools.

Once it has been called, destroy() must be called. @See destroy

Remarks
The destructor won't free the data, if you don't call destroy, memory will leak. Calling initialize twice is possible and won't leak, but will free the previous memory ptrs without calling the registered RebaseListener. So if there were slots in use, their pointers will become dangling. An assert will trigger if this happens.

◆ shrinkToFit()

void Ogre::ArrayMemoryManager::shrinkToFit ( )
inherited

Defragments memory, then reallocates a smaller pool that tightly fits the current number of objects.

Useful when you know you won't be creating more slots and you need to reclaim memory.

Member Data Documentation

◆ ElementsMemSize

const size_t Ogre::KfTransformArrayMemoryManager::ElementsMemSize[NumMemoryTypes]
static

◆ MAX_MEMORY_SLOTS

const size_t Ogre::ArrayMemoryManager::MAX_MEMORY_SLOTS
staticinherited

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