light/modules/renderer/public/system.hpp

77 lines
1.2 KiB
C++
Raw Normal View History

#pragma once
2025-09-22 18:50:17 +03:30
#include <app/system.hpp>
#include <ecs/entity.hpp>
namespace lt::renderer {
namespace vk {
class Context;
class Renderer;
class Pass;
class ValidationObserver;
} // namespace vk
class System: public app::ISystem
{
public:
2025-09-22 18:50:17 +03:30
struct CreateInfo
{
Ref<ecs::Registry> registry;
2025-10-01 17:31:46 +03:30
2025-09-22 18:50:17 +03:30
ecs::Entity surface_entity;
2025-10-01 17:31:46 +03:30
2025-09-22 18:50:17 +03:30
Ref<app::SystemStats> system_stats;
};
System(CreateInfo info);
~System() override;
System(System &&) = default;
System(const System &) = delete;
auto operator=(System &&) -> System & = default;
auto operator=(const System &) -> System & = delete;
2025-10-01 17:31:46 +03:30
void on_register() override;
2025-09-22 18:50:17 +03:30
2025-10-01 17:31:46 +03:30
void on_unregister() override;
2025-10-01 17:31:46 +03:30
void tick(app::TickInfo tick) override;
2025-09-22 18:50:17 +03:30
2025-09-22 18:50:17 +03:30
[[nodiscard]] auto get_stats() const -> const app::SystemStats &
{
return *m_stats;
2025-09-22 18:50:17 +03:30
}
[[nodiscard]] auto get_last_tick_result() const -> const app::TickResult & override
{
return m_last_tick_result;
}
private:
class vk::ValidationObserver *m_validation_observer;
Ref<ecs::Registry> m_registry;
2025-09-22 18:50:17 +03:30
Ref<app::SystemStats> m_stats;
2025-09-22 18:50:17 +03:30
Scope<class vk::Context> m_context;
Ref<class vk::Pass> m_pass;
Scope<class vk::Renderer> m_renderer;
2025-09-22 18:50:17 +03:30
app::TickResult m_last_tick_result {};
uint32_t m_frame_idx {};
};
} // namespace lt::renderer