66 lines
1.8 KiB
C++
66 lines
1.8 KiB
C++
|
|
#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
|