#include "Rendering/CameraRenderer.h" #include "Rendering/Pipelines/BuiltinForwardPipeline.h" #include "Rendering/RenderSurface.h" #include "Scene/Scene.h" namespace XCEngine { namespace Rendering { CameraRenderer::CameraRenderer() : m_pipeline(std::make_unique()) { } CameraRenderer::CameraRenderer(std::unique_ptr pipeline) : m_pipeline(std::move(pipeline)) { if (!m_pipeline) { m_pipeline = std::make_unique(); } } CameraRenderer::~CameraRenderer() { if (m_pipeline) { m_pipeline->Shutdown(); } } void CameraRenderer::SetPipeline(std::unique_ptr pipeline) { if (m_pipeline) { m_pipeline->Shutdown(); } m_pipeline = std::move(pipeline); if (!m_pipeline) { m_pipeline = std::make_unique(); } } bool CameraRenderer::Render( const Components::Scene& scene, Components::CameraComponent* overrideCamera, const RenderContext& context, const RenderSurface& surface) { if (!context.IsValid() || m_pipeline == nullptr) { return false; } RenderSceneData sceneData = m_sceneExtractor.Extract( scene, overrideCamera, surface.GetWidth(), surface.GetHeight()); if (!sceneData.HasCamera()) { return false; } return m_pipeline->Render(context, surface, sceneData); } } // namespace Rendering } // namespace XCEngine