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