50 lines
2.5 KiB
C#
50 lines
2.5 KiB
C#
#if MODULE_RENDER_PIPELINES_HIGH_DEFINITION
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering.HighDefinition;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Experimental.Rendering;
|
|
|
|
namespace Pathfinding.Drawing {
|
|
/// <summary>Custom High Definition Render Pipeline Render Pass for ALINE</summary>
|
|
class AlineHDRPCustomPass : CustomPass {
|
|
#if MODULE_RENDER_PIPELINES_HIGH_DEFINITION_9_0_0_OR_NEWER
|
|
bool disabledDepth = false;
|
|
|
|
protected override void Setup (ScriptableRenderContext renderContext, CommandBuffer cmd) {
|
|
this.targetColorBuffer = TargetBuffer.Camera;
|
|
this.targetDepthBuffer = TargetBuffer.Camera;
|
|
disabledDepth = false;
|
|
}
|
|
|
|
protected override void Execute (CustomPassContext context) {
|
|
UnityEngine.Profiling.Profiler.BeginSample("ALINE");
|
|
if (!disabledDepth && context.cameraColorBuffer.isMSAAEnabled != context.cameraDepthBuffer.isMSAAEnabled) {
|
|
Debug.LogWarning("A*: Cannot draw depth-tested gizmos due to limitations in Unity's high-definition render pipeline combined with MSAA. Typically this is caused by enabling Camera -> Frame Setting Overrides -> MSAA Within Forward.\n\nDepth-testing for gizmos will stay disabled until you disable this type of MSAA and recompile scripts.");
|
|
// At this point, we only get access to the MSAA depth buffer, not the resolved non-MSAA depth buffer.
|
|
// If we try to use the depth buffer, we will get an error message from Unity:
|
|
// "Color and Depth buffer MSAA flags doesn't match, no rendering will occur."
|
|
// Rendering seems to somewhat work even though that error is logged, but there are a lot of rendering artifacts.
|
|
// So we will just disable depth testing.
|
|
//
|
|
// In the HDRenderPipeline.RenderGraph.cs script, the resolved non-msaa depth buffer is accessible, and this is the one
|
|
// that Unity's own gizmos rendering code uses. However, Unity does not expose this buffer to custom render passes.
|
|
disabledDepth = true;
|
|
this.targetDepthBuffer = TargetBuffer.None;
|
|
}
|
|
DrawingManager.instance.SubmitFrame(context.hdCamera.camera, new DrawingData.CommandBufferWrapper { cmd = context.cmd }, true);
|
|
UnityEngine.Profiling.Profiler.EndSample();
|
|
}
|
|
#else
|
|
protected override void Execute (ScriptableRenderContext context, CommandBuffer cmd, HDCamera camera, CullingResults cullingResult) {
|
|
UnityEngine.Profiling.Profiler.BeginSample("ALINE");
|
|
DrawingManager.instance.SubmitFrame(camera.camera, new DrawingData.CommandBufferWrapper { cmd = cmd }, true);
|
|
UnityEngine.Profiling.Profiler.EndSample();
|
|
}
|
|
#endif
|
|
|
|
protected override void Cleanup () {
|
|
}
|
|
}
|
|
}
|
|
#endif
|