rendering: formalize editor support object id boundary
This commit is contained in:
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user