OGRE  1.10.12
Object-Oriented Graphics Rendering Engine
Ogre::VertexBufferBinding Class Reference

Records the state of all the vertex buffer bindings required to provide a vertex declaration with the input data it needs for the vertex elements. More...

#include <OgreHardwareVertexBuffer.h>

+ Inheritance diagram for Ogre::VertexBufferBinding:

Public Types

typedef map< ushort, ushort >::type BindingIndexMap
 
typedef map< unsigned short, HardwareVertexBufferSharedPtr >::type VertexBufferBindingMap
 Defines the vertex buffer bindings used as source for vertex declarations. More...
 

Public Member Functions

 VertexBufferBinding ()
 Constructor, should not be called direct, use HardwareBufferManager::createVertexBufferBinding. More...
 
 ~VertexBufferBinding ()
 
void closeGaps (BindingIndexMap &bindingIndexMap)
 Remove any gaps in the bindings. More...
 
const VertexBufferBindingMapgetBindings (void) const
 Gets a read-only version of the buffer bindings. More...
 
const HardwareVertexBufferSharedPtrgetBuffer (unsigned short index) const
 Gets the buffer bound to the given source index. More...
 
size_t getBufferCount (void) const
 
bool getHasInstanceData () const
 Returns true if this binding has an element that contains instance data. More...
 
unsigned short getLastBoundIndex (void) const
 Gets the last bound index. More...
 
unsigned short getNextIndex (void) const
 Gets the highest index which has already been set, plus 1. More...
 
bool hasGaps (void) const
 Check whether any gaps in the bindings. More...
 
bool isBufferBound (unsigned short index) const
 Gets whether a buffer is bound to the given source index. More...
 
void setBinding (unsigned short index, const HardwareVertexBufferSharedPtr &buffer)
 Set a binding, associating a vertex buffer with a given index. More...
 
void unsetAllBindings (void)
 Removes all the bindings. More...
 
void unsetBinding (unsigned short index)
 Removes an existing binding. More...
 

Detailed Description

Records the state of all the vertex buffer bindings required to provide a vertex declaration with the input data it needs for the vertex elements.

Remarks
Why do we have this binding list rather than just have VertexElement referring to the vertex buffers direct? Well, in the underlying APIs, binding the vertex buffers to an index (or 'stream') is the way that vertex data is linked, so this structure better reflects the realities of that. In addition, by separating the vertex declaration from the list of vertex buffer bindings, it becomes possible to reuse bindings between declarations and vice versa, giving opportunities to reduce the state changes required to perform rendering.
Like the other classes in this functional area, these binding maps should be created and destroyed using the HardwareBufferManager.

Member Typedef Documentation

◆ VertexBufferBindingMap

Defines the vertex buffer bindings used as source for vertex declarations.

◆ BindingIndexMap

Constructor & Destructor Documentation

◆ VertexBufferBinding()

Ogre::VertexBufferBinding::VertexBufferBinding ( )

Constructor, should not be called direct, use HardwareBufferManager::createVertexBufferBinding.

◆ ~VertexBufferBinding()

Ogre::VertexBufferBinding::~VertexBufferBinding ( )

Member Function Documentation

◆ setBinding()

void Ogre::VertexBufferBinding::setBinding ( unsigned short  index,
const HardwareVertexBufferSharedPtr buffer 
)

Set a binding, associating a vertex buffer with a given index.

Remarks
If the index is already associated with a vertex buffer, the association will be replaced. This may cause the old buffer to be destroyed if nothing else is referring to it. You should assign bindings from 0 and not leave gaps, although you can bind them in any order.

Referenced by Ogre::Lod0Stripifier::~Lod0Stripifier().

◆ unsetBinding()

void Ogre::VertexBufferBinding::unsetBinding ( unsigned short  index)

Removes an existing binding.

◆ unsetAllBindings()

void Ogre::VertexBufferBinding::unsetAllBindings ( void  )

Removes all the bindings.

◆ getBindings()

const VertexBufferBindingMap& Ogre::VertexBufferBinding::getBindings ( void  ) const

Gets a read-only version of the buffer bindings.

Referenced by Ogre::Lod0Stripifier::~Lod0Stripifier().

◆ getBuffer()

const HardwareVertexBufferSharedPtr& Ogre::VertexBufferBinding::getBuffer ( unsigned short  index) const

Gets the buffer bound to the given source index.

◆ isBufferBound()

bool Ogre::VertexBufferBinding::isBufferBound ( unsigned short  index) const

Gets whether a buffer is bound to the given source index.

◆ getBufferCount()

size_t Ogre::VertexBufferBinding::getBufferCount ( void  ) const
inline

◆ getNextIndex()

unsigned short Ogre::VertexBufferBinding::getNextIndex ( void  ) const
inline

Gets the highest index which has already been set, plus 1.

Remarks
This is to assist in binding the vertex buffers such that there are not gaps in the list.

◆ getLastBoundIndex()

unsigned short Ogre::VertexBufferBinding::getLastBoundIndex ( void  ) const

Gets the last bound index.

◆ hasGaps()

bool Ogre::VertexBufferBinding::hasGaps ( void  ) const

Check whether any gaps in the bindings.

◆ closeGaps()

void Ogre::VertexBufferBinding::closeGaps ( BindingIndexMap bindingIndexMap)

Remove any gaps in the bindings.

Remarks
This is useful if you've removed vertex buffer from this vertex buffer bindings and want to remove any gaps in the bindings. Note, however, that if this bindings is already being used with a VertexDeclaration, you will need to alter that too. This method is mainly useful when reorganising buffers manually.
Parameters
bindingIndexMapTo be retrieve the binding index map that used to translation old index to new index; will be cleared by this method before fill-in.

◆ getHasInstanceData()

bool Ogre::VertexBufferBinding::getHasInstanceData ( ) const

Returns true if this binding has an element that contains instance data.


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