From f47643d257cd761810bfb262c3f67d071bf5b0ba Mon Sep 17 00:00:00 2001 From: Riyyi Date: Thu, 14 Jan 2021 12:16:09 +0100 Subject: [PATCH] Move projectionView retrieving to camera system --- inferno/src/inferno/scene/scene.cpp | 8 +------- inferno/src/inferno/systems/camera.cpp | 19 +++++++++++++++++++ inferno/src/inferno/systems/camera.h | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/inferno/src/inferno/scene/scene.cpp b/inferno/src/inferno/scene/scene.cpp index ab68d5f..dd02217 100644 --- a/inferno/src/inferno/scene/scene.cpp +++ b/inferno/src/inferno/scene/scene.cpp @@ -99,13 +99,7 @@ namespace Inferno { glm::mat4 Scene::cameraProjectionView() { - auto view = m_registry->view(); - - for(auto&& [entity, transform, perspective] : view.each()) { - return perspective.projection * transform.transform; - } - - return glm::mat4 { 1.0f }; + return CameraSystem::the().cameraProjectionView(); } } diff --git a/inferno/src/inferno/systems/camera.cpp b/inferno/src/inferno/systems/camera.cpp index d9d303f..019aa80 100644 --- a/inferno/src/inferno/systems/camera.cpp +++ b/inferno/src/inferno/systems/camera.cpp @@ -43,6 +43,25 @@ namespace Inferno { s_instance = nullptr; } + glm::mat4 CameraSystem::cameraProjectionView() + { + auto orthoView = m_registry->view(); + + for(auto&& [entity, transform, orthographic] : orthoView.each()) { + return orthographic.projection * transform.transform; + } + + auto perspectiveView = m_registry->view(); + + for(auto&& [entity, transform, perspective] : perspectiveView.each()) { + return perspective.projection * transform.transform; + } + + ASSERT_NOT_REACHED(); + + return glm::mat4 { 1.0f }; + } + void CameraSystem::updateOrthographic(TransformComponent& transform, OrthographicCameraComponment& orthographic) { diff --git a/inferno/src/inferno/systems/camera.h b/inferno/src/inferno/systems/camera.h index 6303c32..9a8bb4e 100644 --- a/inferno/src/inferno/systems/camera.h +++ b/inferno/src/inferno/systems/camera.h @@ -24,6 +24,8 @@ namespace Inferno { void update(); void destroy(); + glm::mat4 cameraProjectionView(); + void setRegistry(const std::shared_ptr& registry) { m_registry = registry; }; static inline CameraSystem& the() { return *s_instance; }