refactor(editor): isolate engine service boundaries

This commit is contained in:
2026-04-29 03:19:46 +08:00
parent ef11651ec2
commit 313a571e43
60 changed files with 3804 additions and 2611 deletions

View File

@@ -0,0 +1,109 @@
#include "Viewport/GameViewportRenderService.h"
#include "Engine/GameViewportEngineBridge.h"
#include "Viewport/ViewportRenderTargets.h"
#include <XCEngine/Rendering/Execution/CameraStackFramePlan.h>
#include <utility>
#include <vector>
namespace XCEngine::UI::Editor::App {
namespace {
ViewportRenderResult BuildFallbackResult(
std::string statusText,
float r,
float g,
float b,
float a) {
ViewportRenderResult result = {};
result.rendered = false;
result.requiresFallbackClear = true;
result.statusText = std::move(statusText);
result.fallbackClearR = r;
result.fallbackClearG = g;
result.fallbackClearB = b;
result.fallbackClearA = a;
return result;
}
} // namespace
EditorViewportResourceRequirements
GameViewportRenderService::GetViewportResourceRequirements() {
return {};
}
void GameViewportRenderService::Initialize(GameViewportEngineBridge& engineBridge) {
m_engineBridge = &engineBridge;
}
void GameViewportRenderService::Shutdown() {
m_engineBridge = nullptr;
}
ViewportRenderResult GameViewportRenderService::Render(
ViewportRenderTargets& targets,
::XCEngine::RHI::RHIDevice& device,
const ::XCEngine::Rendering::RenderContext& renderContext) {
(void)device;
if (m_engineBridge == nullptr) {
return BuildFallbackResult(
"Game renderer is unavailable",
0.18f,
0.07f,
0.07f,
1.0f);
}
std::vector<::XCEngine::Rendering::CameraStackFramePlan> framePlans = {};
const GameViewportFramePlanBuildStatus buildStatus =
m_engineBridge->BuildGameViewportFramePlans(
renderContext,
BuildViewportColorSurface(targets),
framePlans);
switch (buildStatus) {
case GameViewportFramePlanBuildStatus::Success:
break;
case GameViewportFramePlanBuildStatus::NoActiveScene:
return BuildFallbackResult(
"No active scene",
0.07f,
0.08f,
0.10f,
1.0f);
case GameViewportFramePlanBuildStatus::NoRenderableCamera:
return BuildFallbackResult(
"No active game camera",
0.10f,
0.10f,
0.12f,
1.0f);
case GameViewportFramePlanBuildStatus::Failed:
default:
return BuildFallbackResult(
"Game renderer failed",
0.18f,
0.07f,
0.07f,
1.0f);
}
if (!m_engineBridge->RenderGameViewportFramePlans(framePlans)) {
return BuildFallbackResult(
"Game renderer failed",
0.18f,
0.07f,
0.07f,
1.0f);
}
ViewportRenderResult result = {};
result.rendered = true;
return result;
}
} // namespace XCEngine::UI::Editor::App