#include "Engine/EngineGameViewportBridge.h" #include #include #include #include namespace XCEngine::UI::Editor::App { namespace { using ::XCEngine::Components::Scene; using ::XCEngine::Components::SceneManager; Scene* ResolvePrimaryScene(SceneManager& sceneManager) { if (Scene* activeScene = sceneManager.GetActiveScene(); activeScene != nullptr) { return activeScene; } const std::vector scenes = sceneManager.GetAllScenes(); if (!scenes.empty() && scenes.front() != nullptr) { sceneManager.SetActiveScene(scenes.front()); return scenes.front(); } return nullptr; } } // namespace GameViewportFramePlanBuildStatus EngineGameViewportBridge::BuildFramePlans( const ::XCEngine::Rendering::RenderContext& renderContext, const ::XCEngine::Rendering::RenderSurface& surface, std::vector<::XCEngine::Rendering::CameraStackFramePlan>& outFramePlans) { outFramePlans.clear(); Scene* scene = ResolvePrimaryScene(SceneManager::Get()); if (scene == nullptr) { return GameViewportFramePlanBuildStatus::NoActiveScene; } outFramePlans = m_gameViewportRenderer.BuildStackFramePlans( *scene, nullptr, renderContext, surface); outFramePlans.erase( std::remove_if( outFramePlans.begin(), outFramePlans.end(), [](const auto& plan) { return !plan.IsValid(); }), outFramePlans.end()); return outFramePlans.empty() ? GameViewportFramePlanBuildStatus::NoRenderableCamera : GameViewportFramePlanBuildStatus::Success; } bool EngineGameViewportBridge::RenderFramePlans( const std::vector<::XCEngine::Rendering::CameraStackFramePlan>& framePlans) { return !framePlans.empty() && m_gameViewportRenderer.Render(framePlans); } } // namespace XCEngine::UI::Editor::App