Ei kuvausta
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DecalPreviewPass.cs 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine.Experimental.Rendering;
  4. using UnityEngine.Rendering.RenderGraphModule;
  5. namespace UnityEngine.Rendering.Universal
  6. {
  7. internal class DecalPreviewPass : ScriptableRenderPass
  8. {
  9. private FilteringSettings m_FilteringSettings;
  10. private List<ShaderTagId> m_ShaderTagIdList;
  11. private ProfilingSampler m_ProfilingSampler;
  12. private PassData m_PassData;
  13. public DecalPreviewPass()
  14. {
  15. renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
  16. ConfigureInput(ScriptableRenderPassInput.Depth); // Require depth
  17. m_ProfilingSampler = new ProfilingSampler("Decal Preview Render");
  18. m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, -1);
  19. m_ShaderTagIdList = new List<ShaderTagId>();
  20. m_ShaderTagIdList.Add(new ShaderTagId(DecalShaderPassNames.DecalScreenSpaceMesh));
  21. m_PassData = new PassData();
  22. }
  23. [Obsolete(DeprecationMessage.CompatibilityScriptingAPIObsolete, false)]
  24. public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  25. {
  26. UniversalRenderingData universalRenderingData = renderingData.frameData.Get<UniversalRenderingData>();
  27. UniversalCameraData cameraData = renderingData.frameData.Get<UniversalCameraData>();
  28. UniversalLightData lightData = renderingData.frameData.Get<UniversalLightData>();
  29. SortingCriteria sortingCriteria = cameraData.defaultOpaqueSortFlags;
  30. DrawingSettings drawingSettings = RenderingUtils.CreateDrawingSettings(m_ShaderTagIdList, universalRenderingData, cameraData, lightData, sortingCriteria);
  31. var param = new RendererListParams(universalRenderingData.cullResults, drawingSettings, m_FilteringSettings);
  32. var rendererList = context.CreateRendererList(ref param);
  33. using (new ProfilingScope(universalRenderingData.commandBuffer, m_ProfilingSampler))
  34. {
  35. ExecutePass(CommandBufferHelpers.GetRasterCommandBuffer(universalRenderingData.commandBuffer), m_PassData, rendererList);
  36. }
  37. }
  38. private static void ExecutePass(RasterCommandBuffer cmd, PassData passData, RendererList rendererList)
  39. {
  40. {
  41. cmd.DrawRendererList(rendererList);
  42. }
  43. }
  44. private class PassData
  45. {
  46. internal RendererListHandle rendererList;
  47. }
  48. public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
  49. {
  50. using (var builder = renderGraph.AddRasterRenderPass<PassData>("Decal Preview Pass", out var passData, m_ProfilingSampler))
  51. {
  52. UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
  53. UniversalRenderingData renderingData = frameData.Get<UniversalRenderingData>();
  54. UniversalCameraData cameraData = frameData.Get<UniversalCameraData>();
  55. UniversalLightData lightData = frameData.Get<UniversalLightData>();
  56. UniversalRenderer renderer = (UniversalRenderer)cameraData.renderer;
  57. builder.SetRenderAttachment(resourceData.activeColorTexture, 0, AccessFlags.Write);
  58. builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture, AccessFlags.Read);
  59. SortingCriteria sortingCriteria = cameraData.defaultOpaqueSortFlags;
  60. DrawingSettings drawingSettings = RenderingUtils.CreateDrawingSettings(m_ShaderTagIdList, renderingData, cameraData, lightData, sortingCriteria);
  61. var param = new RendererListParams(renderingData.cullResults, drawingSettings, m_FilteringSettings);
  62. passData.rendererList = renderGraph.CreateRendererList(param);
  63. builder.UseRendererList(passData.rendererList);
  64. builder.SetRenderFunc((PassData data, RasterGraphContext rgContext) =>
  65. {
  66. ExecutePass(rgContext.cmd, data, data.rendererList);
  67. });
  68. }
  69. }
  70. }
  71. }