From 68ab4f6cec316769fa600e4b69b09500d582eb4d Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Tue, 31 Oct 2017 15:29:45 +0200 Subject: [PATCH] [core] Let transparency leak in GLContext::Shared mode --- src/mbgl/renderer/renderer_impl.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index cbdcbf2f9..d7886ebe8 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -298,7 +298,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { if (const RenderBackgroundLayer* background = layer->as()) { const BackgroundPaintProperties::PossiblyEvaluated& paint = background->evaluated; - if (layerImpl.get() == layerImpls->at(0).get() && paint.get().from.empty()) { + if (parameters.contextMode == GLContextMode::Unique + && layerImpl.get() == layerImpls->at(0).get() + && paint.get().from.empty()) { // This is a solid background. We can use glClear(). backgroundColor = paint.get() * paint.get(); } else { @@ -434,10 +436,19 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { // Renders the backdrop of the OpenGL view. This also paints in areas where we don't have any // tiles whatsoever. { + using namespace gl::value; + MBGL_DEBUG_GROUP(parameters.context, "clear"); parameters.backend.bind(); - parameters.context.clear((parameters.debugOptions & MapDebugOptions::Overdraw) - ? Color::black() : backgroundColor); + if (parameters.debugOptions & MapDebugOptions::Overdraw) { + parameters.context.clear(Color::black(), ClearDepth::Default, ClearStencil::Default); + } else if (parameters.contextMode == GLContextMode::Shared) { + // Preserve the shared context background colors, clearing only alpha. + optional mask = { { false, false, false, true } }; + parameters.context.clear(backgroundColor, ClearDepth::Default, ClearStencil::Default, mask); + } else { + parameters.context.clear(backgroundColor, ClearDepth::Default, ClearStencil::Default); + } } // - CLIPPING MASKS ----------------------------------------------------------------------------