refactor(new_editor/app): reorganize host structure and add smoke test
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#include "ViewportHostService.h"
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
void ViewportHostService::AttachWindowRenderer(
|
||||
Host::D3D12WindowRenderer& windowRenderer) {
|
||||
if (m_windowRenderer == &windowRenderer) {
|
||||
m_device = windowRenderer.GetRHIDevice();
|
||||
if (m_device != nullptr && !m_textureDescriptorAllocator.IsInitialized()) {
|
||||
m_textureDescriptorAllocator.Initialize(*m_device);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Shutdown();
|
||||
m_windowRenderer = &windowRenderer;
|
||||
m_device = windowRenderer.GetRHIDevice();
|
||||
if (m_device != nullptr) {
|
||||
m_textureDescriptorAllocator.Initialize(*m_device);
|
||||
}
|
||||
}
|
||||
|
||||
void ViewportHostService::DetachWindowRenderer() {
|
||||
Shutdown();
|
||||
}
|
||||
|
||||
void ViewportHostService::SetSurfacePresentationEnabled(bool enabled) {
|
||||
m_surfacePresentationEnabled = enabled;
|
||||
}
|
||||
|
||||
void ViewportHostService::Shutdown() {
|
||||
for (ViewportEntry& entry : m_entries) {
|
||||
DestroyViewportEntry(entry);
|
||||
}
|
||||
|
||||
m_textureDescriptorAllocator.Shutdown();
|
||||
m_windowRenderer = nullptr;
|
||||
m_device = nullptr;
|
||||
m_surfacePresentationEnabled = false;
|
||||
}
|
||||
|
||||
void ViewportHostService::BeginFrame() {
|
||||
for (ViewportEntry& entry : m_entries) {
|
||||
entry.requestedWidth = 0;
|
||||
entry.requestedHeight = 0;
|
||||
entry.requestedThisFrame = false;
|
||||
entry.renderedThisFrame = false;
|
||||
entry.kind = (&entry == &m_entries[0]) ? ViewportKind::Scene : ViewportKind::Game;
|
||||
}
|
||||
}
|
||||
|
||||
ViewportHostService::ViewportEntry& ViewportHostService::GetEntry(
|
||||
ViewportKind kind) {
|
||||
const std::size_t index = kind == ViewportKind::Scene ? 0u : 1u;
|
||||
ViewportEntry& entry = m_entries[index];
|
||||
entry.kind = kind;
|
||||
return entry;
|
||||
}
|
||||
|
||||
const ViewportHostService::ViewportEntry& ViewportHostService::GetEntry(
|
||||
ViewportKind kind) const {
|
||||
const std::size_t index = kind == ViewportKind::Scene ? 0u : 1u;
|
||||
return m_entries[index];
|
||||
}
|
||||
|
||||
void ViewportHostService::DestroyViewportEntry(ViewportEntry& entry) {
|
||||
m_renderTargetManager.DestroyTargets(&m_textureDescriptorAllocator, entry.renderTargets);
|
||||
entry = {};
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
Reference in New Issue
Block a user