Refactor editor rendering contracts
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user