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

74 lines
2.2 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.clear();
m_selectedObjectIds.reserve(selectedObjectIds.size());
for (uint64_t selectedObjectId : selectedObjectIds) {
RenderObjectId renderObjectId = kInvalidRenderObjectId;
if (TryConvertRuntimeObjectIdToRenderObjectId(selectedObjectId, renderObjectId)) {
m_selectedObjectIds.push_back(renderObjectId);
}
}
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,
RHI::ResourceStates::Common
};
return Execute(passContext);
}
bool BuiltinSelectionMaskPass::ShouldRenderVisibleItem(const VisibleRenderItem& visibleItem) const {
if (!IsValidRenderObjectId(visibleItem.renderObjectId)) {
return false;
}
return std::find(m_selectedObjectIds.begin(), m_selectedObjectIds.end(), visibleItem.renderObjectId) !=
m_selectedObjectIds.end();
}
} // namespace Passes
} // namespace Rendering
} // namespace XCEngine