Files
XCEngine/new_editor/app/Rendering/Viewport/SceneViewportRenderService.h

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