Skip to content

Commit 4bdc0ac

Browse files
committed
add a camera
1 parent 582d506 commit 4bdc0ac

File tree

7 files changed

+60
-6
lines changed

7 files changed

+60
-6
lines changed

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ add_executable(Reactor src/core/main.cpp
4949
src/vulkan/ShaderModule.cpp
5050
src/vulkan/ShaderModule.hpp
5151
src/core/EventManager.hpp
52-
src/core/EventManager.cpp)
52+
src/core/EventManager.cpp
53+
src/core/Camera.cpp
54+
src/core/Camera.hpp)
5355

5456
target_link_libraries(Reactor PRIVATE Vulkan::Vulkan Vulkan::Headers glfw fmt::fmt spdlog::spdlog GPUOpen::VulkanMemoryAllocator glm::glm)
5557
target_link_libraries(Reactor PRIVATE imgui::imgui)

src/core/Camera.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// Created by rfdic on 7/7/2025.
3+
//
4+
5+
#include "Camera.hpp"
6+
7+
#include <glm/ext/matrix_clip_space.hpp>
8+
#include <spdlog/spdlog.h>
9+
10+
namespace reactor {
11+
12+
Camera::Camera(): m_view(glm::mat4(1.0f)), m_projection(glm::mat4(1.0f)) {
13+
m_projection = glm::perspective(glm::radians(45.0f), 16.0f / 9.0f, 0.1f, 100.0f);
14+
}
15+
16+
void Camera::onEvent(const Event &event) {
17+
// handle moving camera
18+
spdlog::info("Camera event");
19+
}
20+
21+
} // reactor

src/core/Camera.hpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#include "EventManager.hpp"
4+
#include <glm/glm.hpp>
5+
6+
namespace reactor {
7+
8+
class Camera final : public IEventListener {
9+
public:
10+
11+
Camera();
12+
13+
void onEvent(const Event& event) override;
14+
15+
[[nodiscard]] glm::mat4 getView() const { return m_view; }
16+
[[nodiscard]] glm::mat4 getProjection() const { return m_projection; }
17+
18+
private:
19+
glm::mat4 m_view;
20+
glm::mat4 m_projection;
21+
22+
};
23+
24+
} // reactor
25+
26+

src/core/EventManager.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ void EventManager::subscribe(EventType type, IEventListener *listener) {
88

99
void EventManager::unsubscribe(EventType type, IEventListener *listener) {
1010
auto& listeners = m_listeners[type];
11-
listeners.erase(std::remove(listeners.begin(), listeners.end(), listener), listeners.end());
11+
std::erase(listeners, listener);
1212
}
1313

14-
void EventManager::post(const Event &event) {
15-
if (m_listeners.find(event.type) == m_listeners.end()) {
14+
void EventManager::post(const Event &event) const {
15+
if (!m_listeners.contains(event.type)) {
1616
// no listeners, so nothing to do.
1717
return;
1818
}

src/core/EventManager.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class EventManager {
3232
public:
3333
void subscribe(EventType type, IEventListener* listener);
3434
void unsubscribe(EventType type, IEventListener* listener);
35-
void post(const Event& event);
35+
void post(const Event& event) const;
3636

3737
private:
3838
std::unordered_map<EventType, std::vector<IEventListener*>> m_listeners;

src/vulkan/VulkanRenderer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ VulkanRenderer::VulkanRenderer(const RendererConfig &config) : m_config(config)
2424
createMSAAImage();
2525
createResolveImages();
2626
createSampler();
27+
28+
m_camera = std::make_unique<Camera>();
29+
m_eventManager->subscribe(EventType::MouseMoved, m_camera.get());
2730
}
2831

2932
void VulkanRenderer::createCoreVulkanObjects() {

src/vulkan/VulkanRenderer.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
#define VULKANRENDERER_HPP
77
#include <memory>
88

9-
#include "../core/Window.hpp"
9+
#include "../core/Camera.hpp"
1010
#include "../core/EventManager.hpp"
11+
#include "../core/Window.hpp"
1112
#include "../imgui/Imgui.hpp"
1213
#include "Allocator.hpp"
1314
#include "DescriptorSet.hpp"
@@ -57,6 +58,7 @@ class VulkanRenderer {
5758
std::unique_ptr<DescriptorSet> m_compositeDescriptorSet;
5859
std::unique_ptr<Sampler> m_sampler;
5960
std::unique_ptr<UniformManager> m_uniformManager;
61+
std::unique_ptr<Camera> m_camera;
6062

6163
std::unique_ptr<Imgui> m_imgui;
6264

0 commit comments

Comments
 (0)