diff options
-rw-r--r-- | include/mbgl/renderer/painter.hpp | 2 | ||||
-rw-r--r-- | src/renderer/painter.cpp | 8 | ||||
-rw-r--r-- | src/renderer/painter_clipping.cpp | 2 | ||||
-rw-r--r-- | src/renderer/painter_fill.cpp | 8 | ||||
-rw-r--r-- | src/renderer/painter_line.cpp | 2 | ||||
-rw-r--r-- | src/renderer/painter_prerender.cpp | 2 | ||||
-rw-r--r-- | src/renderer/painter_raster.cpp | 2 | ||||
-rw-r--r-- | src/renderer/painter_symbol.cpp | 6 |
8 files changed, 21 insertions, 11 deletions
diff --git a/include/mbgl/renderer/painter.hpp b/include/mbgl/renderer/painter.hpp index 26e1bd3955..4cf99f102d 100644 --- a/include/mbgl/renderer/painter.hpp +++ b/include/mbgl/renderer/painter.hpp @@ -130,6 +130,7 @@ public: void useProgram(uint32_t program); void lineWidth(float lineWidth); void depthMask(bool value); + void depthRange(float near, float far); public: mat4 vtxMatrix; @@ -156,6 +157,7 @@ private: float gl_lineWidth = 0; bool gl_depthMask = true; std::array<uint16_t, 2> gl_viewport = {{ 0, 0 }}; + std::array<float, 2> gl_depthRange = {{ 0, 1 }}; float strata = 0; RenderPass pass = RenderPass::Opaque; const float strata_epsilon = 1.0f / (1 << 16); diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 956543d26b..9f889fb3f8 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -118,6 +118,14 @@ void Painter::depthMask(bool value) { } } +void Painter::depthRange(const float near, const float far) { + if (gl_depthRange[0] != near || gl_depthRange[1] != far) { + glDepthRange(near, far); + gl_depthRange = {{ near, far }}; + } +} + + void Painter::changeMatrix() { // Initialize projection matrix matrix::ortho(projMatrix, 0, map.getState().getWidth(), map.getState().getHeight(), 0, 0, 1); diff --git a/src/renderer/painter_clipping.cpp b/src/renderer/painter_clipping.cpp index 95e97eadc9..e94646d922 100644 --- a/src/renderer/painter_clipping.cpp +++ b/src/renderer/painter_clipping.cpp @@ -13,7 +13,7 @@ void Painter::drawClippingMasks(const std::set<std::shared_ptr<StyleSource>> &so glDisable(GL_DEPTH_TEST); depthMask(false); glColorMask(false, false, false, false); - glDepthRange(1.0f, 1.0f); + depthRange(1.0f, 1.0f); glStencilMask(0xFF); coveringPlainArray.bind(*plainShader, tileStencilBuffer, BUFFER_OFFSET(0)); diff --git a/src/renderer/painter_fill.cpp b/src/renderer/painter_fill.cpp index 8306dd0a2e..f99cc93bbf 100644 --- a/src/renderer/painter_fill.cpp +++ b/src/renderer/painter_fill.cpp @@ -50,7 +50,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c static_cast<float>(map.getState().getFramebufferWidth()), static_cast<float>(map.getState().getFramebufferHeight()) }}); - glDepthRange(strata, 1.0f); + depthRange(strata, 1.0f); bucket.drawVertices(*outlineShader); } else if (fringeline) { // // We're only drawing to the first seven bits (== support a maximum of @@ -109,7 +109,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c spriteAtlas.bind(true); // Draw the actual triangles into the color & stencil buffer. - glDepthRange(strata + strata_epsilon, 1.0f); + depthRange(strata + strata_epsilon, 1.0f); bucket.drawElements(*patternShader); } else { // Only draw the fill when it's either opaque and we're drawing opaque @@ -121,7 +121,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c plainShader->setColor(fill_color); // Draw the actual triangles into the color & stencil buffer. - glDepthRange(strata + strata_epsilon, 1.0f); + depthRange(strata + strata_epsilon, 1.0f); bucket.drawElements(*plainShader); } } @@ -141,7 +141,7 @@ void Painter::renderFill(FillBucket& bucket, const FillProperties& properties, c static_cast<float>(map.getState().getFramebufferHeight()) }}); - glDepthRange(strata + strata_epsilon, 1.0f); + depthRange(strata + strata_epsilon, 1.0f); bucket.drawVertices(*outlineShader); } } diff --git a/src/renderer/painter_line.cpp b/src/renderer/painter_line.cpp index 375b99297d..24358c51dd 100644 --- a/src/renderer/painter_line.cpp +++ b/src/renderer/painter_line.cpp @@ -33,7 +33,7 @@ void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_d const mat4 &vtxMatrix = translatedMatrix(matrix, properties.translate, id, properties.translateAnchor); - glDepthRange(strata, 1.0f); + depthRange(strata, 1.0f); // We're only drawing end caps + round line joins if the line is > 2px. Otherwise, they aren't visible anyway. if (bucket.hasPoints() && outset > 1.0f) { diff --git a/src/renderer/painter_prerender.cpp b/src/renderer/painter_prerender.cpp index 1a54336923..14a15effe1 100644 --- a/src/renderer/painter_prerender.cpp +++ b/src/renderer/painter_prerender.cpp @@ -28,7 +28,7 @@ void Painter::renderPrerenderedTexture(RasterBucket &bucket, const mat4 &matrix, rasterShader->setMatrix(matrix); rasterShader->setOpacity(1); - glDepthRange(strata, 1.0f); + depthRange(strata, 1.0f); glActiveTexture(GL_TEXTURE0); rasterShader->setImage(0); diff --git a/src/renderer/painter_raster.cpp b/src/renderer/painter_raster.cpp index b67b4b553f..946f6216c7 100644 --- a/src/renderer/painter_raster.cpp +++ b/src/renderer/painter_raster.cpp @@ -71,7 +71,7 @@ void Painter::renderRaster(RasterBucket& bucket, std::shared_ptr<StyleLayer> lay rasterShader->setContrast(properties.contrast); rasterShader->setSpin(spinWeights(properties.hue_rotate)); - glDepthRange(strata + strata_epsilon, 1.0f); + depthRange(strata + strata_epsilon, 1.0f); bucket.drawRaster(*rasterShader, tileStencilBuffer, coveringRasterArray); diff --git a/src/renderer/painter_symbol.cpp b/src/renderer/painter_symbol.cpp index 720f84d24e..491b848e10 100644 --- a/src/renderer/painter_symbol.cpp +++ b/src/renderer/painter_symbol.cpp @@ -143,7 +143,7 @@ void Painter::renderSymbol(SymbolBucket &bucket, std::shared_ptr<StyleLayer> lay textShader->setColor(properties.text.halo_color); } textShader->setBuffer(haloWidth); - glDepthRange(strata, 1.0f); + depthRange(strata, 1.0f); bucket.drawGlyphs(*textShader); } @@ -161,7 +161,7 @@ void Painter::renderSymbol(SymbolBucket &bucket, std::shared_ptr<StyleLayer> lay textShader->setColor(properties.text.color); } textShader->setBuffer((256.0f - 64.0f) / 256.0f); - glDepthRange(strata + strata_epsilon, 1.0f); + depthRange(strata + strata_epsilon, 1.0f); bucket.drawGlyphs(*textShader); } } @@ -210,7 +210,7 @@ void Painter::renderSymbol(SymbolBucket &bucket, std::shared_ptr<StyleLayer> lay iconShader->setFadeZoom(map.getState().getNormalizedZoom() * 10); iconShader->setOpacity(properties.icon.opacity); - glDepthRange(strata, 1.0f); + depthRange(strata, 1.0f); bucket.drawIcons(*iconShader); } } |