60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "Rendering/Viewport/ViewportContentRenderer.h"
|
|
#include "Rendering/Viewport/ViewportObjectPickerService.h"
|
|
#include "Rendering/Viewport/SceneViewportRenderPassBundle.h"
|
|
#include "Rendering/Viewport/SceneViewportRenderRequest.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include <XCEngine/Rendering/RenderContext.h>
|
|
#include <XCEngine/UI/Types.h>
|
|
|
|
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
|