OpenGL: refactor all of our StreamBuffers

The old way was to use big switch/case statements based on a type of buffer.
The new one is to use inheritance.

This change prohibits us to change the buffer type while running, but I doubt we'll ever do so.
Performance should also be a bit better. Also a nice cleanup.

Added some comments about this different kind of buffers.
This commit is contained in:
degasus
2014-01-23 00:47:49 +01:00
parent be1fee6d74
commit 128fcdac26
4 changed files with 373 additions and 256 deletions

View File

@ -58,11 +58,11 @@ VertexManager::~VertexManager()
void VertexManager::CreateDeviceObjects()
{
s_vertexBuffer = new StreamBuffer(GL_ARRAY_BUFFER, MAX_VBUFFER_SIZE);
m_vertex_buffers = s_vertexBuffer->getBuffer();
s_vertexBuffer = StreamBuffer::Create(GL_ARRAY_BUFFER, MAX_VBUFFER_SIZE);
m_vertex_buffers = s_vertexBuffer->m_buffer;
s_indexBuffer = new StreamBuffer(GL_ELEMENT_ARRAY_BUFFER, MAX_IBUFFER_SIZE);
m_index_buffers = s_indexBuffer->getBuffer();
s_indexBuffer = StreamBuffer::Create(GL_ELEMENT_ARRAY_BUFFER, MAX_IBUFFER_SIZE);
m_index_buffers = s_indexBuffer->m_buffer;
m_CurrentVertexFmt = NULL;
m_last_vao = 0;
@ -85,14 +85,15 @@ void VertexManager::PrepareDrawBuffers(u32 stride)
u32 vertex_data_size = IndexGenerator::GetNumVerts() * stride;
u32 index_data_size = IndexGenerator::GetIndexLen() * sizeof(u16);
u8* buffer = s_vertexBuffer->Map(vertex_data_size, stride);
memcpy(buffer, GetVertexBuffer(), vertex_data_size);
size_t offset = s_vertexBuffer->Unmap(vertex_data_size);
s_baseVertex = offset / stride;
auto buffer = s_vertexBuffer->Map(vertex_data_size, stride);
memcpy(buffer.first, GetVertexBuffer(), vertex_data_size);
s_vertexBuffer->Unmap(vertex_data_size);
s_baseVertex = buffer.second / stride;
buffer = s_indexBuffer->Map(index_data_size);
memcpy(buffer, GetIndexBuffer(), index_data_size);
s_index_offset = s_indexBuffer->Unmap(index_data_size);
memcpy(buffer.first, GetIndexBuffer(), index_data_size);
s_indexBuffer->Unmap(index_data_size);
s_index_offset = buffer.second;
ADDSTAT(stats.thisFrame.bytesVertexStreamed, vertex_data_size);
ADDSTAT(stats.thisFrame.bytesIndexStreamed, index_data_size);