#include "Rendering/Passes/BuiltinSelectionMaskPass.h" #include "Components/GameObject.h" #include "Resources/BuiltinResources.h" #include #include #include 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& 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