Bez popisu
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.

InvokeOnRenderObjectCallbackPass.cs 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using UnityEngine.Rendering.RenderGraphModule;
  3. namespace UnityEngine.Rendering.Universal
  4. {
  5. /// <summary>
  6. /// Invokes OnRenderObject callback
  7. /// </summary>
  8. internal class InvokeOnRenderObjectCallbackPass : ScriptableRenderPass
  9. {
  10. public InvokeOnRenderObjectCallbackPass(RenderPassEvent evt)
  11. {
  12. base.profilingSampler = new ProfilingSampler(nameof(InvokeOnRenderObjectCallbackPass));
  13. renderPassEvent = evt;
  14. //TODO: should we fix and re-enable native render pass for this pass?
  15. // Currently disabled because when the callback is empty it causes an empty Begin/End RenderPass block, which causes artifacts on Vulkan
  16. useNativeRenderPass = false;
  17. }
  18. /// <inheritdoc/>
  19. [Obsolete(DeprecationMessage.CompatibilityScriptingAPIObsolete, false)]
  20. public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  21. {
  22. renderingData.commandBuffer.InvokeOnRenderObjectCallbacks();
  23. }
  24. private class PassData
  25. {
  26. internal TextureHandle colorTarget;
  27. internal TextureHandle depthTarget;
  28. }
  29. internal void Render(RenderGraph renderGraph, TextureHandle colorTarget, TextureHandle depthTarget)
  30. {
  31. using (var builder = renderGraph.AddUnsafePass<PassData>("OnRenderObject Callback Pass", out var passData,
  32. base.profilingSampler))
  33. {
  34. passData.colorTarget = colorTarget;
  35. builder.UseTexture(colorTarget, AccessFlags.Write);
  36. passData.depthTarget = depthTarget;
  37. builder.UseTexture(depthTarget, AccessFlags.Write);
  38. builder.AllowPassCulling(false);
  39. builder.SetRenderFunc((PassData data, UnsafeGraphContext context) =>
  40. {
  41. context.cmd.InvokeOnRenderObjectCallbacks();
  42. });
  43. }
  44. }
  45. }
  46. }