27 template <
typename T,
typename = std::enable_if_t<std::is_convertible_v<T*, Subrender*>>>
33 template <
typename T,
typename = std::enable_if_t<std::is_convertible_v<T*, Subrender*>>>
37 return (it != m_Subrenders.end()) ?
static_cast<T*
>(it->second.get()) :
nullptr;
40 template <
typename T,
typename = std::enable_if_t<std::is_convertible_v<T*, Subrender*>>>
44 m_Stages.emplace(StageIndex(stage, m_Subrenders.size()), typeId);
45 m_Subrenders[typeId] = std::move(subrender);
46 return static_cast<T*
>(m_Subrenders[typeId].get());
49 template <
typename T,
typename = std::enable_if_t<std::is_convertible_v<T*, Subrender*>>>
53 RemoveSubrenderStage(typeId);
54 m_Subrenders.erase(typeId);
64 using StageIndex = std::pair<Pipeline::Stage, std::size_t>;
66 void RemoveSubrenderStage(TypeID
id)
68 for (
auto it = m_Stages.begin(); it != m_Stages.end();)
72 it = m_Stages.erase(it);
83 for (
auto const& [stageIdx, typeId] : m_Stages)
85 if (stageIdx.first != stage)
90 auto& sr = m_Subrenders[typeId];
91 if (sr && sr->IsEnabled())
93 sr->Render(commandBuffer);
98 std::unordered_map<TypeID, std::unique_ptr<Subrender>> m_Subrenders;
99 std::multimap<StageIndex, TypeID> m_Stages;
Module that manages the Vulkan m_Instance, Surface, Window and the renderpass structure.
Definition Graphics.hpp:32