OGRE-Next  3.0.0unstable
Object-Oriented Graphics Rendering Engine
Ogre::ObjectDataArrayMemoryManager Class Referencefinal

Implementation to create the ObjectData variables needed by MovableObjects. More...

#include <OgreArrayMemoryManager.h>

+ Inheritance diagram for Ogre::ObjectDataArrayMemoryManager:

Public Types

enum  MemoryTypes {
  Parent = 0 , Owner , LocalAabb , WorldAabb ,
  LocalRadius , WorldRadius , DistanceToCamera , UpperDistance ,
  ShadowUpperDistance , VisibilityFlags , QueryFlags , LightMask ,
- Public Types inherited from Ogre::ArrayMemoryManager
typedef std::vector< ptrdiff_t > PtrdiffVec

Public Member Functions

 ObjectDataArrayMemoryManager (uint16 depthLevel, size_t hintMaxNodes, Node *dummyNode, MovableObject *dummyObject, size_t cleanupThreshold=100, size_t maxHardLimit=MAX_MEMORY_SLOTS, RebaseListener *rebaseListener=0)
 Constructor. More...
void createNewNode (ObjectData &outData)
 Requests memory for a new SceneNode (for the Array vectors & matrices) May be also be used for a new Entity, etc. More...
void destroyNode (ObjectData &inOutData)
 Releases memory acquired through. More...
size_t getFirstNode (ObjectData &outData)
 Retrieves a Transform pointing to the first Node. More...
- Public Member Functions inherited from Ogre::ArrayMemoryManager
 ArrayMemoryManager (size_t const *elementsMemSize, CleanupRoutines const *initRoutines, CleanupRoutines const *cleanupRoutines, size_t numElementsSize, uint16 depthLevel, size_t hintMaxNodes, size_t cleanupThreshold=100, size_t maxHardLimit=MAX_MEMORY_SLOTS, RebaseListener *rebaseListener=0)
 Constructor. More...
virtual ~ArrayMemoryManager ()
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 neverDefragment ()
 Prevent defragmentation from ever happening. 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 CleanupRoutines ObjCleanupRoutines [NumMemoryTypes]
- Static Public Attributes inherited from Ogre::ArrayMemoryManager
static const size_t MAX_MEMORY_SLOTS

Detailed Description

Implementation to create the ObjectData variables needed by MovableObjects.

Matias N. Goldberg

Member Enumeration Documentation

◆ MemoryTypes


Constructor & Destructor Documentation

◆ ObjectDataArrayMemoryManager()

Ogre::ObjectDataArrayMemoryManager::ObjectDataArrayMemoryManager ( uint16  depthLevel,
size_t  hintMaxNodes,
Node dummyNode,
MovableObject dummyObject,
size_t  cleanupThreshold = 100,
size_t  maxHardLimit = MAX_MEMORY_SLOTS,
RebaseListener rebaseListener = 0 


See intialize(). See destroy().

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).
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

Member Function Documentation

◆ createNewNode()

void Ogre::ObjectDataArrayMemoryManager::createNewNode ( ObjectData outData)

Requests memory for a new SceneNode (for the Array vectors & matrices) May be also be used for a new Entity, etc.

Try to create everything static first, then dynamic content. Values are initialized (position to zero, orientation to identity, scale to unit, etc)
outTransformOut: The transform with filled memory pointers

◆ destroyNode()

void Ogre::ObjectDataArrayMemoryManager::destroyNode ( ObjectData inOutData)

Releases memory acquired through.

See also
For optimal results, try to respect LIFO order in the removals
inOutTransformOut: Transform to destroy. Pointers are nullified

◆ getFirstNode()

size_t Ogre::ObjectDataArrayMemoryManager::getFirstNode ( ObjectData outData)

Retrieves a Transform pointing to the first Node.

See also
outTransform[out] Transform with filled pointers to the first Node in this depth
Number of Nodes in this depth level

Member Data Documentation

◆ ElementsMemSize

const size_t Ogre::ObjectDataArrayMemoryManager::ElementsMemSize[NumMemoryTypes]

◆ ObjCleanupRoutines

const CleanupRoutines Ogre::ObjectDataArrayMemoryManager::ObjCleanupRoutines[NumMemoryTypes]

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