diff options
| author | Scott Mansell <phiren@gmail.com> | 2015-01-24 14:37:20 +1300 |
|---|---|---|
| committer | Scott Mansell <phiren@gmail.com> | 2015-01-24 14:41:51 +1300 |
| commit | 14baf038e70a598a6af1ce71719bb557425941f9 (patch) | |
| tree | bf9deadbc7b3453db3ed20d89f211cb30f3f98e3 /Source/Core/VideoBackends/OGL/VertexManager.cpp | |
| parent | 5510c86b8133ec734ba490b700d4f432d98f71a7 (diff) | |
Stop doing nastly shit to OpenGL stream buffers.
Instead we keep the loaded vertices in CPU memory.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/VertexManager.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/VertexManager.cpp | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/Source/Core/VideoBackends/OGL/VertexManager.cpp b/Source/Core/VideoBackends/OGL/VertexManager.cpp index 1a162b1cde..5b89e0507e 100644 --- a/Source/Core/VideoBackends/OGL/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/VertexManager.cpp @@ -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; - - buffer = s_indexBuffer->Map(MAXIBUFFERSIZE * sizeof(u16)); - IndexGenerator::Start((u16*)buffer.first); - s_index_offset = buffer.second; + 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(); + + 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) |
