feat(srp): add render queue range authoring

- add a core RenderQueueRange helper for managed scene draw filtering
- let FilteringSettings and RenderObjectsRendererFeature consume queue ranges directly
- wire the new authoring path into probes and project-side usage
This commit is contained in:
2026-04-20 22:10:18 +08:00
parent cee65fcf40
commit db7f427112
6 changed files with 79 additions and 11 deletions

View File

@@ -5,8 +5,6 @@ namespace XCEngine.Rendering
[StructLayout(LayoutKind.Sequential)]
public struct FilteringSettings
{
private const int kTransparentRenderQueue = 3000;
public int renderQueueMin;
public int renderQueueMax;
@@ -16,24 +14,44 @@ namespace XCEngine.Rendering
[MarshalAs(UnmanagedType.I1)]
public bool requireRenderObjectId;
public RenderQueueRange renderQueueRange
{
get
{
return new RenderQueueRange(
renderQueueMin,
renderQueueMax);
}
set
{
renderQueueMin = value.lowerBound;
renderQueueMax = value.upperBound;
}
}
public static FilteringSettings Create(
RenderQueueRange renderQueueRange)
{
return new FilteringSettings
{
renderQueueRange = renderQueueRange
};
}
public static FilteringSettings CreateDefault(
RendererListType rendererListType)
{
FilteringSettings filteringSettings =
new FilteringSettings
{
renderQueueMin = int.MinValue,
renderQueueMax = int.MaxValue
};
Create(RenderQueueRange.All);
switch (rendererListType)
{
case RendererListType.Opaque:
filteringSettings.renderQueueMax =
kTransparentRenderQueue - 1;
filteringSettings.renderQueueRange =
RenderQueueRange.Opaque;
break;
case RendererListType.Transparent:
filteringSettings.renderQueueMin =
kTransparentRenderQueue;
filteringSettings.renderQueueRange =
RenderQueueRange.Transparent;
break;
case RendererListType.ShadowCaster:
filteringSettings.requireShadowCasting = true;

View File

@@ -0,0 +1,33 @@
namespace XCEngine.Rendering
{
public struct RenderQueueRange
{
private const int kTransparentRenderQueue = 3000;
public int lowerBound;
public int upperBound;
public RenderQueueRange(
int lowerBound,
int upperBound)
{
this.lowerBound = lowerBound;
this.upperBound = upperBound;
}
public static RenderQueueRange All =>
new RenderQueueRange(
int.MinValue,
int.MaxValue);
public static RenderQueueRange Opaque =>
new RenderQueueRange(
int.MinValue,
kTransparentRenderQueue - 1);
public static RenderQueueRange Transparent =>
new RenderQueueRange(
kTransparentRenderQueue,
int.MaxValue);
}
}