rendering: formalize editor support object id boundary

This commit is contained in:
2026-04-22 16:17:27 +08:00
parent 17326f455e
commit ab87ad85d7
30 changed files with 646 additions and 178 deletions

View File

@@ -722,9 +722,6 @@ bool TryResolveManagedCameraFrameStage(
case static_cast<int32_t>(Rendering::CameraFrameStage::FinalOutput):
outStage = Rendering::CameraFrameStage::FinalOutput;
return true;
case static_cast<int32_t>(Rendering::CameraFrameStage::ObjectId):
outStage = Rendering::CameraFrameStage::ObjectId;
return true;
case static_cast<int32_t>(Rendering::CameraFrameStage::PostScenePasses):
outStage = Rendering::CameraFrameStage::PostScenePasses;
return true;
@@ -1136,7 +1133,7 @@ struct ManagedFilteringSettingsData {
int32_t renderQueueMax = std::numeric_limits<int32_t>::max();
uint32_t renderLayerMask = std::numeric_limits<uint32_t>::max();
uint8_t requireShadowCasting = 0u;
uint8_t requireRenderObjectId = 0u;
uint8_t reservedEditorObjectIdFilter = 0u;
};
static_assert(
@@ -1303,6 +1300,80 @@ Rendering::RenderStateMask ResolveManagedRenderStateMask(
value & knownMask);
}
bool TryResolveManagedRendererListType(
uint32_t value,
Rendering::RendererListType& outType) {
switch (value) {
case static_cast<uint32_t>(Rendering::RendererListType::AllVisible):
outType = Rendering::RendererListType::AllVisible;
return true;
case static_cast<uint32_t>(Rendering::RendererListType::Opaque):
outType = Rendering::RendererListType::Opaque;
return true;
case static_cast<uint32_t>(Rendering::RendererListType::Transparent):
outType = Rendering::RendererListType::Transparent;
return true;
case static_cast<uint32_t>(Rendering::RendererListType::ShadowCaster):
outType = Rendering::RendererListType::ShadowCaster;
return true;
default:
outType = Rendering::RendererListType::AllVisible;
return false;
}
}
Rendering::RendererSortMode ResolveManagedRendererSortMode(
uint32_t value) {
switch (value) {
case static_cast<uint32_t>(Rendering::RendererSortMode::FrontToBack):
return Rendering::RendererSortMode::FrontToBack;
case static_cast<uint32_t>(Rendering::RendererSortMode::BackToFront):
return Rendering::RendererSortMode::BackToFront;
case static_cast<uint32_t>(Rendering::RendererSortMode::None):
default:
return Rendering::RendererSortMode::None;
}
}
Rendering::FilteringSettings BuildManagedFilteringSettings(
const ManagedFilteringSettingsData& filteringData) {
Rendering::FilteringSettings filteringSettings = {};
filteringSettings.renderQueueMin = filteringData.renderQueueMin;
filteringSettings.renderQueueMax = filteringData.renderQueueMax;
filteringSettings.renderLayerMask = filteringData.renderLayerMask;
filteringSettings.requireShadowCasting =
filteringData.requireShadowCasting != 0u;
return filteringSettings;
}
Rendering::SortingSettings BuildManagedSortingSettings(
const ManagedSortingSettingsData& sortingData) {
Rendering::SortingSettings sortingSettings = {};
sortingSettings.sortMode =
ResolveManagedRendererSortMode(
sortingData.sortMode);
return sortingSettings;
}
bool TryBuildManagedRendererListDesc(
const ManagedRendererListDescData& rendererListDescData,
Rendering::RendererListDesc& outRendererListDesc) {
outRendererListDesc = {};
if (!TryResolveManagedRendererListType(
rendererListDescData.type,
outRendererListDesc.type)) {
return false;
}
outRendererListDesc.filtering =
BuildManagedFilteringSettings(
rendererListDescData.filtering);
outRendererListDesc.sorting =
BuildManagedSortingSettings(
rendererListDescData.sorting);
return true;
}
Rendering::DepthState BuildManagedDepthState(
const ManagedDepthStateData& depthStateData) {
Rendering::DepthState depthState = {};
@@ -5571,9 +5642,14 @@ InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc(
Rendering::DrawSettings drawSettings = {};
drawSettings.scenePhase =
static_cast<Rendering::ScenePhase>(scenePhase);
drawSettings.rendererListDesc =
*reinterpret_cast<const Rendering::RendererListDesc*>(
rendererListDescData);
if (!TryBuildManagedRendererListDesc(
*rendererListDescData,
drawSettings.rendererListDesc)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"ScriptableRenderContext DrawRenderers received an unsupported renderer-list type");
return 0;
}
const std::string overrideMaterialPathUtf8 =
MonoStringToUtf8(overrideMaterialPath);
if (!overrideMaterialPathUtf8.empty()) {