vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
visibility_system.h
1#pragma once
2
3#include <cstdint>
4#include <vector>
5
6#include <glm/glm.hpp>
7#include <glm/gtc/quaternion.hpp>
8
9#include "core/system.h"
10#include "system/visibility/visibility.h"
11
12namespace Vkm::Engine {
13
14struct Camera;
15
25class VisibilitySystem : public System {
26 public:
27 VisibilitySystem() = default;
28 ~VisibilitySystem() override = default;
29
30 VisibilitySystem(const VisibilitySystem& other) = delete;
31 VisibilitySystem& operator=(const VisibilitySystem& other) = delete;
32
33 VisibilitySystem(VisibilitySystem && other) = delete;
34 VisibilitySystem& operator=(VisibilitySystem && other) = delete;
35
36 public:
37 void update(FrameContext& ctx) override;
38
39 private:
52 bool resolveCamera(const FrameContext& ctx, float viewportAspect);
53
63 void publishCamera(
64 const Camera& camera,
65 const glm::vec3& position,
66 const glm::quat& rotation,
67 float viewportAspect,
68 EntityId entity
69 );
70
71 private:
72 EntityId m_cachedCameraEntity{};
73 uint64_t m_cameraEpoch = 0;
74 Visibility m_result;
75 bool m_noCameraLogged = false;
76
77 std::vector<uint8_t> m_state;
78};
79
80} // namespace Vkm::Engine
void update(FrameContext &ctx) override
Execute this system for the current frame.
Component representing a camera, containing projection and view parameters.
Definition camera.h:25
Names one entity of one Scene, for as long as that slot holds it.
Definition entity.h:23
Per-frame state bundle passed to every system.
Definition system.h:55
VisibilitySystem's per-frame product: camera data, every scene mesh, and which of them the camera see...
Definition visibility.h:15