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

@@ -1,6 +1,5 @@
#include "ViewportHostService.h"
#include "Engine/EditorEngineServices.h"
#include "Panels/EditorPanelIds.h"
#include "Product/EditorProductManifest.h"
#include "Viewport/SceneViewportResourcePaths.h"
@@ -43,18 +42,20 @@ private:
} // namespace
ViewportHostService::ViewportHostService(EditorEngineServices* engineServices)
: m_engineServices(engineServices) {}
ViewportHostService::ViewportHostService() = default;
ViewportHostService::~ViewportHostService() = default;
void ViewportHostService::Initialize(
const EditorRuntimePaths& runtimePaths,
EditorEngineServices& engineServices) {
m_engineServices = &engineServices;
SceneViewportEngineBridge& sceneViewportEngineBridge,
GameViewportEngineBridge& gameViewportEngineBridge,
EditorShaderProvider& shaderProvider) {
m_gameViewportRuntime.Initialize(gameViewportEngineBridge);
m_sceneViewportRuntime.Initialize(
BuildSceneViewportShaderPaths(runtimePaths),
engineServices);
sceneViewportEngineBridge,
shaderProvider);
m_placeholderRenderers.clear();
for (const EditorProductPanelDescriptor& panel : GetEditorProductPanels()) {
if (panel.presentationKind != UIEditorPanelPresentationKind::ViewportShell) {
@@ -68,6 +69,12 @@ void ViewportHostService::Initialize(
&m_sceneViewportRuntime,
SceneViewportRenderService::GetViewportResourceRequirements());
break;
case EditorProductViewportRendererKind::Game:
SetContentRenderer(
panel.panelId,
&m_gameViewportRuntime,
GameViewportRenderService::GetViewportResourceRequirements());
break;
case EditorProductViewportRendererKind::Placeholder: {
auto placeholder =
std::make_unique<PlaceholderViewportContentRenderer>(
@@ -122,6 +129,7 @@ void ViewportHostService::Shutdown() {
}
}
m_placeholderRenderers.clear();
m_gameViewportRuntime.Shutdown();
m_sceneViewportRuntime.Shutdown();
for (auto& [viewportId, entry] : m_entries) {
DestroyViewportEntry(entry);
@@ -131,7 +139,6 @@ void ViewportHostService::Shutdown() {
m_windowRenderer = nullptr;
m_device = nullptr;
m_surfacePresentationEnabled = false;
m_engineServices = nullptr;
m_entries.clear();
m_retiredTargetsBySlot.clear();
}