77 lines
1.9 KiB
C++
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
|