From f86cc81680dd64f135f4f7b813c6cbb1e7e822d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Wed, 20 Mar 2019 10:34:02 +0100 Subject: [core] move cleanup to gfx::Context --- src/mbgl/gfx/context.hpp | 4 ++++ src/mbgl/gl/context.cpp | 14 ++++++++++++++ src/mbgl/gl/context.hpp | 2 +- src/mbgl/renderer/renderer_impl.cpp | 15 +-------------- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/mbgl/gfx/context.hpp b/src/mbgl/gfx/context.hpp index 3653eeebe1..ff84cf34e8 100644 --- a/src/mbgl/gfx/context.hpp +++ b/src/mbgl/gfx/context.hpp @@ -33,6 +33,10 @@ public: Context& operator=(const Context& other) = delete; virtual ~Context() = default; +public: + // Called at the end of a frame. + virtual void performCleanup() = 0; + public: template VertexBuffer diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index eff3c2160c..bc703db401 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -706,6 +707,19 @@ void Context::draw(const gfx::DrawMode& drawMode, } void Context::performCleanup() { + // TODO: Find a better way to unbind VAOs after we're done with them without introducing + // unnecessary bind(0)/bind(N) sequences. + { + MBGL_DEBUG_GROUP(*this, "cleanup"); + + activeTextureUnit = 1; + texture[1] = 0; + activeTextureUnit = 0; + texture[0] = 0; + + bindVertexArray = 0; + } + for (auto id : abandonedPrograms) { if (program == id) { program.setDirty(); diff --git a/src/mbgl/gl/context.hpp b/src/mbgl/gl/context.hpp index 8a67213628..338a294b47 100644 --- a/src/mbgl/gl/context.hpp +++ b/src/mbgl/gl/context.hpp @@ -110,7 +110,7 @@ public: // Actually remove the objects we marked as abandoned with the above methods. // Only call this while the OpenGL context is exclusive to this thread. - void performCleanup(); + void performCleanup() override; // Drain pools and remove abandoned objects, in preparation for destroying the store. // Only call this while the OpenGL context is exclusive to this thread. diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index dee42a6128..aa47d56b47 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -589,19 +589,6 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { } #endif - // TODO: Find a better way to unbind VAOs after we're done with them without introducing - // unnecessary bind(0)/bind(N) sequences. - { - MBGL_DEBUG_GROUP(parameters.context, "cleanup"); - - glContext.activeTextureUnit = 1; - glContext.texture[1] = 0; - glContext.activeTextureUnit = 0; - glContext.texture[0] = 0; - - glContext.bindVertexArray = 0; - } - observer->onDidFinishRenderingFrame( loaded ? RendererObserver::RenderMode::Full : RendererObserver::RenderMode::Partial, updateParameters.mode == MapMode::Continuous && hasTransitions(parameters.timePoint) @@ -615,7 +602,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { } // Cleanup only after signaling completion - glContext.performCleanup(); + parameters.context.performCleanup(); } std::vector Renderer::Impl::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options) const { -- cgit v1.2.1