Fix scene selection outline mask path
This commit is contained in:
65
engine/src/Rendering/Passes/BuiltinSelectionMaskPass.cpp
Normal file
65
engine/src/Rendering/Passes/BuiltinSelectionMaskPass.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user