diff --git a/include/mbgl/gfx/drawable_builder.hpp b/include/mbgl/gfx/drawable_builder.hpp index 1314f1d55..054a4689e 100644 --- a/include/mbgl/gfx/drawable_builder.hpp +++ b/include/mbgl/gfx/drawable_builder.hpp @@ -97,11 +97,13 @@ public: void addQuad(int16_t x0, int16_t y0, int16_t x1, int16_t y1); /// Add already-set-up triangles directly - - void addTriangles(const std::vector>& vertices, - std::size_t vertexOffset, std::size_t vertexLength, + + void addTriangles(const std::vector>& vertices, + std::size_t vertexOffset, + std::size_t vertexLength, const std::vector& indexes, - std::size_t indexOffset, std::size_t indexLength); + std::size_t indexOffset, + std::size_t indexLength); /// Add a tweaker to be attached to each emitted drawable void addTweaker(DrawableTweakerPtr tweaker) { tweakers.emplace_back(std::move(tweaker)); } diff --git a/src/mbgl/gfx/drawable_builder.cpp b/src/mbgl/gfx/drawable_builder.cpp index 55fffd935..12e296b97 100644 --- a/src/mbgl/gfx/drawable_builder.cpp +++ b/src/mbgl/gfx/drawable_builder.cpp @@ -89,22 +89,25 @@ void DrawableBuilder::addQuad(int16_t x0, int16_t y0, int16_t x1, int16_t y1) { appendTriangle(x1, y1); } -void DrawableBuilder::addTriangles(const std::vector>& vertices, - std::size_t vertexOffset, std::size_t vertexLength, +void DrawableBuilder::addTriangles(const std::vector>& vertices, + std::size_t vertexOffset, + std::size_t vertexLength, const std::vector& indexes, - std::size_t indexOffset, std::size_t indexLength) { + std::size_t indexOffset, + std::size_t indexLength) { // TODO: bulk add in `gfx::VertexVector`... or use vector directly? - //impl->vertices.insert(impl->vertices.end(), + // impl->vertices.insert(impl->vertices.end(), // std::next(vertices.begin(), vertexOffset), // std::next(vertices.begin(), vertexOffset + vertexLength)); - //impl->indexes.insert(impl->indexes.end(), + // impl->indexes.insert(impl->indexes.end(), // std::next(indexes.begin(), indexOffset), // std::next(indexes.begin(), indexOffset + indexLength)); std::for_each(std::next(vertices.begin(), vertexOffset), std::next(vertices.begin(), vertexOffset + vertexLength), - [&](const std::array& x){ impl->vertices.emplace_back(Impl::VT({{x}})); }); - for (auto i = std::next(indexes.begin(), indexOffset); i != std::next(indexes.begin(), indexOffset + indexLength); ) { + [&](const std::array& x) { impl->vertices.emplace_back(Impl::VT({{x}})); }); + for (auto i = std::next(indexes.begin(), indexOffset); + i != std::next(indexes.begin(), indexOffset + indexLength);) { impl->indexes.emplace_back(*i++, *i++, *i++); } } diff --git a/src/mbgl/gl/context.cpp b/src/mbgl/gl/context.cpp index eea9757ac..d05b48152 100644 --- a/src/mbgl/gl/context.cpp +++ b/src/mbgl/gl/context.cpp @@ -463,10 +463,10 @@ bool Context::setupDraw(const PaintParameters& parameters, const gfx::Drawable& } setDepthMode(parameters.depthModeForSublayer(0, drawable.getDepthType())); - + if (auto tileID = drawable.getTileID()) { // Doesn't work until the clipping masks are generated - //parameters.stencilModeForClipping(tileID->toUnwrapped()); + // parameters.stencilModeForClipping(tileID->toUnwrapped()); setStencilMode(gfx::StencilMode::disabled()); } else { setStencilMode(gfx::StencilMode::disabled()); diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index b5b7aad80..2ede85b5d 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -389,9 +389,10 @@ void RenderFillLayer::update(const int32_t layerIndex, // } std::unordered_set newTileIDs(renderTiles->size()); - std::transform(renderTiles->begin(), renderTiles->end(), + std::transform(renderTiles->begin(), + renderTiles->end(), std::inserter(newTileIDs, newTileIDs.begin()), - [](const auto& renderTile)->OverscaledTileID{ return renderTile.get().getOverscaledTileID(); }); + [](const auto& renderTile) -> OverscaledTileID { return renderTile.get().getOverscaledTileID(); }); // For each existing tile drawable... for (auto iter = tileDrawables.begin(); iter != tileDrawables.end();) { @@ -420,7 +421,7 @@ void RenderFillLayer::update(const int32_t layerIndex, // parameters.renderTileClippingMasks(renderTiles); for (const RenderTile& tile : *renderTiles) { const auto& tileID = tile.getOverscaledTileID(); - + const auto result = tileDrawables.insert(std::make_pair(tileID, gfx::DrawablePtr())); if (!result.second) { // Already present @@ -433,27 +434,32 @@ void RenderFillLayer::update(const int32_t layerIndex, continue; } auto& bucket = static_cast(*renderData->bucket); - //const auto& evaluated = getEvaluated(renderData->layerProperties); + // const auto& evaluated = getEvaluated(renderData->layerProperties); if (!builder) { builder = context.createDrawableBuilder("fill"); builder->setShader(shader); builder->addTweaker(context.createDrawableTweaker()); - //builder->setColor(color); + // builder->setColor(color); builder->setColorMode(gfx::DrawableBuilder::ColorMode::PerDrawable); builder->setDepthType(gfx::DepthMaskType::ReadWrite); builder->setLayerIndex(layerIndex); } - const std::vector>>::Vertex>& verts = bucket.vertices.vector(); + const std::vector>>::Vertex>& + verts = bucket.vertices.vector(); std::vector> rawVerts(verts.size()); - std::transform(verts.begin(), verts.end(), rawVerts.begin(), [](const auto& x){ return x.a1; }); - + std::transform(verts.begin(), verts.end(), rawVerts.begin(), [](const auto& x) { return x.a1; }); + for (const auto& seg : bucket.triangleSegments) { - builder->addTriangles(rawVerts, seg.vertexOffset, seg.vertexLength, - bucket.triangles.vector(), seg.indexOffset, seg.indexLength); + builder->addTriangles(rawVerts, + seg.vertexOffset, + seg.vertexLength, + bucket.triangles.vector(), + seg.indexOffset, + seg.indexLength); } - + // evaluated.get(), // evaluated.get(), // parameters.stencilModeForClipping(tile.id), @@ -485,7 +491,7 @@ void RenderFillLayer::update(const int32_t layerIndex, // } builder->flush(); - + auto drawables = builder->clearDrawables(); if (!drawables.empty()) { auto& drawable = drawables[0]; @@ -496,7 +502,6 @@ void RenderFillLayer::update(const int32_t layerIndex, // Log::Warning(Event::General, "Adding drawable for " + util::toString(tileID) + " total " + // std::to_string(stats.tileDrawablesAdded+1)); } - } } else { // if (parameters.pass != RenderPass::Translucent) { diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 24bac151e..77a4392b0 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -211,7 +211,7 @@ void Renderer::Impl::render(const RenderTree& renderTree) { const auto debugGroup(parameters.renderPass->createDebugGroup("drawables")); // TODO: Render tile masks - //for (auto& layer : renderLayers) { + // for (auto& layer : renderLayers) { // parameters.renderTileClippingMasks(renderTiles); //}