#include #include #include #include #include #include #include #include #include #include #include namespace mbgl { namespace vulkan { LayerGroup::LayerGroup(int32_t layerIndex_, std::size_t initialCapacity, std::string name_) : mbgl::LayerGroup(layerIndex_, initialCapacity, std::move(name_)), uniformBuffers(DescriptorSetType::Layer, shaders::layerUBOStartId, shaders::maxUBOCountPerLayer) {} 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& drawable = static_cast(drawable_); drawable.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); auto& encoder = renderPass.getEncoder(); 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.bindDescriptorSets(encoder); bindUBOs = true; } drawable.draw(parameters); }); } } // namespace vulkan } // namespace mbgl