Refactor editor rendering contracts

This commit is contained in:
2026-04-28 02:57:49 +08:00
parent 3bc0cfcf08
commit b1ae6c462d
47 changed files with 798 additions and 377 deletions

View File

@@ -1,6 +1,8 @@
#pragma once
#include "Viewport/EditorViewportRuntimeServices.h"
#include "HostFwd.h"
#include "Viewport/SceneViewportRenderService.h"
#include "Viewport/ViewportContentRenderer.h"
#include "ViewportRenderTargets.h"
@@ -15,33 +17,35 @@
namespace XCEngine::UI::Editor::App {
class ViewportHostService {
class ViewportHostService final : public EditorViewportRuntimeServices {
public:
ViewportHostService();
~ViewportHostService();
void AttachWindowRenderer(Rendering::Host::ViewportRenderHost& windowRenderer);
void DetachWindowRenderer();
void SetSurfacePresentationEnabled(bool enabled);
void Initialize(const std::filesystem::path& repoRoot) override;
void Shutdown() override;
void AttachWindowRenderer(Rendering::Host::ViewportRenderHost& windowRenderer) override;
void DetachWindowRenderer() override;
void SetSurfacePresentationEnabled(bool enabled) override;
void SetContentRenderer(
std::string_view viewportId,
IViewportContentRenderer* renderer,
const ViewportResourceRequirements& requirements = {});
const EditorViewportResourceRequirements& requirements = {});
void Shutdown();
void BeginFrame();
void BeginFrame() override;
ViewportFrame RequestViewport(
EditorViewportFrame RequestViewport(
std::string_view viewportId,
const ::XCEngine::UI::UISize& requestedSize);
const ::XCEngine::UI::UISize& requestedSize) override;
void RenderRequestedViewports(
const ::XCEngine::Rendering::RenderContext& renderContext);
const ::XCEngine::Rendering::RenderContext& renderContext) override;
EditorSceneViewportRuntime& GetSceneViewportRuntime() override;
private:
struct ViewportEntry {
IViewportContentRenderer* renderer = nullptr;
ViewportResourceRequirements requirements = {};
EditorViewportResourceRequirements requirements = {};
std::uint32_t requestedWidth = 0;
std::uint32_t requestedHeight = 0;
bool requestedThisFrame = false;
@@ -68,7 +72,7 @@ private:
float g,
float b,
float a);
ViewportFrame BuildFrame(
EditorViewportFrame BuildFrame(
const ViewportEntry& entry,
const ::XCEngine::UI::UISize& requestedSize) const;
@@ -78,6 +82,7 @@ private:
bool m_surfacePresentationEnabled = false;
std::unordered_map<std::string, ViewportEntry> m_entries = {};
std::vector<std::vector<ViewportRenderTargets>> m_retiredTargetsBySlot = {};
SceneViewportRenderService m_sceneViewportRuntime = {};
};
} // namespace XCEngine::UI::Editor::App