diff options
author | Aleksandar Stojiljkovic <aleksandar.stojiljkovic@mapbox.com> | 2019-05-24 15:22:30 +0300 |
---|---|---|
committer | Aleksandar Stojiljkovic <aleksandar.stojiljkovic@mapbox.com> | 2019-05-24 15:22:30 +0300 |
commit | ce49b04d3f0d03f033c6a24aa58ab6a4d560d131 (patch) | |
tree | 0adac45d11d14b58ca60d8bb80dcf4715f168c04 | |
parent | aa3a7cf02f2b5d0b99bec9d335c9681dcfa38426 (diff) | |
download | qtlocation-mapboxgl-upstream/empty-index-fill-layer.tar.gz |
FillBucket::triangles could be empty: skip creating buffer and draw.upstream/empty-index-fill-layer
-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 }, |