diff --git a/src/mbgl/gl/layer_group_gl.cpp b/src/mbgl/gl/layer_group_gl.cpp index bc3c165b6..020013fcd 100644 --- a/src/mbgl/gl/layer_group_gl.cpp +++ b/src/mbgl/gl/layer_group_gl.cpp @@ -72,16 +72,6 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) return; } - // If this drawable can render either opaque or translucent... - if (drawable.hasAllRenderPasses(RenderPass::Opaque | RenderPass::Translucent)) { - // Render it only in the translucent pass if we're below the cutoff, and only in the opaque pass otherwise - // (parameters.currentLayer >= parameters.opaquePassCutoff) ? RenderPass::Opaque : RenderPass::Translucent; - if ((parameters.currentLayer < parameters.opaquePassCutoff && parameters.pass != RenderPass::Translucent) || - (parameters.currentLayer >= parameters.opaquePassCutoff && parameters.pass != RenderPass::Opaque)) { - return; - } - } - #if !defined(NDEBUG) std::string label_tile; if (const auto& tileID = drawable.getTileID()) { @@ -128,45 +118,13 @@ void LayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) { return; } - if (getDrawableCount()) { -#if !defined(NDEBUG) - const auto label = getName() + (getName().empty() ? "" : "-") + "tile-clip-masks"; - const auto debugGroup = parameters.encoder->createDebugGroup(label.c_str()); -#endif - - // Collect the tile IDs relevant to stenciling and update the stencil buffer, if necessary. - std::set tileIDs; - observeDrawables([&](const gfx::Drawable& drawable) { - if (drawable.getEnabled() && drawable.getNeedsStencil() && drawable.getTileID() && - drawable.hasRenderPass(parameters.pass)) { - tileIDs.emplace(drawable.getTileID()->toUnwrapped()); - } - }); - parameters.renderTileClippingMasks(tileIDs); - } - observeDrawables([&](gfx::Drawable& drawable) { if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) { return; } - // If this drawable can render either opaque or translucent... - if (drawable.hasAllRenderPasses(RenderPass::Opaque | RenderPass::Translucent)) { - // Render it only in the translucent pass if we're below the cutoff, and only in the opaque pass otherwise - // (parameters.currentLayer >= parameters.opaquePassCutoff) ? RenderPass::Opaque : RenderPass::Translucent; - if ((parameters.currentLayer < parameters.opaquePassCutoff && parameters.pass != RenderPass::Translucent) || - (parameters.currentLayer >= parameters.opaquePassCutoff && parameters.pass != RenderPass::Opaque)) { - return; - } - } - #if !defined(NDEBUG) - std::string label; - if (const auto& tileID = drawable.getTileID()) { - label = drawable.getName() + "/" + util::toString(*tileID); - } - const auto labelPtr = (label.empty() ? drawable.getName() : label).c_str(); - const auto debugGroup = parameters.encoder->createDebugGroup(labelPtr); + const auto debugGroup = parameters.encoder->createDebugGroup(drawable.getName().c_str()); #endif drawable.draw(parameters); diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index f31a68787..dee5923b0 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -447,7 +447,8 @@ void RenderLineLayer::update(gfx::ShaderRegistry& shaders, std::inserter(newTileIDs, newTileIDs.begin()), [](const auto& renderTile) -> OverscaledTileID { return renderTile.get().getOverscaledTileID(); }); - const auto renderPass = static_cast(evaluatedProperties->renderPasses); + const RenderPass renderPass = static_cast(evaluatedProperties->renderPasses & + ~mbgl::underlying_type(RenderPass::Opaque)); tileLayerGroup->observeDrawables([&](gfx::UniqueDrawable& drawable) { // If the render pass has changed or the tile has dropped out of the cover set, remove it. @@ -463,8 +464,8 @@ void RenderLineLayer::update(gfx::ShaderRegistry& shaders, std::unique_ptr builder = context.createDrawableBuilder(name); builder->setShader(std::static_pointer_cast(shader)); builder->setRenderPass(renderPass); - builder->setDepthType((renderPass == RenderPass::Opaque) ? gfx::DepthMaskType::ReadWrite - : gfx::DepthMaskType::ReadOnly); + builder->setSubLayerIndex(0); + builder->setDepthType(gfx::DepthMaskType::ReadOnly); builder->setCullFaceMode(gfx::CullFaceMode::disabled()); builder->setNeedsStencil(true); builder->setVertexAttrName("a_pos_normal"); diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index 6a120bee1..cd62a97cf 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -381,7 +381,8 @@ std::unique_ptr RenderOrchestrator::createRenderTree( for (size_t i = 0; i < orderedLayers.size(); ++i) { RenderLayer& layer = orderedLayers[i]; layer.markLayerRenderable( - layerRenderItems.find(LayerRenderItem(layer, nullptr, static_cast(i))) != layerRenderItems.end(), + layerRenderItems.find(LayerRenderItem(layer, nullptr, static_cast(layer.getLayerIndex()))) != + layerRenderItems.end(), changes); }