Files
FGL-Engine/src/engine/camera/CameraManager.cpp
2025-09-27 14:44:46 -04:00

77 lines
1.9 KiB
C++

//
// Created by kj16609 on 7/23/24.
//
#include "CameraManager.hpp"
#include "GBufferRenderer.hpp"
#include "RenderCamera.hpp"
#include "engine/debug/DEBUG_NAMES.hpp"
#include "engine/math/literals/size.hpp"
namespace fgl::engine
{
using namespace fgl::literals::size_literals;
inline static CameraManager* camera_manager_instance { nullptr };
CameraManager::CameraManager() :
m_renderer( std::make_shared< GBufferRenderer >() ),
m_data_buffer( 4_KiB, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostVisible )
{
FGL_ASSERT( camera_manager_instance == nullptr, "CameraManager already initialized" );
camera_manager_instance = this;
m_data_buffer->setDebugName( "Camera data buffer" );
}
CameraManager::~CameraManager()
{
m_primary_camera.reset();
camera_manager_instance = nullptr;
}
std::vector< std::weak_ptr< RenderCamera > >& CameraManager::getCameras()
{
return cameras;
}
std::shared_ptr< RenderCamera >& CameraManager::getPrimary()
{
return m_primary_camera;
}
void CameraManager::createPrimary()
{
m_primary_camera = createCamera( { 1920, 1080 } );
m_primary_camera->setName( CAMERA_EDITOR_NAME );
}
CameraManager& CameraManager::instance()
{
FGL_ASSERT( camera_manager_instance, "CameraManager not initialized" );
return *camera_manager_instance;
}
std::shared_ptr< RenderCamera > CameraManager::createCamera( const vk::Extent2D extent )
{
auto& instance = CameraManager::instance();
std::shared_ptr< RenderCamera > camera {
new RenderCamera( extent, instance.m_data_buffer, instance.m_renderer )
};
instance.cameras.emplace_back( camera );
return camera;
}
std::shared_ptr< CameraViewpoint > CameraManager::createViewpoint( const vk::Extent2D extent )
{
auto& instance = CameraManager::instance();
std::shared_ptr< CameraViewpoint > camera_viewpoint { new CameraViewpoint( instance.m_data_buffer, extent ) };
return camera_viewpoint;
}
} // namespace fgl::engine