using XCEngine; using XCEngine.Rendering; using XCEngine.Rendering.Universal; namespace ProjectScripts { public sealed class ProjectPostProcessColorScalePass : ScriptableRenderPass { public ProjectPostProcessColorScalePass() { renderPassEvent = RenderPassEvent.BeforeRenderingPostProcessing; } protected override bool RecordRenderGraph( ScriptableRenderContext context, RenderingData renderingData) { return context != null && renderingData != null && renderingData.isPostProcessStage && RecordColorScaleFullscreenPass( context, new Vector4(1.15f, 0.95f, 1.05f, 1.0f)); } } public sealed class ProjectPostProcessColorScaleFeature : ScriptableRendererFeature { private ProjectPostProcessColorScalePass m_pass; public override void Create() { m_pass = new ProjectPostProcessColorScalePass(); } public override void ConfigureCameraFramePlan( ScriptableRenderPipelinePlanningContext context) { if (context == null || context.IsStageRequested( CameraFrameStage.PostProcess)) { return; } context.RequestFullscreenStage( CameraFrameStage.PostProcess, CameraFrameColorSource.MainSceneColor); } public override void AddRenderPasses( ScriptableRenderer renderer, RenderingData renderingData) { if (renderer == null || renderingData == null || !renderingData.isPostProcessStage) { return; } if (m_pass == null) { Create(); } renderer.EnqueuePass(m_pass); } } public sealed class ProjectUniversalFeaturePipelineAsset : UniversalRenderPipelineAsset { public ProjectUniversalFeaturePipelineAsset() { rendererDataList = new ScriptableRendererData[] { new UniversalRendererData { rendererFeatures = new ScriptableRendererFeature[] { new ProjectPostProcessColorScaleFeature() } } }; } } }