diff options
author | Aleksandar Stojiljkovic <aleksandar.stojiljkovic@mapbox.com> | 2019-05-24 17:46:57 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-24 17:46:57 +0300 |
commit | 788d54b2b472bc2743cbc4c8ecf26ad56f1ac8b4 (patch) | |
tree | 8df7fe25bb58e2c7f0764861ebe7030213afaa92 /src/mbgl | |
parent | 1bef3b7d1d877c67db051b33e0516b36acee700d (diff) | |
download | qtlocation-mapboxgl-788d54b2b472bc2743cbc4c8ecf26ad56f1ac8b4.tar.gz |
FillBucket::triangles could be empty: skip creating buffer and draw. (#14761)
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/renderer/buckets/fill_bucket.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.cpp | 24 |
2 files changed, 14 insertions, 12 deletions
diff --git a/src/mbgl/renderer/buckets/fill_bucket.cpp b/src/mbgl/renderer/buckets/fill_bucket.cpp index 4b7a6def76..8a089c679e 100644 --- a/src/mbgl/renderer/buckets/fill_bucket.cpp +++ b/src/mbgl/renderer/buckets/fill_bucket.cpp @@ -124,7 +124,7 @@ void FillBucket::addFeature(const GeometryTileFeature& feature, void FillBucket::upload(gfx::UploadPass& uploadPass) { vertexBuffer = uploadPass.createVertexBuffer(std::move(vertices)); lineIndexBuffer = uploadPass.createIndexBuffer(std::move(lines)); - triangleIndexBuffer = uploadPass.createIndexBuffer(std::move(triangles)); + triangleIndexBuffer = triangles.empty() ? optional<gfx::IndexBuffer> {} : uploadPass.createIndexBuffer(std::move(triangles)); for (auto& pair : paintPropertyBinders) { pair.second.upload(uploadPass); diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index cea40602d0..73b6c3d596 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -131,8 +131,9 @@ void RenderFillLayer::render(PaintParameters& parameters) { // Only draw the fill when it's opaque and we're drawing opaque fragments, // or when it's translucent and we're drawing translucent fragments. - if ((evaluated.get<FillColor>().constantOr(Color()).a >= 1.0f - && evaluated.get<FillOpacity>().constantOr(0) >= 1.0f) == (parameters.pass == RenderPass::Opaque)) { + if (bucket.triangleIndexBuffer && + (evaluated.get<FillColor>().constantOr(Color()).a >= 1.0f && + evaluated.get<FillOpacity>().constantOr(0) >= 1.0f) == (parameters.pass == RenderPass::Opaque)) { draw(parameters.programs.getFillLayerPrograms().fill, gfx::Triangles(), parameters.depthModeForSublayer(1, parameters.pass == RenderPass::Opaque @@ -225,15 +226,16 @@ void RenderFillLayer::render(PaintParameters& parameters) { ); }; - draw(parameters.programs.getFillLayerPrograms().fillPattern, - gfx::Triangles(), - parameters.depthModeForSublayer(1, gfx::DepthMaskType::ReadWrite), - *bucket.triangleIndexBuffer, - bucket.triangleSegments, - FillPatternProgram::TextureBindings{ - textures::image::Value{ geometryTile.iconAtlasTexture->getResource(), gfx::TextureFilterType::Linear }, - }); - + if (bucket.triangleIndexBuffer) { + draw(parameters.programs.getFillLayerPrograms().fillPattern, + gfx::Triangles(), + parameters.depthModeForSublayer(1, gfx::DepthMaskType::ReadWrite), + *bucket.triangleIndexBuffer, + bucket.triangleSegments, + FillPatternProgram::TextureBindings{ + textures::image::Value{ geometryTile.iconAtlasTexture->getResource(), gfx::TextureFilterType::Linear }, + }); + } if (evaluated.get<FillAntialias>() && unevaluated.get<FillOutlineColor>().isUndefined()) { draw(parameters.programs.getFillLayerPrograms().fillOutlinePattern, gfx::Lines { 2.0f }, |