Stop doing nastly shit to OpenGL stream buffers.

Instead we keep the loaded vertices in CPU memory.
This commit is contained in:
Scott Mansell
2015-01-24 14:37:20 +13:00
parent 5510c86b81
commit 14baf038e7
6 changed files with 79 additions and 54 deletions

View File

@ -43,6 +43,8 @@ static size_t s_index_offset;
VertexManager::VertexManager()
{
CreateDeviceObjects();
CpuVBuffer.resize(MAX_VBUFFER_SIZE);
CpuIBuffer.resize(MAX_IBUFFER_SIZE);
}
VertexManager::~VertexManager()
@ -81,14 +83,25 @@ void VertexManager::PrepareDrawBuffers(u32 stride)
void VertexManager::ResetBuffer(u32 stride)
{
auto buffer = s_vertexBuffer->Map(MAXVBUFFERSIZE, stride);
s_pCurBufferPointer = s_pBaseBufferPointer = buffer.first;
s_pEndBufferPointer = buffer.first + MAXVBUFFERSIZE;
s_baseVertex = buffer.second / stride;
if (CullAll)
{
// This buffer isn't getting sent to the GPU. Just allocate it on the cpu.
s_pCurBufferPointer = s_pBaseBufferPointer = CpuVBuffer.data();
s_pEndBufferPointer = s_pBaseBufferPointer + CpuVBuffer.size();
buffer = s_indexBuffer->Map(MAXIBUFFERSIZE * sizeof(u16));
IndexGenerator::Start((u16*)buffer.first);
s_index_offset = buffer.second;
IndexGenerator::Start((u16*)CpuIBuffer.data());
}
else
{
auto buffer = s_vertexBuffer->Map(MAXVBUFFERSIZE, stride);
s_pCurBufferPointer = s_pBaseBufferPointer = buffer.first;
s_pEndBufferPointer = buffer.first + MAXVBUFFERSIZE;
s_baseVertex = buffer.second / stride;
buffer = s_indexBuffer->Map(MAXIBUFFERSIZE * sizeof(u16));
IndexGenerator::Start((u16*)buffer.first);
s_index_offset = buffer.second;
}
}
void VertexManager::Draw(u32 stride)