summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/VertexManager.cpp
diff options
context:
space:
mode:
authorTony Wasserka <neobrainx@gmail.com>2015-01-24 13:29:57 +0100
committerTony Wasserka <neobrainx@gmail.com>2015-01-24 13:29:57 +0100
commit43036af944e706ac38821561c2f3333a500e63f6 (patch)
tree6c5b23ed4707d9af477143774dd86f9f9b9fe7be /Source/Core/VideoBackends/OGL/VertexManager.cpp
parent4e9497cdb85ecbd088ca06fb501496aa0c8240a7 (diff)
parent14baf038e70a598a6af1ce71719bb557425941f9 (diff)
Merge pull request #1812 from phire/real_zfreeze
Add proper zfreeze support.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/VertexManager.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/VertexManager.cpp29
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)