From: <axl...@us...> - 2008-12-25 01:20:31
|
Revision: 87 http://hgengine.svn.sourceforge.net/hgengine/?rev=87&view=rev Author: axlecrusher Date: 2008-12-25 01:20:29 +0000 (Thu, 25 Dec 2008) Log Message: ----------- Clean up how VBO and quads work using the AlignedBuffer Modified Paths: -------------- Mercury2/src/AlignedBuffer.h Mercury2/src/Mercury2.cpp Mercury2/src/MercuryVBO.cpp Mercury2/src/MercuryVBO.h Mercury2/src/Quad.cpp Modified: Mercury2/src/AlignedBuffer.h =================================================================== --- Mercury2/src/AlignedBuffer.h 2008-12-25 01:15:26 UTC (rev 86) +++ Mercury2/src/AlignedBuffer.h 2008-12-25 01:20:29 UTC (rev 87) @@ -31,10 +31,7 @@ inline T* Buffer() { return m_data; } - T& operator[](unsigned long x) - { - return m_data[x]; - } + inline T& operator[](unsigned long x) { return m_data[x]; } private: unsigned long m_length; Modified: Mercury2/src/Mercury2.cpp =================================================================== --- Mercury2/src/Mercury2.cpp 2008-12-25 01:15:26 UTC (rev 86) +++ Mercury2/src/Mercury2.cpp 2008-12-25 01:20:29 UTC (rev 87) @@ -16,6 +16,7 @@ MercuryNode* n = (MercuryNode*)node; n->RecursiveUpdate(0.01f); } + return NULL; } int main() Modified: Mercury2/src/MercuryVBO.cpp =================================================================== --- Mercury2/src/MercuryVBO.cpp 2008-12-25 01:15:26 UTC (rev 86) +++ Mercury2/src/MercuryVBO.cpp 2008-12-25 01:20:29 UTC (rev 87) @@ -10,16 +10,13 @@ #define BUFFER_OFFSET(i) ((char*)NULL + (i)) MercuryVBO::MercuryVBO() - :MercuryAsset(), m_vertexData(NULL), m_vMem(NULL), m_vertexIndexList(NULL), m_iMem(NULL), m_initiated(false) + :MercuryAsset(), m_initiated(false) { m_bufferIDs[0] = m_bufferIDs[1] = 0; } MercuryVBO::~MercuryVBO() { - SAFE_FREE(m_vMem); - SAFE_FREE(m_iMem); - if (m_bufferIDs[0]) glDeleteBuffersARB(2, m_bufferIDs); m_bufferIDs[0] = m_bufferIDs[1] = 0; } @@ -46,7 +43,7 @@ //XXX This seems to apply texture coordinates to all active texture units glTexCoordPointer(2, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*3)); - glDrawRangeElements(GL_TRIANGLES, 0, m_bufferLength[1], m_bufferLength[1], GL_UNSIGNED_SHORT, NULL); + glDrawRangeElements(GL_TRIANGLES, 0, m_indexData.Length()-1, m_indexData.Length(), GL_UNSIGNED_SHORT, NULL); m_lastVBOrendered = this; } @@ -57,36 +54,25 @@ //vertex VBO glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_bufferIDs[0]); - glBufferDataARB(GL_ARRAY_BUFFER_ARB, m_bufferLength[0], m_vertexData, GL_STATIC_DRAW_ARB); + glBufferDataARB(GL_ARRAY_BUFFER_ARB, m_vertexData.LengthInBytes(), m_vertexData.Buffer(), GL_STATIC_DRAW_ARB); //indices VBO glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_bufferIDs[1]); - glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(uint16_t)*m_bufferLength[1], m_vertexIndexList, GL_STATIC_DRAW_ARB); - - SAFE_FREE(m_vMem); - SAFE_FREE(m_iMem); - + glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_indexData.LengthInBytes(), m_indexData.Buffer(), GL_STATIC_DRAW_ARB); + glEnableClientState(GL_VERTEX_ARRAY); m_initiated = true; } -void MercuryVBO::AllocateVertexSpace(unsigned int count, unsigned int elementSize) +void MercuryVBO::AllocateVertexSpace(unsigned int count) { - SAFE_FREE(m_vMem); - void* mem = NULL; - m_vertexData = (char*)mmemalign(32, elementSize*count, mem); - m_vMem = (char*)mem; - m_bufferLength[0] = elementSize*count; + m_vertexData.Allocate(count*5); } void MercuryVBO::AllocateIndexSpace(unsigned int count) { - SAFE_FREE(m_iMem); - void* mem = NULL; - m_vertexIndexList = (uint16_t*)mmemalign(32, sizeof(uint16_t)*count, mem); - m_iMem = (uint16_t*)mem; - m_bufferLength[1] = count; + m_indexData.Allocate(count); } void* MercuryVBO::m_lastVBOrendered = NULL; Modified: Mercury2/src/MercuryVBO.h =================================================================== --- Mercury2/src/MercuryVBO.h 2008-12-25 01:15:26 UTC (rev 86) +++ Mercury2/src/MercuryVBO.h 2008-12-25 01:20:29 UTC (rev 87) @@ -1,4 +1,5 @@ #include <MercuryAsset.h> +#include <AlignedBuffer.h> class MercuryVBO : public MercuryAsset { @@ -8,23 +9,19 @@ virtual void Render(MercuryNode* node); - void AllocateVertexSpace(unsigned int count, unsigned int elementSize); + void AllocateVertexSpace(unsigned int count); void AllocateIndexSpace(unsigned int count); - - inline char* Buffer() { return m_vertexData; } - inline uint16_t* IndexBuffer() { return m_vertexIndexList; } + private: virtual void InitVBO(); - + unsigned int m_bufferIDs[2]; - unsigned int m_bufferLength[2]; - - char *m_vertexData, *m_vMem; - uint16_t *m_vertexIndexList, *m_iMem; - - bool m_initiated; - + bool m_initiated; static void* m_lastVBOrendered; + + protected: + AlignedBuffer<float> m_vertexData; + AlignedBuffer<uint16_t> m_indexData; }; /**************************************************************************** Modified: Mercury2/src/Quad.cpp =================================================================== --- Mercury2/src/Quad.cpp 2008-12-25 01:15:26 UTC (rev 86) +++ Mercury2/src/Quad.cpp 2008-12-25 01:20:29 UTC (rev 87) @@ -10,36 +10,33 @@ Quad::Quad() { AllocateIndexSpace(6); - AllocateVertexSpace(4, sizeof(float)*5); + AllocateVertexSpace(4); - float* buffer = (float*)Buffer(); +// float* buffer = m_vertexData.m_vertexData(); int i = 0; - buffer[i++] = -0.5; buffer[i++] = -0.5; buffer[i++] = 0.0; - buffer[i++] = 0; buffer[i++] = 1; + m_vertexData[i++] = -0.5; m_vertexData[i++] = -0.5; m_vertexData[i++] = 0.0; + m_vertexData[i++] = 0; m_vertexData[i++] = 1; - buffer[i++] = 0.5; buffer[i++] = -0.5; buffer[i++] = 0.0; - buffer[i++] = 1; buffer[i++] = 1; + m_vertexData[i++] = 0.5; m_vertexData[i++] = -0.5; m_vertexData[i++] = 0.0; + m_vertexData[i++] = 1; m_vertexData[i++] = 1; - buffer[i++] = 0.5; buffer[i++] = 0.5; buffer[i++] = 0.0; - buffer[i++] = 1; buffer[i++] = 0; + m_vertexData[i++] = 0.5; m_vertexData[i++] = 0.5; m_vertexData[i++] = 0.0; + m_vertexData[i++] = 1; m_vertexData[i++] = 0; - buffer[i++] = -0.5; buffer[i++] = 0.5; buffer[i++] = 0.0; - buffer[i++] = 0; buffer[i++] = 0; + m_vertexData[i++] = -0.5; m_vertexData[i++] = 0.5; m_vertexData[i++] = 0.0; + m_vertexData[i++] = 0; m_vertexData[i++] = 0; - uint16_t* indice = IndexBuffer(); - indice[0] = 0; - indice[1] = 1; - indice[2] = 2; - - indice[3] = 2; - indice[4] = 3; - indice[5] = 0; + m_indexData[5] = m_indexData[0] = 0; + m_indexData[1] = 1; + m_indexData[3] = m_indexData[2] = 2; + m_indexData[4] = 3; } Quad::~Quad() { - m_myInstance = NULL; + if (m_myInstance == this) + m_myInstance = NULL; } Quad* Quad::Generate() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |