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

72 lines
2.2 KiB
C++

#pragma once
#include "Viewport/EditorViewportRuntimeServices.h"
#include "Viewport/ViewportContentRenderer.h"
#include "Viewport/SceneViewportRenderPassBundle.h"
#include <memory>
#include <string>
#include <cstdint>
#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 EditorEngineServices;
class SceneViewportRenderService
: public IViewportContentRenderer
, public EditorSceneViewportRuntime
, public IViewportObjectPickerService {
public:
SceneViewportRenderService();
~SceneViewportRenderService();
static EditorViewportResourceRequirements GetViewportResourceRequirements();
void Initialize(
const SceneViewportShaderPaths& shaderPaths,
EditorEngineServices& engineServices);
void Shutdown();
void SetRenderRequest(SceneViewportRenderRequest request) override;
const IViewportObjectPickerService& GetObjectPicker() const override;
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();
void InvalidateObjectIdFrame();
SceneViewportRenderRequest m_renderRequest = {};
std::unique_ptr<::XCEngine::Rendering::SceneRenderer> m_sceneRenderer = {};
SceneViewportRenderPassBundle m_renderPassBundle = {};
EditorEngineServices* m_engineServices = nullptr;
::XCEngine::RHI::RHIDevice* m_device = nullptr;
ViewportRenderTargets* m_lastTargets = nullptr;
::XCEngine::Rendering::RenderContext m_lastRenderContext = {};
::XCEngine::Components::Scene* m_lastObjectIdScene = nullptr;
::XCEngine::Components::CameraComponent* m_lastObjectIdCamera = nullptr;
std::uint64_t m_objectIdFrameSerialCounter = 0u;
};
} // namespace XCEngine::UI::Editor::App