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:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2016-05-06 13:31:23 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-05-12 10:38:39 +0300
commitd55bc5d652f3ad4d04f934cc77e70592da6f658e (patch)
tree3087930e109220895f7a164e3a6220a0e56ad842 /drape/vertex_array_buffer.cpp
parent91a2089542d1cadc81ac518ecd6effcba7549122 (diff)
Unbind VAO after each binding.
Diffstat (limited to 'drape/vertex_array_buffer.cpp')
-rw-r--r--drape/vertex_array_buffer.cpp30
1 files changed, 23 insertions, 7 deletions
diff --git a/drape/vertex_array_buffer.cpp b/drape/vertex_array_buffer.cpp
index ba836c9e59..fa7d78d114 100644
--- a/drape/vertex_array_buffer.cpp
+++ b/drape/vertex_array_buffer.cpp
@@ -79,14 +79,14 @@ void VertexArrayBuffer::RenderRange(IndicesRange const & range)
ASSERT(m_program != nullptr, ("Somebody not call Build. It's very bad. Very very bad"));
/// if OES_vertex_array_object is supported than all bindings already saved in VAO
/// and we need only bind VAO.
- if (GLExtensionsList::Instance().IsSupported(GLExtensionsList::VertexArrayObject))
- Bind();
- else
+ if (!Bind())
BindStaticBuffers();
BindDynamicBuffers();
GetIndexBuffer()->Bind();
GLFunctions::glDrawElements(dp::IndexStorage::SizeOfIndex(), range.m_idxCount, range.m_idxStart);
+
+ Unbind();
}
}
@@ -111,6 +111,7 @@ void VertexArrayBuffer::Build(ref_ptr<GpuProgram> program)
m_VAO = GLFunctions::glGenVertexArray();
Bind();
BindStaticBuffers();
+ Unbind();
}
void VertexArrayBuffer::UploadData(BindingInfo const & bindingInfo, void const * data, uint32_t count)
@@ -232,8 +233,7 @@ void VertexArrayBuffer::ApplyMutation(ref_ptr<IndexBufferMutator> indexMutator,
{
/// We need to bind current VAO before calling glBindBuffer if OES_vertex_array_object is supported.
/// Otherwise we risk affecting a previously binded VAO.
- if (GLExtensionsList::Instance().IsSupported(GLExtensionsList::VertexArrayObject))
- Bind();
+ Bind();
if (indexMutator != nullptr)
{
@@ -247,7 +247,10 @@ void VertexArrayBuffer::ApplyMutation(ref_ptr<IndexBufferMutator> indexMutator,
}
if (attrMutator == nullptr)
+ {
+ Unbind();
return;
+ }
typedef AttributeBufferMutator::TMutateData TMutateData;
typedef AttributeBufferMutator::TMutateNodes TMutateNodes;
@@ -266,12 +269,25 @@ void VertexArrayBuffer::ApplyMutation(ref_ptr<IndexBufferMutator> indexMutator,
mapper.UpdateData(node.m_data.get(), node.m_region.m_offset, node.m_region.m_count);
}
}
+
+ Unbind();
}
-void VertexArrayBuffer::Bind() const
+bool VertexArrayBuffer::Bind() const
{
ASSERT(m_VAO != 0, ("You need to call Build method before bind it and render"));
- GLFunctions::glBindVertexArray(m_VAO);
+ if (GLExtensionsList::Instance().IsSupported(GLExtensionsList::VertexArrayObject))
+ {
+ GLFunctions::glBindVertexArray(m_VAO);
+ return true;
+ }
+ return false;
+}
+
+void VertexArrayBuffer::Unbind() const
+{
+ if (GLExtensionsList::Instance().IsSupported(GLExtensionsList::VertexArrayObject))
+ GLFunctions::glBindVertexArray(0);
}
void VertexArrayBuffer::BindStaticBuffers() const