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:
@@ -180,6 +180,7 @@ set(XCENGINE_SCRIPT_CORE_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/FilteringSettings.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/GraphicsSettings.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/RenderPipelineAsset.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/RenderQueueRange.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/RendererListDesc.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/RendererListType.cs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.ScriptCore/Rendering/Core/RendererSortMode.cs
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace Gameplay
|
||||
public bool HasSceneRenderPhaseType;
|
||||
public bool HasSceneRenderInjectionPointType;
|
||||
public bool HasRendererListType;
|
||||
public bool HasRenderQueueRangeType;
|
||||
public bool HasRendererSortModeType;
|
||||
public bool HasFilteringSettingsType;
|
||||
public bool HasSortingSettingsType;
|
||||
@@ -352,6 +353,9 @@ namespace Gameplay
|
||||
HasRendererListType =
|
||||
contextType.Assembly.GetType(
|
||||
"XCEngine.Rendering.RendererListType") != null;
|
||||
HasRenderQueueRangeType =
|
||||
contextType.Assembly.GetType(
|
||||
"XCEngine.Rendering.RenderQueueRange") != null;
|
||||
HasRendererSortModeType =
|
||||
contextType.Assembly.GetType(
|
||||
"XCEngine.Rendering.RendererSortMode") != null;
|
||||
|
||||
@@ -14,6 +14,9 @@ namespace XCEngine.Rendering.Universal
|
||||
SceneRenderPhase.Opaque;
|
||||
public RendererListType rendererListType =
|
||||
RendererListType.Opaque;
|
||||
public bool overrideRenderQueueRange;
|
||||
public RenderQueueRange renderQueueRange =
|
||||
RenderQueueRange.Opaque;
|
||||
public bool overrideFilteringSettings;
|
||||
public FilteringSettings filteringSettings;
|
||||
public bool overrideSortingSettings;
|
||||
@@ -73,6 +76,12 @@ namespace XCEngine.Rendering.Universal
|
||||
filteringSettings;
|
||||
}
|
||||
|
||||
if (overrideRenderQueueRange)
|
||||
{
|
||||
rendererListDesc.filtering.renderQueueRange =
|
||||
renderQueueRange;
|
||||
}
|
||||
|
||||
if (overrideSortingSettings)
|
||||
{
|
||||
rendererListDesc.sorting =
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -139,6 +139,9 @@ namespace ProjectScripts
|
||||
RenderPassEvent.RenderOpaques,
|
||||
scenePhase =
|
||||
SceneRenderPhase.Opaque,
|
||||
overrideRenderQueueRange = true,
|
||||
renderQueueRange =
|
||||
RenderQueueRange.Opaque,
|
||||
rendererListType =
|
||||
RendererListType.Opaque
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user