Fix scene selection outline mask path
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
||||
|
||||
#include "Viewport/ViewportHostRenderTargets.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Editor {
|
||||
|
||||
@@ -9,11 +11,11 @@ class SceneViewportSelectionOutlinePass final : public Rendering::RenderPass {
|
||||
public:
|
||||
SceneViewportSelectionOutlinePass(
|
||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
ViewportRenderTargets* targets,
|
||||
std::vector<uint64_t> selectedObjectIds,
|
||||
const SceneViewportSelectionOutlineStyle& style)
|
||||
: m_renderer(renderer)
|
||||
, m_objectIdTextureView(objectIdTextureView)
|
||||
, m_targets(targets)
|
||||
, m_selectedObjectIds(std::move(selectedObjectIds))
|
||||
, m_style(style) {
|
||||
}
|
||||
@@ -26,14 +28,15 @@ public:
|
||||
return m_renderer.Render(
|
||||
context.renderContext,
|
||||
context.surface,
|
||||
m_objectIdTextureView,
|
||||
context.sceneData,
|
||||
*m_targets,
|
||||
m_selectedObjectIds,
|
||||
m_style);
|
||||
}
|
||||
|
||||
private:
|
||||
SceneViewportSelectionOutlinePassRenderer& m_renderer;
|
||||
RHI::RHIResourceView* m_objectIdTextureView = nullptr;
|
||||
ViewportRenderTargets* m_targets = nullptr;
|
||||
std::vector<uint64_t> m_selectedObjectIds = {};
|
||||
SceneViewportSelectionOutlineStyle m_style = {};
|
||||
};
|
||||
@@ -41,35 +44,51 @@ private:
|
||||
} // namespace
|
||||
|
||||
SceneViewportSelectionOutlinePassRenderer::SceneViewportSelectionOutlinePassRenderer()
|
||||
: m_outlinePass() {
|
||||
: m_selectionMaskPass()
|
||||
, m_outlinePass() {
|
||||
}
|
||||
|
||||
void SceneViewportSelectionOutlinePassRenderer::Shutdown() {
|
||||
m_selectionMaskPass.Shutdown();
|
||||
m_outlinePass.Shutdown();
|
||||
}
|
||||
|
||||
bool SceneViewportSelectionOutlinePassRenderer::Render(
|
||||
const Rendering::RenderContext& renderContext,
|
||||
const Rendering::RenderSurface& surface,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
const Rendering::RenderSceneData& sceneData,
|
||||
ViewportRenderTargets& targets,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
Rendering::RenderSurface selectionMaskSurface = BuildViewportSelectionMaskSurface(targets);
|
||||
selectionMaskSurface.SetRenderArea(surface.GetRenderArea());
|
||||
|
||||
if (!m_selectionMaskPass.Render(
|
||||
renderContext,
|
||||
selectionMaskSurface,
|
||||
sceneData,
|
||||
selectedObjectIds)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
targets.selectionMaskState = RHI::ResourceStates::PixelShaderResource;
|
||||
|
||||
return m_outlinePass.Render(
|
||||
renderContext,
|
||||
surface,
|
||||
objectIdTextureView,
|
||||
selectedObjectIds,
|
||||
targets.selectionMaskShaderView,
|
||||
targets.depthShaderView,
|
||||
ToBuiltinSceneViewportSelectionOutlineStyle(style));
|
||||
}
|
||||
|
||||
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
||||
SceneViewportSelectionOutlinePassRenderer& renderer,
|
||||
RHI::RHIResourceView* objectIdTextureView,
|
||||
ViewportRenderTargets* targets,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const SceneViewportSelectionOutlineStyle& style) {
|
||||
return std::make_unique<SceneViewportSelectionOutlinePass>(
|
||||
renderer,
|
||||
objectIdTextureView,
|
||||
targets,
|
||||
selectedObjectIds,
|
||||
style);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user