Files
XCEngine/engine/src/Rendering/Passes/BuiltinSelectionMaskPass.cpp

66 lines
1.8 KiB
C++
Raw Normal View History

2026-04-09 05:16:04 +08:00
#include "Rendering/Passes/BuiltinSelectionMaskPass.h"
#include "Components/GameObject.h"
#include "Resources/BuiltinResources.h"
#include <XCEngine/Rendering/FrameData/RenderSceneData.h>
#include <XCEngine/Rendering/FrameData/VisibleRenderItem.h>
#include <algorithm>
namespace XCEngine {
namespace Rendering {
namespace Passes {
BuiltinSelectionMaskPass::BuiltinSelectionMaskPass()
: BuiltinDepthStylePassBase(
BuiltinMaterialPass::SelectionMask,
Resources::GetBuiltinSelectionMaskShaderPath()) {
}
RHI::InputLayoutDesc BuiltinSelectionMaskPass::BuildInputLayout() {
return BuildCommonInputLayout();
}
const char* BuiltinSelectionMaskPass::GetName() const {
return "BuiltinSelectionMaskPass";
}
bool BuiltinSelectionMaskPass::Render(
const RenderContext& context,
const RenderSurface& surface,
const RenderSceneData& sceneData,
const std::vector<uint64_t>& selectedObjectIds) {
m_selectedObjectIds = selectedObjectIds;
if (m_selectedObjectIds.empty()) {
return false;
}
RenderSceneData selectionMaskSceneData = sceneData;
selectionMaskSceneData.cameraData.clearFlags = RenderClearFlags::Color;
selectionMaskSceneData.cameraData.clearColor = Math::Color::Black();
const RenderPassContext passContext = {
context,
surface,
selectionMaskSceneData,
nullptr,
nullptr
};
return Execute(passContext);
}
bool BuiltinSelectionMaskPass::ShouldRenderVisibleItem(const VisibleRenderItem& visibleItem) const {
if (visibleItem.gameObject == nullptr) {
return false;
}
const uint64_t objectId = visibleItem.gameObject->GetID();
return std::find(m_selectedObjectIds.begin(), m_selectedObjectIds.end(), objectId) !=
m_selectedObjectIds.end();
}
} // namespace Passes
} // namespace Rendering
} // namespace XCEngine