Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-03-19 14:06:43 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-11-30 16:04:09 +0300
commit7bf2c23fbcde9448a80ffca93d9c73fa1fcefb22 (patch)
tree01686a4d7077618865723c8d5de285f0b0630c1a /drape/vertex_array_buffer.cpp
parent239af2692d6e84db6951ee856f28ded538d4f71b (diff)
Added optimization of GPU memory usage
Diffstat (limited to 'drape/vertex_array_buffer.cpp')
-rw-r--r--drape/vertex_array_buffer.cpp21
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)