candlewick 0.1.0
A renderer
Loading...
Searching...
No Matches
DebugScene.h
Go to the documentation of this file.
1#pragma once
2
3#include "Scene.h"
4#include "Mesh.h"
5#include "Renderer.h"
6#include "math_types.h"
7
8#include <optional>
9#include <entt/entity/registry.hpp>
10#include <entt/signal/sigh.hpp>
11
12namespace candlewick {
13
18
19class DebugScene;
20
26 virtual void update(DebugScene & /*scene*/) = 0;
27 virtual ~IDebugSubSystem() = default;
28};
29
33 // fragment shader
34 std::vector<GpuVec4> colors;
35 bool enable = true;
36 Float3 scale = Float3::Ones();
37};
38
43 entt::registry &_registry;
44 const Renderer &_renderer;
45 SDL_GPUGraphicsPipeline *_trianglePipeline;
46 SDL_GPUGraphicsPipeline *_linePipeline;
47 SDL_GPUTextureFormat _swapchainTextureFormat, _depthFormat;
48 std::vector<std::unique_ptr<IDebugSubSystem>> _systems;
49
50 void renderMeshComponents(CommandBuffer &cmdBuf,
51 SDL_GPURenderPass *render_pass,
52 const Camera &camera) const;
53
54public:
55 enum { TRANSFORM_SLOT = 0 };
56 enum { COLOR_SLOT = 0 };
57
58 DebugScene(entt::registry &registry, const Renderer &renderer);
59 DebugScene(const DebugScene &) = delete;
60 DebugScene &operator=(const DebugScene &) = delete;
61
62 const Device &device() const noexcept { return _renderer.device; }
63 entt::registry &registry() { return _registry; }
64 const entt::registry &registry() const { return _registry; }
65
67 template <std::derived_from<IDebugSubSystem> System, typename... Args>
68 System &addSystem(Args &&...args) {
69 auto sys = std::make_unique<System>(std::forward<Args>(args)...);
70 _systems.push_back(std::move(sys));
71 return static_cast<System &>(*_systems.back());
72 }
73
75 void setupPipelines(const MeshLayout &layout);
76
78 std::tuple<entt::entity, DebugMeshComponent &> addTriad();
80 std::tuple<entt::entity, DebugMeshComponent &>
81 addLineGrid(std::optional<Float4> color = std::nullopt);
82
83 void update() {
84 for (auto &system : _systems) {
85 system->update(*this);
86 }
87 }
88
89 void render(CommandBuffer &cmdBuf, const Camera &camera) const;
90
91 void release();
92
94};
95static_assert(Scene<DebugScene>);
96
97} // namespace candlewick
Definition CommandBuffer.h:17
Scene for organizing debug entities and render systems.
Definition DebugScene.h:42
entt::registry & registry()
Definition DebugScene.h:63
DebugScene & operator=(const DebugScene &)=delete
void setupPipelines(const MeshLayout &layout)
Setup pipelines; this will only have an effect ONCE.
const entt::registry & registry() const
Definition DebugScene.h:64
DebugScene(entt::registry &registry, const Renderer &renderer)
void render(CommandBuffer &cmdBuf, const Camera &camera) const
std::tuple< entt::entity, DebugMeshComponent & > addTriad()
Just the basic 3D triad.
System & addSystem(Args &&...args)
Add a subsystem (IDebugSubSystem) to the scene.
Definition DebugScene.h:68
@ COLOR_SLOT
Definition DebugScene.h:56
void update()
Definition DebugScene.h:83
DebugScene(const DebugScene &)=delete
~DebugScene()
Definition DebugScene.h:93
std::tuple< entt::entity, DebugMeshComponent & > addLineGrid(std::optional< Float4 > color=std::nullopt)
Add a basic line grid.
const Device & device() const noexcept
Definition DebugScene.h:62
@ TRANSFORM_SLOT
Definition DebugScene.h:55
This class defines the layout of a mesh's vertices.
Definition MeshLayout.h:98
Handle class for meshes (vertex buffers and an optional index buffer) on the GPU.
Definition Mesh.h:57
Definition Camera.h:8
Eigen::Vector3f Float3
Definition math_types.h:8
DebugPipelines
Definition DebugScene.h:14
@ LINE
Definition DebugScene.h:16
@ TRIANGLE_FILL
Definition DebugScene.h:15
The main way of using a camera to render things.
Definition Camera.h:19
Definition DebugScene.h:30
std::vector< GpuVec4 > colors
Definition DebugScene.h:34
DebugPipelines pipeline_type
Definition DebugScene.h:31
Float3 scale
Definition DebugScene.h:36
bool enable
Definition DebugScene.h:35
Mesh mesh
Definition DebugScene.h:32
RAII wrapper for SDL_GPUDevice.
Definition Device.h:17
A subsystem for the DebugScene.
Definition DebugScene.h:25
virtual void update(DebugScene &)=0
virtual ~IDebugSubSystem()=default
The Renderer class provides a rendering context for a graphical application.
Definition Renderer.h:20