2026-04-03 14:26:36 +08:00
|
|
|
#include "Passes/SceneViewportSelectionOutlinePass.h"
|
|
|
|
|
|
2026-04-03 15:43:21 +08:00
|
|
|
#include "Viewport/SceneViewportShaderPaths.h"
|
|
|
|
|
|
2026-04-03 14:26:36 +08:00
|
|
|
namespace XCEngine {
|
|
|
|
|
namespace Editor {
|
|
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
|
|
|
|
|
class SceneViewportSelectionOutlinePass final : public Rendering::RenderPass {
|
|
|
|
|
public:
|
|
|
|
|
SceneViewportSelectionOutlinePass(
|
|
|
|
|
SceneViewportSelectionOutlinePassRenderer& renderer,
|
|
|
|
|
RHI::RHIResourceView* objectIdTextureView,
|
|
|
|
|
std::vector<uint64_t> selectedObjectIds,
|
|
|
|
|
const Rendering::Passes::ObjectIdOutlineStyle& style)
|
|
|
|
|
: m_renderer(renderer)
|
|
|
|
|
, m_objectIdTextureView(objectIdTextureView)
|
|
|
|
|
, m_selectedObjectIds(std::move(selectedObjectIds))
|
|
|
|
|
, m_style(style) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char* GetName() const override {
|
|
|
|
|
return "SceneViewportSelectionOutline";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool Execute(const Rendering::RenderPassContext& context) override {
|
|
|
|
|
return m_renderer.Render(
|
|
|
|
|
context.renderContext,
|
|
|
|
|
context.surface,
|
|
|
|
|
m_objectIdTextureView,
|
|
|
|
|
m_selectedObjectIds,
|
|
|
|
|
m_style);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
SceneViewportSelectionOutlinePassRenderer& m_renderer;
|
|
|
|
|
RHI::RHIResourceView* m_objectIdTextureView = nullptr;
|
|
|
|
|
std::vector<uint64_t> m_selectedObjectIds = {};
|
|
|
|
|
Rendering::Passes::ObjectIdOutlineStyle m_style = {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
2026-04-03 15:43:21 +08:00
|
|
|
SceneViewportSelectionOutlinePassRenderer::SceneViewportSelectionOutlinePassRenderer()
|
|
|
|
|
: m_outlinePass(GetSceneViewportObjectIdOutlineShaderPath()) {
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-03 14:26:36 +08:00
|
|
|
void SceneViewportSelectionOutlinePassRenderer::Shutdown() {
|
|
|
|
|
m_outlinePass.Shutdown();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SceneViewportSelectionOutlinePassRenderer::Render(
|
|
|
|
|
const Rendering::RenderContext& renderContext,
|
|
|
|
|
const Rendering::RenderSurface& surface,
|
|
|
|
|
RHI::RHIResourceView* objectIdTextureView,
|
|
|
|
|
const std::vector<uint64_t>& selectedObjectIds,
|
|
|
|
|
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
|
|
|
|
return m_outlinePass.Render(
|
|
|
|
|
renderContext,
|
|
|
|
|
surface,
|
|
|
|
|
objectIdTextureView,
|
|
|
|
|
selectedObjectIds,
|
|
|
|
|
style);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<Rendering::RenderPass> CreateSceneViewportSelectionOutlinePass(
|
|
|
|
|
SceneViewportSelectionOutlinePassRenderer& renderer,
|
|
|
|
|
RHI::RHIResourceView* objectIdTextureView,
|
|
|
|
|
const std::vector<uint64_t>& selectedObjectIds,
|
|
|
|
|
const Rendering::Passes::ObjectIdOutlineStyle& style) {
|
|
|
|
|
return std::make_unique<SceneViewportSelectionOutlinePass>(
|
|
|
|
|
renderer,
|
|
|
|
|
objectIdTextureView,
|
|
|
|
|
selectedObjectIds,
|
|
|
|
|
style);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace Editor
|
|
|
|
|
} // namespace XCEngine
|