diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-10-31 15:29:45 +0200 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-11-01 17:45:37 +0200 |
commit | 68ab4f6cec316769fa600e4b69b09500d582eb4d (patch) | |
tree | d8cf99dbb8ed0040a219769f69f2feec15e073e3 /src/mbgl/renderer | |
parent | e350ef37fe68312c4b5fb03b289a90c0bdda4f03 (diff) | |
download | qtlocation-mapboxgl-68ab4f6cec316769fa600e4b69b09500d582eb4d.tar.gz |
[core] Let transparency leak in GLContext::Shared mode
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index cbdcbf2f96..d7886ebe88 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<RenderBackgroundLayer>()) { const BackgroundPaintProperties::PossiblyEvaluated& paint = background->evaluated; - if (layerImpl.get() == layerImpls->at(0).get() && paint.get<BackgroundPattern>().from.empty()) { + if (parameters.contextMode == GLContextMode::Unique + && layerImpl.get() == layerImpls->at(0).get() + && paint.get<BackgroundPattern>().from.empty()) { // This is a solid background. We can use glClear(). backgroundColor = paint.get<BackgroundColor>() * paint.get<BackgroundOpacity>(); } 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<gl::ColorMode::Mask> 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 ---------------------------------------------------------------------------- |