[core] move cleanup to gfx::Context
This commit is contained in:
@@ -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 <class Vertex>
|
||||
VertexBuffer<Vertex>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <mbgl/gl/texture_resource.hpp>
|
||||
#include <mbgl/gl/draw_scope_resource.hpp>
|
||||
#include <mbgl/gl/texture.hpp>
|
||||
#include <mbgl/gl/debugging.hpp>
|
||||
#include <mbgl/gl/debugging_extension.hpp>
|
||||
#include <mbgl/gl/vertex_array_extension.hpp>
|
||||
#include <mbgl/gl/program_binary_extension.hpp>
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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<Feature> Renderer::Impl::queryRenderedFeatures(const ScreenLineString& geometry, const RenderedQueryOptions& options) const {
|
||||
|
||||
Reference in New Issue
Block a user