diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index 544198fe6..dae9c766c 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -87,6 +87,9 @@ void Painter::setup() { // Stencil test MBGL_CHECK_ERROR(glEnable(GL_STENCIL_TEST)); MBGL_CHECK_ERROR(glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE)); + + // Depth test + glDepthFunc(GL_LEQUAL); } void Painter::setupShaders() { @@ -193,7 +196,6 @@ void Painter::setOpaque() { if (pass != RenderPass::Opaque) { pass = RenderPass::Opaque; MBGL_CHECK_ERROR(glDisable(GL_BLEND)); - depthMask(true); } } @@ -201,7 +203,6 @@ void Painter::setTranslucent() { if (pass != RenderPass::Translucent) { pass = RenderPass::Translucent; MBGL_CHECK_ERROR(glEnable(GL_BLEND)); - depthMask(false); } } diff --git a/src/mbgl/renderer/painter_fill.cpp b/src/mbgl/renderer/painter_fill.cpp index bbf50987a..cadc9ab14 100644 --- a/src/mbgl/renderer/painter_fill.cpp +++ b/src/mbgl/renderer/painter_fill.cpp @@ -60,6 +60,7 @@ void Painter::renderFill(FillBucket& bucket, const StyleLayer &layer_desc, const if (pattern) { // Image fill. if (pass == RenderPass::Translucent) { + const SpriteAtlasPosition posA = spriteAtlas.getPosition(properties.image.from, true); const SpriteAtlasPosition posB = spriteAtlas.getPosition(properties.image.to, true); float factor = 8.0 / std::pow(2, state.getIntegerZoom() - id.z); @@ -91,6 +92,7 @@ void Painter::renderFill(FillBucket& bucket, const StyleLayer &layer_desc, const spriteAtlas.bind(true); // Draw the actual triangles into the color & stencil buffer. + depthMask(true); depthRange(strata, 1.0f); bucket.drawElements(*patternShader); } @@ -107,6 +109,7 @@ void Painter::renderFill(FillBucket& bucket, const StyleLayer &layer_desc, const plainShader->u_color = fill_color; // Draw the actual triangles into the color & stencil buffer. + depthMask(true); depthRange(strata + strata_epsilon, 1.0f); bucket.drawElements(*plainShader); } @@ -127,7 +130,7 @@ void Painter::renderFill(FillBucket& bucket, const StyleLayer &layer_desc, const static_cast(state.getFramebufferHeight()) }}; - depthRange(strata + strata_epsilon, 1.0f); + depthRange(strata + strata_epsilon + strata_epsilon, 1.0f); bucket.drawVertices(*outlineShader); } } diff --git a/src/mbgl/renderer/painter_line.cpp b/src/mbgl/renderer/painter_line.cpp index 36b8c3b68..679e4db7b 100644 --- a/src/mbgl/renderer/painter_line.cpp +++ b/src/mbgl/renderer/painter_line.cpp @@ -15,6 +15,8 @@ void Painter::renderLine(LineBucket& bucket, const StyleLayer &layer_desc, const if (pass == RenderPass::Opaque) return; if (!bucket.hasData()) return; + depthMask(false); + const auto &properties = layer_desc.getProperties(); const auto &layout = *bucket.styleLayout; diff --git a/src/mbgl/renderer/painter_symbol.cpp b/src/mbgl/renderer/painter_symbol.cpp index 9b533699e..9476146e9 100644 --- a/src/mbgl/renderer/painter_symbol.cpp +++ b/src/mbgl/renderer/painter_symbol.cpp @@ -122,6 +122,7 @@ void Painter::renderSymbol(SymbolBucket &bucket, const StyleLayer &layer_desc, c const auto &layout = *bucket.styleLayout; MBGL_CHECK_ERROR(glDisable(GL_STENCIL_TEST)); + depthMask(false); if (bucket.hasIconData()) { bool sdf = bucket.sdfIcons;