1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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;
- const string m_ProfilerTag = "Depth Prepass";
- ProfilingSampler m_ProfilingSampler = new ProfilingSampler(m_ProfilerTag);
- ShaderTagId m_ShaderTagId = new ShaderTagId("DepthOnly");
- /// <summary>
- /// Create the DepthOnlyPass
- /// </summary>
- public DepthOnlyPass(RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask)
- {
- 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 Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
- {
- cmd.GetTemporaryRT(depthAttachmentHandle.id, descriptor, FilterMode.Point);
- ConfigureTarget(depthAttachmentHandle.Identifier());
- ConfigureClear(ClearFlag.All, Color.black);
- }
- /// <inheritdoc/>
- public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
- {
- CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);
- using (new ProfilingScope(cmd, m_ProfilingSampler))
- {
- context.ExecuteCommandBuffer(cmd);
- cmd.Clear();
- var sortFlags = renderingData.cameraData.defaultOpaqueSortFlags;
- var drawSettings = CreateDrawingSettings(m_ShaderTagId, ref renderingData, sortFlags);
- drawSettings.perObjectData = PerObjectData.None;
- ref CameraData cameraData = ref renderingData.cameraData;
- Camera camera = cameraData.camera;
- if (cameraData.isStereoEnabled)
- {
- context.StartMultiEye(camera, eyeIndex);
- }
- context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings);
- }
- context.ExecuteCommandBuffer(cmd);
- CommandBufferPool.Release(cmd);
- }
- /// <inheritdoc/>
- public override void FrameCleanup(CommandBuffer cmd)
- {
- if (cmd == null)
- throw new ArgumentNullException("cmd");
- if (depthAttachmentHandle != RenderTargetHandle.CameraTarget)
- {
- cmd.ReleaseTemporaryRT(depthAttachmentHandle.id);
- depthAttachmentHandle = RenderTargetHandle.CameraTarget;
- }
- }
- }
- }
|