light/modules/renderer/public/system.hpp

71 lines
1.3 KiB
C++

#pragma once
#include <app/system.hpp>
#include <ecs/entity.hpp>
#include <renderer/validation.hpp>
#include <renderer/vk/context.hpp>
namespace lt::renderer {
class System: app::ISystem
{
public:
struct CreateInfo
{
Ref<ecs::Registry> registry;
ecs::Entity surface_entity;
Ref<app::SystemStats> system_stats;
};
[[nodiscard]] System(CreateInfo info)
: m_registry(std::move(info.registry))
, m_context(info.surface_entity, std::move(info.system_stats))
{
ensure(m_registry, "Failed to initialize renderer system: null registry");
}
~System() override = default;
System(System &&) = default;
System(const System &) = delete;
auto operator=(System &&) -> System & = default;
auto operator=(const System &) -> System & = delete;
void on_register() override
{
}
void on_unregister() override
{
}
void get_validation_state();
void tick(app::TickInfo tick) override
{
}
[[nodiscard]] auto get_stats() const -> const app::SystemStats &
{
return m_context.get_stats();
}
[[nodiscard]] auto get_last_tick_result() const -> const app::TickResult & override
{
return m_last_tick_result;
}
private:
Ref<ecs::Registry> m_registry;
renderer::Validation m_validation;
vk::Context m_context;
app::TickResult m_last_tick_result {};
};
} // namespace lt::renderer