diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-03-19 14:06:43 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-11-30 16:04:09 +0300 |
commit | 7bf2c23fbcde9448a80ffca93d9c73fa1fcefb22 (patch) | |
tree | 01686a4d7077618865723c8d5de285f0b0630c1a /drape/vertex_array_buffer.cpp | |
parent | 239af2692d6e84db6951ee856f28ded538d4f71b (diff) |
Added optimization of GPU memory usage
Diffstat (limited to 'drape/vertex_array_buffer.cpp')
-rw-r--r-- | drape/vertex_array_buffer.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/drape/vertex_array_buffer.cpp b/drape/vertex_array_buffer.cpp index 663fff9093..41e43821ae 100644 --- a/drape/vertex_array_buffer.cpp +++ b/drape/vertex_array_buffer.cpp @@ -34,6 +34,19 @@ VertexArrayBuffer::~VertexArrayBuffer() void VertexArrayBuffer::Preflush() { + /// buffers are ready, so moving them from CPU to GPU + for(auto & buffer : m_staticBuffers) + { + buffer.second->MoveToGPU(); + } + + for(auto & buffer : m_dynamicBuffers) + { + buffer.second->MoveToGPU(); + } + + m_indexBuffer->MoveToGPU(); + GLFunctions::glBindBuffer(0, gl_const::GLElementArrayBuffer); GLFunctions::glBindBuffer(0, gl_const::GLArrayBuffer); } @@ -76,9 +89,13 @@ void VertexArrayBuffer::UploadData(BindingInfo const & bindingInfo, void const * { RefPointer<DataBuffer> buffer; if (!bindingInfo.IsDynamic()) + { buffer = GetOrCreateStaticBuffer(bindingInfo); + } else + { buffer = GetOrCreateDynamicBuffer(bindingInfo); + } buffer->UploadData(data, count); } @@ -124,7 +141,7 @@ RefPointer<DataBuffer> VertexArrayBuffer::GetOrCreateBuffer(BindingInfo const & if (it == buffers->end()) { MasterPointer<DataBuffer> & buffer = (*buffers)[bindingInfo]; - buffer.Reset(new DataBuffer(bindingInfo.GetElementSize(), m_dataBufferSize)); + buffer.Reset(new DataBuffer(GPUBuffer::ElementBuffer, bindingInfo.GetElementSize(), m_dataBufferSize)); return buffer.GetRefPointer(); } @@ -198,7 +215,7 @@ void VertexArrayBuffer::ApplyMutation(RefPointer<IndexBufferMutator> indexMutato { RefPointer<DataBuffer> buffer = GetDynamicBuffer(it->first); ASSERT(!buffer.IsNull(), ()); - GPUBufferMapper mapper(buffer); + GPUBufferMapper mapper(buffer->GetGpuBuffer()); TMutateNodes const & nodes = it->second; for (size_t i = 0; i < nodes.size(); ++i) |