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

65 lines
2.6 KiB
C++

#pragma once
#include "Ports/PortFwd.h"
#include "ViewportRenderTargetInternal.h"
#include <XCEngine/RHI/RHIDevice.h>
#include <XCEngine/RHI/RHIResourceView.h>
#include <XCEngine/RHI/RHITexture.h>
#include <XCEngine/UI/Types.h>
namespace XCEngine::UI::Editor::App {
struct ViewportRenderTargets {
std::uint32_t width = 0;
std::uint32_t height = 0;
::XCEngine::RHI::RHITexture* colorTexture = nullptr;
::XCEngine::RHI::RHIResourceView* colorView = nullptr;
::XCEngine::RHI::RHITexture* depthTexture = nullptr;
::XCEngine::RHI::RHIResourceView* depthView = nullptr;
::XCEngine::RHI::RHIResourceView* depthShaderView = nullptr;
::XCEngine::RHI::RHITexture* objectIdTexture = nullptr;
::XCEngine::RHI::RHITexture* objectIdDepthTexture = nullptr;
::XCEngine::RHI::RHIResourceView* objectIdDepthView = nullptr;
::XCEngine::RHI::RHIResourceView* objectIdView = nullptr;
::XCEngine::RHI::RHIResourceView* objectIdShaderView = nullptr;
::XCEngine::RHI::RHITexture* selectionMaskTexture = nullptr;
::XCEngine::RHI::RHIResourceView* selectionMaskView = nullptr;
::XCEngine::RHI::RHIResourceView* selectionMaskShaderView = nullptr;
::XCEngine::UI::UITextureHandle textureHandle = {};
::XCEngine::RHI::ResourceStates colorState = ::XCEngine::RHI::ResourceStates::Common;
::XCEngine::RHI::ResourceStates objectIdState = ::XCEngine::RHI::ResourceStates::Common;
::XCEngine::RHI::ResourceStates selectionMaskState = ::XCEngine::RHI::ResourceStates::Common;
bool hasValidObjectIdFrame = false;
};
ViewportResourceReuseQuery BuildViewportRenderTargetsReuseQuery(
const ViewportResourceRequirements& requirements,
const ViewportRenderTargets& targets,
std::uint32_t requestedWidth,
std::uint32_t requestedHeight);
::XCEngine::Rendering::RenderSurface BuildViewportColorSurface(
const ViewportRenderTargets& targets);
::XCEngine::Rendering::RenderSurface BuildViewportObjectIdSurface(
const ViewportRenderTargets& targets);
::XCEngine::Rendering::RenderSurface BuildViewportSelectionMaskSurface(
const ViewportRenderTargets& targets);
class ViewportRenderTargetManager {
public:
bool EnsureTargets(
const ViewportResourceRequirements& requirements,
std::uint32_t width,
std::uint32_t height,
::XCEngine::RHI::RHIDevice& device,
Ports::ViewportRenderPort& renderHost,
ViewportRenderTargets& targets) const;
void DestroyTargets(
Ports::ViewportRenderPort* renderHost,
ViewportRenderTargets& targets) const;
};
} // namespace XCEngine::UI::Editor::App