Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

Ogre::VertexDeclaration Class Reference

This class declares the format of a set of vertex inputs, which can be issued to the rendering API through a RenderOperation. More...

#include <OgreHardwareVertexBuffer.h>

Inheritance diagram for Ogre::VertexDeclaration:

Inheritance graph
[legend]
List of all members.

Public Types

typedef std::list< VertexElementVertexElementList
 Defines the list of vertex elements that makes up this declaration.


Public Methods

 VertexDeclaration ()
 Standard constructor, not you should use HardwareBufferManager::createVertexDeclaration.

virtual ~VertexDeclaration ()
const VertexElementListgetElements (void) const
 Gets read-only access to the list of vertex elements.

const VertexElementgetElement (unsigned short index)
 Get a single element.

virtual const VertexElementaddElement (unsigned short source, size_t offset, VertexElementType theType, VertexElementSemantic semantic, unsigned short index=0)
 Adds a new VertexElement to this declaration.

virtual const VertexElementinsertElement (unsigned short atPosition, unsigned short source, size_t offset, VertexElementType theType, VertexElementSemantic semantic, unsigned short index=0)
 Inserts a new VertexElement at a given position in this declaration.

virtual void removeElement (unsigned short elem_index)
 Remove the element at the given index from this declaration.

virtual void removeElement (VertexElementSemantic semantic, unsigned short index=0)
 Remove the element with the given semantic and usage index.

virtual void modifyElement (unsigned short elem_index, unsigned short source, size_t offset, VertexElementType theType, VertexElementSemantic semantic, unsigned short index=0)
 Modify an element in-place, params as addElement.

virtual const VertexElementfindElementBySemantic (VertexElementSemantic sem, unsigned short index=0)
 Finds a VertexElement with the given semantic, and index if there is more than one element with the same semantic.

virtual VertexElementList findElementsBySource (unsigned short source)
 Gets a list of elements which use a given source.

virtual size_t getVertexSize (unsigned short source)
 Gets the vertex size defined by this declaration for a given source.

virtual VertexDeclaration * clone (void)
 Clones this declaration.

bool operator== (const VertexDeclaration &rhs) const

Protected Attributes

VertexElementList mElementList

Detailed Description

This class declares the format of a set of vertex inputs, which can be issued to the rendering API through a RenderOperation.

Remarks:
You should be aware that the ordering and structure of the VertexDeclaration can be very important on DirectX with older cards,so if you want to maintain maximum compatibility with all render systems and all cards you should be careful to follow these rules:
  1. VertexElements should be added in the following order, and the order of the elements within a shared buffer should be as follows: position, blending weights, normals, diffuse colours, specular colours, texture coordinates (in order, with no gaps)
  2. You must not have unused gaps in your buffers which are not referenced by any VertexElement
  3. You must not cause the buffer & offset settings of 2 VertexElements to overlap
Whilst GL and more modern graphics cards in D3D will allow you to defy these rules, sticking to them will ensure that your buffers have the maximum compatibility.

Like the other classes in this functional area, these declarations should be created and destroyed using the HardwareBufferManager.

Definition at line 244 of file OgreHardwareVertexBuffer.h.


Member Typedef Documentation

typedef std::list<VertexElement> Ogre::VertexDeclaration::VertexElementList
 

Defines the list of vertex elements that makes up this declaration.

Definition at line 248 of file OgreHardwareVertexBuffer.h.

Referenced by findElementsBySource().


Constructor & Destructor Documentation

Ogre::VertexDeclaration::VertexDeclaration  
 

Standard constructor, not you should use HardwareBufferManager::createVertexDeclaration.

Definition at line 174 of file OgreHardwareVertexBuffer.cpp.

Ogre::VertexDeclaration::~VertexDeclaration   [virtual]
 

Definition at line 178 of file OgreHardwareVertexBuffer.cpp.


Member Function Documentation

const VertexElement & Ogre::VertexDeclaration::addElement unsigned short    source,
size_t    offset,
VertexElementType    theType,
VertexElementSemantic    semantic,
unsigned short    index = 0
[virtual]
 

Adds a new VertexElement to this declaration.

Remarks:
This method adds a single element (positions, normals etc) to the end of the vertex declaration. Please read the information in VertexDeclaration about the importance of ordering and structure for compatibility with older D3D drivers.
Parameters:
source  The binding index of HardwareVertexBuffer which will provide the source for this element. See VertexBufferBindingState for full information.
offset  The offset in bytes where this element is located in the buffer
theType  The data format of the element (3 floats, a colour etc)
semantic  The meaning of the data (position, normal, diffuse colour etc)
index  Optional index for multi-input elements like texture coordinates
Returns:
A reference to the VertexElement added.

Reimplemented in Ogre::D3D9VertexDeclaration.

Definition at line 187 of file OgreHardwareVertexBuffer.cpp.

References mElementList, Ogre::VertexElementSemantic, and Ogre::VertexElementType.

Referenced by Ogre::VertexData::clone(), clone(), Ogre::Mesh::compileBoneAssignments(), Ogre::MeshManager::createCurvedIllusionPlane(), Ogre::MeshManager::createCurvedPlane(), Ogre::MeshManager::createPlane(), Ogre::MeshManager::createPrefabPlane(), Ogre::Entity::EntityShadowRenderable::EntityShadowRenderable(), Ogre::Frustum::Frustum(), Ogre::Mesh::getTangentsBuffer(), Ogre::TerrainRenderable::init(), Ogre::TTYGuiElement::initialise(), Ogre::TextAreaGuiElement::initialise(), Ogre::PanelGuiElement::initialise(), Ogre::BorderPanelGuiElement::initialise(), insertElement(), Ogre::BspLevel::loadQuake3Level(), Ogre::MeshSerializerImpl_v1::readGeometry(), Ogre::MeshSerializerImpl::readGeometryColours(), Ogre::MeshSerializerImpl::readGeometryNormals(), Ogre::MeshSerializerImpl::readGeometryPositions(), Ogre::MeshSerializerImpl_v1_1::readGeometryTexCoords(), Ogre::MeshSerializerImpl::readGeometryTexCoords(), Ogre::Rectangle2D::Rectangle2D(), Ogre::BillboardSet::setPoolSize(), Ogre::PanelGuiElement::updateTextureGeometry(), and Ogre::WireBoundingBox::WireBoundingBox().

VertexDeclaration * Ogre::VertexDeclaration::clone void    [virtual]
 

Clones this declaration.

Definition at line 315 of file OgreHardwareVertexBuffer.cpp.

References addElement(), and mElementList.

Referenced by Ogre::PatchMesh::PatchMesh().

const VertexElement * Ogre::VertexDeclaration::findElementBySemantic VertexElementSemantic    sem,
unsigned short    index = 0
[virtual]
 

Finds a VertexElement with the given semantic, and index if there is more than one element with the same semantic.

Remarks:
If the element is not found, this method returns null.

Definition at line 262 of file OgreHardwareVertexBuffer.cpp.

References mElementList, and Ogre::VertexElementSemantic.

Referenced by Ogre::ProgressiveMesh::addWorkingData(), Ogre::Mesh::buildTangentVectors(), Ogre::EdgeListBuilder::buildTrianglesEdges(), Ogre::Entity::cloneVertexDataRemoveBlendInfo(), Ogre::Mesh::compileBoneAssignments(), Ogre::PatchSurface::defineSurface(), Ogre::PatchSurface::distributeControlPoints(), Ogre::Entity::EntityShadowRenderable::EntityShadowRenderable(), Ogre::Entity::extractTempBufferInfo(), Ogre::Mesh::getTangentsBuffer(), Ogre::PatchSurface::interpolateVertexData(), Ogre::EdgeListBuilder::log(), Ogre::VertexData::prepareForShadowVolume(), Ogre::Mesh::softwareVertexBlend(), and Ogre::MeshSerializerImpl::writeGeometry().

VertexDeclaration::VertexElementList Ogre::VertexDeclaration::findElementsBySource unsigned short    source [virtual]
 

Gets a list of elements which use a given source.

Remarks:
Note that the list of elements is returned by value therefore is separate from the declaration as soon as this method returns.

Definition at line 280 of file OgreHardwareVertexBuffer.cpp.

References mElementList, and VertexElementList.

const VertexElement * Ogre::VertexDeclaration::getElement unsigned short    index
 

Get a single element.

Definition at line 216 of file OgreHardwareVertexBuffer.cpp.

References mElementList.

Referenced by Ogre::Mesh::compileBoneAssignments().

const VertexDeclaration::VertexElementList & Ogre::VertexDeclaration::getElements void    const
 

Gets read-only access to the list of vertex elements.

Definition at line 182 of file OgreHardwareVertexBuffer.cpp.

References mElementList.

Referenced by Ogre::GLRenderSystem::_render(), Ogre::D3DRenderSystem::_render(), Ogre::MeshSerializerImpl::calcGeometrySize(), Ogre::VertexData::clone(), and Ogre::VertexData::prepareForShadowVolume().

size_t Ogre::VertexDeclaration::getVertexSize unsigned short    source [virtual]
 

Gets the vertex size defined by this declaration for a given source.

Definition at line 298 of file OgreHardwareVertexBuffer.cpp.

References mElementList.

Referenced by Ogre::D3DRenderSystem::_render(), Ogre::PatchSurface::build(), Ogre::TTYGuiElement::checkMemoryAllocation(), Ogre::TextAreaGuiElement::checkMemoryAllocation(), Ogre::MeshManager::createCurvedIllusionPlane(), Ogre::MeshManager::createPlane(), Ogre::PatchSurface::defineSurface(), Ogre::PatchSurface::distributeControlPoints(), Ogre::TerrainRenderable::init(), Ogre::PanelGuiElement::initialise(), Ogre::BorderPanelGuiElement::initialise(), Ogre::PatchSurface::interpolateVertexData(), Ogre::PatchMesh::load(), Ogre::MeshSerializerImpl_v1::readGeometry(), Ogre::MeshSerializerImpl::readGeometryColours(), Ogre::MeshSerializerImpl::readGeometryNormals(), Ogre::MeshSerializerImpl::readGeometryPositions(), Ogre::MeshSerializerImpl_v1_1::readGeometryTexCoords(), Ogre::MeshSerializerImpl::readGeometryTexCoords(), Ogre::Rectangle2D::Rectangle2D(), Ogre::BillboardSet::setPoolSize(), Ogre::PanelGuiElement::updateTextureGeometry(), and Ogre::WireBoundingBox::WireBoundingBox().

const VertexElement & Ogre::VertexDeclaration::insertElement unsigned short    atPosition,
unsigned short    source,
size_t    offset,
VertexElementType    theType,
VertexElementSemantic    semantic,
unsigned short    index = 0
[virtual]
 

Inserts a new VertexElement at a given position in this declaration.

Remarks:
This method adds a single element (positions, normals etc) at a given position in this vertex declaration. Please read the information in VertexDeclaration about the importance of ordering and structure for compatibility with older D3D drivers.
Parameters:
source  The binding index of HardwareVertexBuffer which will provide the source for this element. See VertexBufferBindingState for full information.
offset  The offset in bytes where this element is located in the buffer
theType  The data format of the element (3 floats, a colour etc)
semantic  The meaning of the data (position, normal, diffuse colour etc)
index  Optional index for multi-input elements like texture coordinates
Returns:
A reference to the VertexElement added.

Reimplemented in Ogre::D3D9VertexDeclaration.

Definition at line 197 of file OgreHardwareVertexBuffer.cpp.

References addElement(), mElementList, Ogre::VertexElementSemantic, and Ogre::VertexElementType.

Referenced by Ogre::Mesh::compileBoneAssignments().

void Ogre::VertexDeclaration::modifyElement unsigned short    elem_index,
unsigned short    source,
size_t    offset,
VertexElementType    theType,
VertexElementSemantic    semantic,
unsigned short    index = 0
[virtual]
 

Modify an element in-place, params as addElement.

Remarks:
Please read the information in VertexDeclaration about the importance of ordering and structure for compatibility with older D3D drivers.

Reimplemented in Ogre::D3D9VertexDeclaration.

Definition at line 251 of file OgreHardwareVertexBuffer.cpp.

References mElementList, Ogre::VertexElementSemantic, and Ogre::VertexElementType.

Referenced by Ogre::VertexData::prepareForShadowVolume().

bool Ogre::VertexDeclaration::operator== const VertexDeclaration &    rhs const
 

Definition at line 335 of file OgreHardwareVertexBuffer.h.

References mElementList.

void Ogre::VertexDeclaration::removeElement VertexElementSemantic    semantic,
unsigned short    index = 0
[virtual]
 

Remove the element with the given semantic and usage index.

Remarks:
In this case 'index' means the usage index for repeating elements such as texture coordinates. For other elements this will always be 0 and does not refer to the index in the vector.

Definition at line 237 of file OgreHardwareVertexBuffer.cpp.

References mElementList, and Ogre::VertexElementSemantic.

void Ogre::VertexDeclaration::removeElement unsigned short    elem_index [virtual]
 

Remove the element at the given index from this declaration.

Reimplemented in Ogre::D3D9VertexDeclaration.

Definition at line 228 of file OgreHardwareVertexBuffer.cpp.

References mElementList.

Referenced by Ogre::Entity::cloneVertexDataRemoveBlendInfo(), Ogre::Mesh::compileBoneAssignments(), Ogre::Mesh::getTangentsBuffer(), and Ogre::PanelGuiElement::updateTextureGeometry().


Member Data Documentation

VertexElementList Ogre::VertexDeclaration::mElementList [protected]
 

Definition at line 250 of file OgreHardwareVertexBuffer.h.

Referenced by addElement(), clone(), findElementBySemantic(), findElementsBySource(), Ogre::D3D9VertexDeclaration::getD3DVertexDeclaration(), getElement(), getElements(), getVertexSize(), insertElement(), modifyElement(), operator==(), and removeElement().


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

Copyright © 2002-2003 by The OGRE Team
Last modified Fri May 14 23:27:28 2004