#pragma once #include "Rendering/Viewport/ViewportContentRenderer.h" #include "Rendering/Viewport/ViewportObjectPickerService.h" #include "Rendering/Viewport/SceneViewportRenderPassBundle.h" #include "Rendering/Viewport/SceneViewportRenderRequest.h" #include #include #include #include namespace XCEngine::Rendering { class SceneRenderer; } // namespace XCEngine::Rendering namespace XCEngine::RHI { class RHIDevice; } // namespace XCEngine::RHI namespace XCEngine::UI::Editor::App { class SceneViewportRenderService : public IViewportContentRenderer , public IViewportObjectPickerService { public: SceneViewportRenderService(); ~SceneViewportRenderService(); static ViewportResourceRequirements GetViewportResourceRequirements(); void Shutdown(); void SetRenderRequest(SceneViewportRenderRequest request); ViewportRenderResult Render( ViewportRenderTargets& targets, ::XCEngine::RHI::RHIDevice& device, const ::XCEngine::Rendering::RenderContext& renderContext) override; ViewportObjectIdPickResult PickObject( const ::XCEngine::UI::UISize& viewportSize, const ::XCEngine::UI::UIPoint& viewportMousePosition) const override; private: void EnsureSceneRenderer(); SceneViewportRenderRequest m_renderRequest = {}; std::unique_ptr<::XCEngine::Rendering::SceneRenderer> m_sceneRenderer = {}; SceneViewportRenderPassBundle m_renderPassBundle = {}; ::XCEngine::RHI::RHIDevice* m_device = nullptr; const ViewportRenderTargets* m_lastTargets = nullptr; ::XCEngine::Rendering::RenderContext m_lastRenderContext = {}; }; } // namespace XCEngine::UI::Editor::App