#include #include #include #include #include #include #include #include #include #include #include namespace mbgl { namespace mtl { LayerGroup::LayerGroup(int32_t layerIndex_, std::size_t initialCapacity, std::string name_) : mbgl::LayerGroup(layerIndex_, initialCapacity, std::move(name_)) {} void LayerGroup::upload(gfx::UploadPass& uploadPass) { if (!enabled) { return; } #if !defined(NDEBUG) const auto debugGroup = uploadPass.createDebugGroup(getName() + "-upload"); #endif visitDrawables([&](gfx::Drawable& drawable) { if (drawable.getEnabled()) { auto& drawableMTL = static_cast(drawable); drawableMTL.upload(uploadPass); } }); } void LayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) { if (!enabled || !getDrawableCount() || !parameters.renderPass) { return; } #if !defined(NDEBUG) const auto debugGroup = parameters.encoder->createDebugGroup(getName() + "-render"); #endif auto& renderPass = static_cast(*parameters.renderPass); bool bindUBOs = false; visitDrawables([&](gfx::Drawable& drawable) { if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) { return; } for (const auto& tweaker : drawable.getTweakers()) { tweaker->execute(drawable, parameters); } if (!bindUBOs) { uniformBuffers.bind(renderPass); bindUBOs = true; } drawable.draw(parameters); }); if (bindUBOs) { uniformBuffers.unbind(renderPass); } } } // namespace mtl } // namespace mbgl