From da307b6b0220c2ccfcac18fd9d6b0c6f1b1c635a Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Sat, 26 Jun 2021 19:28:56 +0200
Subject: [PATCH] [#69] Fixed crash because of local scope reference

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 modules/camera/include/vkcv/camera/Camera.hpp | 2 +-
 modules/camera/src/vkcv/camera/Camera.cpp     | 4 ++--
 projects/particle_simulation/src/main.cpp     | 2 ++
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp
index dc9f2dcb..0d078fef 100644
--- a/modules/camera/include/vkcv/camera/Camera.hpp
+++ b/modules/camera/include/vkcv/camera/Camera.hpp
@@ -77,7 +77,7 @@ namespace vkcv::camera {
          * @brief Gets the current projection of the camera
          * @return The current projection matrix
          */
-        const glm::mat4& getProjection() const;
+        glm::mat4 getProjection() const;
 
         /**
          * @brief Gets the model-view-projection matrix of the camera with y-axis-correction applied
diff --git a/modules/camera/src/vkcv/camera/Camera.cpp b/modules/camera/src/vkcv/camera/Camera.cpp
index e7ba7900..4f276180 100644
--- a/modules/camera/src/vkcv/camera/Camera.cpp
+++ b/modules/camera/src/vkcv/camera/Camera.cpp
@@ -45,12 +45,12 @@ namespace vkcv::camera {
         0.0f, 0.0f, 0.0f, 1.0f
     );
 
-    const glm::mat4& Camera::getProjection() const {
+    glm::mat4 Camera::getProjection() const {
         return y_correction * m_projection;
     }
 
     void Camera::setProjection(const glm::mat4& projection) {
-        m_projection =  projection;
+        m_projection = glm::inverse(y_correction) * projection;
     }
 
     glm::mat4 Camera::getMVP() const {
diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp
index b2eb5bc5..262aa32d 100644
--- a/projects/particle_simulation/src/main.cpp
+++ b/projects/particle_simulation/src/main.cpp
@@ -201,6 +201,8 @@ int main(int argc, const char **argv) {
     glm::vec4 colorData = glm::vec4(1.0f, 1.0f, 0.0f, 1.0f);
     uint32_t camIndex0 = cameraManager.addCamera(vkcv::camera::ControllerType::PILOT);
     uint32_t camIndex1 = cameraManager.addCamera(vkcv::camera::ControllerType::TRACKBALL);
+    
+    cameraManager.setActiveCamera(1);
 
     cameraManager.getCamera(camIndex0).setPosition(glm::vec3(0, 0, -2));
     cameraManager.getCamera(camIndex1).setPosition(glm::vec3(0.0f, 0.0f, -2.0f));
-- 
GitLab