#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 CameraRenderRequest& request) { if (!request.IsValid() || m_pipeline == nullptr) { return false; } RenderSceneData sceneData = m_sceneExtractor.ExtractForCamera( *request.scene, *request.camera, request.surface.GetWidth(), request.surface.GetHeight()); if (!sceneData.HasCamera()) { return false; } sceneData.cameraData.clearFlags = request.clearFlags; return m_pipeline->Render(request.context, request.surface, sceneData); } } // namespace Rendering } // namespace XCEngine