Refactor editor rendering contracts
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "ViewportHostService.h"
|
||||
|
||||
#include "Panels/EditorPanelIds.h"
|
||||
#include "Viewport/SceneViewportResourcePaths.h"
|
||||
#include "ViewportRenderHost.h"
|
||||
|
||||
#include <XCEngine/RHI/RHICommandList.h>
|
||||
@@ -18,6 +20,14 @@ ViewportHostService::ViewportHostService() = default;
|
||||
|
||||
ViewportHostService::~ViewportHostService() = default;
|
||||
|
||||
void ViewportHostService::Initialize(const std::filesystem::path& repoRoot) {
|
||||
m_sceneViewportRuntime.Initialize(BuildSceneViewportShaderPaths(repoRoot));
|
||||
SetContentRenderer(
|
||||
kScenePanelId,
|
||||
&m_sceneViewportRuntime,
|
||||
SceneViewportRenderService::GetViewportResourceRequirements());
|
||||
}
|
||||
|
||||
void ViewportHostService::AttachWindowRenderer(
|
||||
Rendering::Host::ViewportRenderHost& windowRenderer) {
|
||||
if (m_windowRenderer == &windowRenderer) {
|
||||
@@ -43,13 +53,15 @@ void ViewportHostService::SetSurfacePresentationEnabled(bool enabled) {
|
||||
void ViewportHostService::SetContentRenderer(
|
||||
std::string_view viewportId,
|
||||
IViewportContentRenderer* renderer,
|
||||
const ViewportResourceRequirements& requirements) {
|
||||
const EditorViewportResourceRequirements& requirements) {
|
||||
ViewportEntry& entry = GetOrCreateEntry(viewportId);
|
||||
entry.renderer = renderer;
|
||||
entry.requirements = requirements;
|
||||
}
|
||||
|
||||
void ViewportHostService::Shutdown() {
|
||||
SetContentRenderer(kScenePanelId, nullptr, {});
|
||||
m_sceneViewportRuntime.Shutdown();
|
||||
for (auto& [viewportId, entry] : m_entries) {
|
||||
DestroyViewportEntry(entry);
|
||||
}
|
||||
@@ -155,7 +167,7 @@ void ViewportHostService::RetireViewportTargets(ViewportRenderTargets& targets)
|
||||
std::swap(m_retiredTargetsBySlot[activeSlot].back(), targets);
|
||||
}
|
||||
|
||||
ViewportFrame ViewportHostService::RequestViewport(
|
||||
EditorViewportFrame ViewportHostService::RequestViewport(
|
||||
std::string_view viewportId,
|
||||
const ::XCEngine::UI::UISize& requestedSize) {
|
||||
ViewportEntry& entry = GetOrCreateEntry(viewportId);
|
||||
@@ -302,10 +314,10 @@ void ViewportHostService::ClearViewport(
|
||||
entry.renderTargets.objectIdFrameSerial = 0u;
|
||||
}
|
||||
|
||||
ViewportFrame ViewportHostService::BuildFrame(
|
||||
EditorViewportFrame ViewportHostService::BuildFrame(
|
||||
const ViewportEntry& entry,
|
||||
const ::XCEngine::UI::UISize& requestedSize) const {
|
||||
ViewportFrame frame = {};
|
||||
EditorViewportFrame frame = {};
|
||||
frame.requestedSize = requestedSize;
|
||||
frame.renderSize = ::XCEngine::UI::UISize(
|
||||
static_cast<float>(entry.renderTargets.width),
|
||||
@@ -322,4 +334,8 @@ ViewportFrame ViewportHostService::BuildFrame(
|
||||
return frame;
|
||||
}
|
||||
|
||||
EditorSceneViewportRuntime& ViewportHostService::GetSceneViewportRuntime() {
|
||||
return m_sceneViewportRuntime;
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
|
||||
Reference in New Issue
Block a user