Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

pge::VBO Class Reference

#include <VBO.h>

Collaboration diagram for pge::VBO:

Collaboration graph
[legend]

Public Member Functions

 VBO (int vertexNum)
virtual ~VBO (void)
int addVertex (Vector3f vertex, Vector3f normal, Vector2f texCoord)
void addTriangle (Triangle *triangle)
void buildVBO (void)
void renderVBO (int start, int length)

Private Attributes

Vector3fm_vertexArrayBuffer
Vector2fm_texCoordArrayBuffer
Vector3fm_normalArrayBuffer
unsigned int m_vboVertexDescriptor
unsigned int m_vboTexCoordDescriptor
unsigned int m_vboNormalDescriptor
unsigned int m_vertexBufferSize
unsigned int m_texCoordBufferSize
unsigned int m_normalBufferSize
unsigned int m_vertexNum
unsigned int m_vertexBufferIndex

Constructor & Destructor Documentation

pge::VBO::VBO int  vertexNum  )  [inline]
 

Definition at line 22 of file VBO.h.

References m_normalArrayBuffer, m_normalBufferSize, m_texCoordArrayBuffer, m_texCoordBufferSize, m_vboNormalDescriptor, m_vboTexCoordDescriptor, m_vboVertexDescriptor, m_vertexArrayBuffer, m_vertexBufferIndex, m_vertexBufferSize, and m_vertexNum.

00022                                    {
00023                         m_vertexArrayBuffer = new Vector3f[vertexNum];
00024                         m_texCoordArrayBuffer = new Vector2f[vertexNum];
00025                         m_normalArrayBuffer = new Vector3f[vertexNum];
00026 
00027                         m_vboVertexDescriptor = 0;
00028                         m_vboTexCoordDescriptor = 0;
00029                         m_vboNormalDescriptor = 0;
00030 
00031                         m_vertexBufferSize = 0;
00032                         m_texCoordBufferSize = 0;
00033                         m_normalBufferSize = 0;
00034 
00035                         m_vertexNum = vertexNum;
00036                         m_vertexBufferIndex = 0;
00037                 }

virtual pge::VBO::~VBO void   )  [inline, virtual]
 

Definition at line 43 of file VBO.h.

References m_vboNormalDescriptor, m_vboTexCoordDescriptor, and m_vboVertexDescriptor.

00043                                    {
00044                         unsigned int buffer[3] = {m_vboVertexDescriptor, m_vboTexCoordDescriptor, m_vboNormalDescriptor};
00045                         glDeleteBuffers(3, buffer);
00046                 }


Member Function Documentation

void pge::VBO::addTriangle Triangle triangle  )  [inline]
 

Definition at line 73 of file VBO.h.

References addVertex(), pge::Plane::m_normal, pge::Triangle::m_plane, pge::Triangle::m_texCoords, and pge::Triangle::m_vertices.

Referenced by pge::SingleTexturedMesh::buildVBO().

00073                                                      {
00074                         if(triangle->m_plane == NULL) {
00075                                 printf("WARNING [%s]: Triangle without valid plane.", __FILE__);
00076                                 return;
00077                         }
00078                         addVertex(triangle->m_vertices[0], triangle->m_plane->m_normal, triangle->m_texCoords[0]);
00079                         addVertex(triangle->m_vertices[1], triangle->m_plane->m_normal, triangle->m_texCoords[1]);
00080                         addVertex(triangle->m_vertices[2], triangle->m_plane->m_normal, triangle->m_texCoords[2]);
00081                 }

Here is the call graph for this function:

int pge::VBO::addVertex Vector3f  vertex,
Vector3f  normal,
Vector2f  texCoord
[inline]
 

Definition at line 52 of file VBO.h.

References m_normalArrayBuffer, m_texCoordArrayBuffer, m_vertexArrayBuffer, and m_vertexBufferIndex.

Referenced by addTriangle().

00052                                                                                    {
00053                         int result = m_vertexBufferIndex;
00054 
00055                         // Put vertex.
00056                         m_vertexArrayBuffer[m_vertexBufferIndex] = vertex;
00057 
00058                         // Put normal.
00059                         m_normalArrayBuffer[m_vertexBufferIndex] = normal;
00060 
00061                         // Put texCoord.
00062                         m_texCoordArrayBuffer[m_vertexBufferIndex] = texCoord;
00063 
00064                         // Increment vertexBuferIndex but return old value.
00065                         m_vertexBufferIndex += 1;
00066                         return result;
00067                 }

void pge::VBO::buildVBO void   )  [inline]
 

Definition at line 87 of file VBO.h.

References m_normalArrayBuffer, m_texCoordArrayBuffer, m_vboNormalDescriptor, m_vboTexCoordDescriptor, m_vboVertexDescriptor, m_vertexArrayBuffer, and m_vertexBufferIndex.

Referenced by pge::SingleTexturedMesh::buildVBO().

00087                                     {
00088                         // Vertex array.
00089                         glGenBuffers(1, &m_vboVertexDescriptor);
00090                         glBindBuffer(GL_ARRAY_BUFFER, m_vboVertexDescriptor);
00091                         glBufferData(GL_ARRAY_BUFFER, m_vertexBufferIndex * 3 * sizeof(float), m_vertexArrayBuffer, GL_STATIC_DRAW);
00092 
00093                         // TexCoord array.
00094                         glGenBuffers(1, &m_vboTexCoordDescriptor);
00095                         glBindBuffer(GL_ARRAY_BUFFER, m_vboTexCoordDescriptor);
00096                         glBufferData(GL_ARRAY_BUFFER, m_vertexBufferIndex * 2 * sizeof(float), m_texCoordArrayBuffer, GL_STATIC_DRAW);
00097 
00098                         // Normal array.
00099                         glGenBuffers(1, &m_vboNormalDescriptor);
00100                         glBindBuffer(GL_ARRAY_BUFFER, m_vboNormalDescriptor);
00101                         glBufferData(GL_ARRAY_BUFFER, m_vertexBufferIndex * 3 * sizeof(float), m_normalArrayBuffer, GL_STATIC_DRAW);
00102 
00103                         delete [] m_vertexArrayBuffer;
00104                         m_vertexArrayBuffer = NULL;
00105 
00106                         delete [] m_texCoordArrayBuffer;
00107                         m_texCoordArrayBuffer = NULL;
00108 
00109                         delete [] m_normalArrayBuffer;
00110                         m_normalArrayBuffer = NULL;
00111                 }

void pge::VBO::renderVBO int  start,
int  length
[inline]
 

Definition at line 117 of file VBO.h.

References m_vboNormalDescriptor, m_vboTexCoordDescriptor, and m_vboVertexDescriptor.

Referenced by pge::SingleTexturedMesh::renderVBO().

00117                                                       {
00118                         glBindBuffer(GL_ARRAY_BUFFER, m_vboVertexDescriptor);
00119                         glVertexPointer(3, GL_FLOAT, 0, (char*)NULL);
00120 
00121                         glBindBuffer(GL_ARRAY_BUFFER, m_vboTexCoordDescriptor);
00122                         glTexCoordPointer(2, GL_FLOAT, 0, (char*)NULL);
00123 
00124                         glBindBuffer(GL_ARRAY_BUFFER, m_vboNormalDescriptor);
00125                         glNormalPointer(GL_FLOAT, 0, (char*)NULL);
00126 
00127                         glEnableClientState(GL_VERTEX_ARRAY);
00128                         glEnableClientState(GL_TEXTURE_COORD_ARRAY);
00129                         glEnableClientState(GL_NORMAL_ARRAY);
00130                         glDrawArrays(GL_TRIANGLES, start, length);
00131                         glDisableClientState(GL_NORMAL_ARRAY);
00132                         glDisableClientState(GL_TEXTURE_COORD_ARRAY);
00133                         glDisableClientState(GL_VERTEX_ARRAY);
00134                 }


Field Documentation

Vector3f* pge::VBO::m_normalArrayBuffer [private]
 

Definition at line 140 of file VBO.h.

Referenced by addVertex(), buildVBO(), and VBO().

unsigned int pge::VBO::m_normalBufferSize [private]
 

Definition at line 148 of file VBO.h.

Referenced by VBO().

Vector2f* pge::VBO::m_texCoordArrayBuffer [private]
 

Definition at line 139 of file VBO.h.

Referenced by addVertex(), buildVBO(), and VBO().

unsigned int pge::VBO::m_texCoordBufferSize [private]
 

Definition at line 147 of file VBO.h.

Referenced by VBO().

unsigned int pge::VBO::m_vboNormalDescriptor [private]
 

Definition at line 144 of file VBO.h.

Referenced by buildVBO(), renderVBO(), VBO(), and ~VBO().

unsigned int pge::VBO::m_vboTexCoordDescriptor [private]
 

Definition at line 143 of file VBO.h.

Referenced by buildVBO(), renderVBO(), VBO(), and ~VBO().

unsigned int pge::VBO::m_vboVertexDescriptor [private]
 

Definition at line 142 of file VBO.h.

Referenced by buildVBO(), renderVBO(), VBO(), and ~VBO().

Vector3f* pge::VBO::m_vertexArrayBuffer [private]
 

Definition at line 138 of file VBO.h.

Referenced by addVertex(), buildVBO(), and VBO().

unsigned int pge::VBO::m_vertexBufferIndex [private]
 

Definition at line 151 of file VBO.h.

Referenced by addVertex(), buildVBO(), and VBO().

unsigned int pge::VBO::m_vertexBufferSize [private]
 

Definition at line 146 of file VBO.h.

Referenced by VBO().

unsigned int pge::VBO::m_vertexNum [private]
 

Definition at line 150 of file VBO.h.

Referenced by VBO().


The documentation for this class was generated from the following file:
Generated on Mon Oct 16 12:09:50 2006 for Phobosengine by doxygen 1.3.4