diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-07-20 14:49:56 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-07-24 12:10:45 +0200 |
commit | c0efad5de22e50a2f2d541a62a07b0786cde0202 (patch) | |
tree | f6a3e63ded1ffd317c2af6d5f4a47b4ae623218d /src/mbgl/renderer/layers/render_raster_layer.cpp | |
parent | 4dff51719b27988fe4672bd4022d305b6e7d9816 (diff) | |
download | qtlocation-mapboxgl-c0efad5de22e50a2f2d541a62a07b0786cde0202.tar.gz |
[core] generate masks for raster tiles to avoid painting over children
Diffstat (limited to 'src/mbgl/renderer/layers/render_raster_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 367fd91fa5..06616d90e5 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -135,10 +135,19 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source parameters.context.bindTexture(*bucket.texture, 0, gl::TextureFilter::Linear); parameters.context.bindTexture(*bucket.texture, 1, gl::TextureFilter::Linear); - draw(tile.matrix, - parameters.staticData.rasterVertexBuffer, - parameters.staticData.quadTriangleIndexBuffer, - parameters.staticData.rasterSegments); + if (bucket.vertexBuffer && bucket.indexBuffer && !bucket.segments.empty()) { + // Draw only the parts of the tile that aren't drawn by another tile in the layer. + draw(tile.matrix, + *bucket.vertexBuffer, + *bucket.indexBuffer, + bucket.segments); + } else { + // Draw the full tile. + draw(tile.matrix, + parameters.staticData.rasterVertexBuffer, + parameters.staticData.quadTriangleIndexBuffer, + parameters.staticData.rasterSegments); + } } } } |