testss
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
using System;
|
||||
|
||||
namespace UnityEngine.Rendering.Universal.Internal
|
||||
{
|
||||
/// <summary>
|
||||
/// Render all objects that have a 'DepthOnly' pass into the given depth buffer.
|
||||
///
|
||||
/// You can use this pass to prime a depth buffer for subsequent rendering.
|
||||
/// Use it as a z-prepass, or use it to generate a depth buffer.
|
||||
/// </summary>
|
||||
public class DepthOnlyPass : ScriptableRenderPass
|
||||
{
|
||||
int kDepthBufferBits = 32;
|
||||
|
||||
private RenderTargetHandle depthAttachmentHandle { get; set; }
|
||||
internal RenderTextureDescriptor descriptor { get; private set; }
|
||||
|
||||
FilteringSettings m_FilteringSettings;
|
||||
ShaderTagId m_ShaderTagId = new ShaderTagId("DepthOnly");
|
||||
|
||||
/// <summary>
|
||||
/// Create the DepthOnlyPass
|
||||
/// </summary>
|
||||
public DepthOnlyPass(RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask)
|
||||
{
|
||||
base.profilingSampler = new ProfilingSampler(nameof(DepthOnlyPass));
|
||||
m_FilteringSettings = new FilteringSettings(renderQueueRange, layerMask);
|
||||
renderPassEvent = evt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configure the pass
|
||||
/// </summary>
|
||||
public void Setup(
|
||||
RenderTextureDescriptor baseDescriptor,
|
||||
RenderTargetHandle depthAttachmentHandle)
|
||||
{
|
||||
this.depthAttachmentHandle = depthAttachmentHandle;
|
||||
baseDescriptor.colorFormat = RenderTextureFormat.Depth;
|
||||
baseDescriptor.depthBufferBits = kDepthBufferBits;
|
||||
|
||||
// Depth-Only pass don't use MSAA
|
||||
baseDescriptor.msaaSamples = 1;
|
||||
descriptor = baseDescriptor;
|
||||
}
|
||||
|
||||
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
|
||||
{
|
||||
cmd.GetTemporaryRT(depthAttachmentHandle.id, descriptor, FilterMode.Point);
|
||||
ConfigureTarget(new RenderTargetIdentifier(depthAttachmentHandle.Identifier(), 0, CubemapFace.Unknown, -1));
|
||||
ConfigureClear(ClearFlag.All, Color.black);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||||
{
|
||||
// NOTE: Do NOT mix ProfilingScope with named CommandBuffers i.e. CommandBufferPool.Get("name").
|
||||
// Currently there's an issue which results in mismatched markers.
|
||||
CommandBuffer cmd = CommandBufferPool.Get();
|
||||
using (new ProfilingScope(cmd, ProfilingSampler.Get(URPProfileId.DepthPrepass)))
|
||||
{
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
cmd.Clear();
|
||||
|
||||
var sortFlags = renderingData.cameraData.defaultOpaqueSortFlags;
|
||||
var drawSettings = CreateDrawingSettings(m_ShaderTagId, ref renderingData, sortFlags);
|
||||
drawSettings.perObjectData = PerObjectData.None;
|
||||
|
||||
context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings);
|
||||
}
|
||||
context.ExecuteCommandBuffer(cmd);
|
||||
CommandBufferPool.Release(cmd);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void OnCameraCleanup(CommandBuffer cmd)
|
||||
{
|
||||
if (cmd == null)
|
||||
throw new ArgumentNullException("cmd");
|
||||
|
||||
if (depthAttachmentHandle != RenderTargetHandle.CameraTarget)
|
||||
{
|
||||
cmd.ReleaseTemporaryRT(depthAttachmentHandle.id);
|
||||
depthAttachmentHandle = RenderTargetHandle.CameraTarget;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user