Files
XCEngine/managed/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalRenderPipelineAsset.cs
ssdfasd bfc4b90ce6 refactor(srp): bridge universal shadow planning settings into managed asset
- expose directional shadow planning settings on camera request context\n- let the managed universal asset override planner defaults\n- recompute native directional shadow requests only when settings change
2026-04-21 02:19:30 +08:00

92 lines
2.6 KiB
C#

using XCEngine;
using XCEngine.Rendering;
namespace XCEngine.Rendering.Universal
{
public class UniversalRenderPipelineAsset
: RendererBackedRenderPipelineAsset
{
public UniversalShadowSettings shadows;
public UniversalRenderPipelineAsset()
{
shadows =
UniversalShadowSettings.CreateDefault();
}
protected override ScriptableRenderPipeline
CreateRendererBackedPipeline()
{
return new UniversalRenderPipeline(this);
}
protected override void ConfigureRendererCameraRequest(
RendererCameraRequestContext context)
{
if (context == null)
{
return;
}
UniversalShadowSettings shadowSettings =
GetShadowSettingsInstance();
if (!shadowSettings.supportsMainLightShadows)
{
if (context.hasDirectionalShadow)
{
context.ClearDirectionalShadow();
}
return;
}
DirectionalShadowPlanningSettings desiredPlanningSettings =
shadowSettings.mainLightPlanningSettings;
if (!context.directionalShadowPlanningSettings
.Equals(desiredPlanningSettings))
{
context.directionalShadowPlanningSettings =
desiredPlanningSettings;
}
}
protected override ScriptableRendererData
CreateDefaultRendererData()
{
return new UniversalRendererData();
}
protected override int ResolveRendererIndex(
CameraRenderRequestContext context)
{
Camera camera =
context != null
? context.camera
: null;
if (camera != null)
{
UniversalAdditionalCameraData additionalCameraData =
camera.GetComponent<UniversalAdditionalCameraData>();
if (additionalCameraData != null &&
additionalCameraData.hasRendererOverride)
{
return additionalCameraData.rendererIndex;
}
}
return base.ResolveRendererIndex(context);
}
private UniversalShadowSettings GetShadowSettingsInstance()
{
if (shadows == null)
{
shadows =
UniversalShadowSettings.CreateDefault();
}
return shadows;
}
}
}