Advertisement
Guest User

Untitled

a guest
Oct 17th, 2024
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.99 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Rendering;
  4. using UnityEngine.Rendering.Universal;
  5.  
  6. [CreateAssetMenu]
  7. public class GammaUIFix : ScriptableRendererFeature
  8. {
  9.     public Material material;
  10.    
  11.     public GammaUIFix()
  12.     {
  13.     }
  14.  
  15.     public override void Create()
  16.     {
  17.     }
  18.    
  19.     public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
  20.     {
  21.         DrawUIIntoRTPass d = new DrawUIIntoRTPass(RenderPassEvent.BeforeRenderingTransparents);
  22.         BlitPass b = new BlitPass(RenderPassEvent.AfterRenderingTransparents, material);
  23.        
  24.         renderer.EnqueuePass(d);
  25.         renderer.EnqueuePass(b);
  26.     }
  27.  
  28.     //-------------------------------------------------------------------------
  29.  
  30.     class DrawUIIntoRTPass : ScriptableRenderPass
  31.     {
  32.         //The temporary UI texture
  33.         public static int m_uiRTid = Shader.PropertyToID("_MainTex");
  34.         public static RenderTargetIdentifier m_uiRT = new RenderTargetIdentifier(m_uiRTid);
  35.  
  36.         public DrawUIIntoRTPass(RenderPassEvent renderPassEvent)
  37.         {
  38.             this.renderPassEvent = renderPassEvent;
  39.         }
  40.  
  41.         public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescripor)
  42.         {
  43.             RenderTextureDescriptor descriptor = cameraTextureDescripor;
  44.             descriptor.colorFormat = RenderTextureFormat.Default;
  45.             cmd.GetTemporaryRT(m_uiRTid, descriptor);
  46.         }
  47.  
  48.         public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  49.         {
  50.             CommandBuffer cmd = CommandBufferPool.Get("Draw UI Into RT Pass");
  51.            
  52.             cmd.SetRenderTarget(m_uiRT);
  53.             cmd.ClearRenderTarget(true,true,Color.clear);
  54.  
  55.             context.ExecuteCommandBuffer(cmd);
  56.             CommandBufferPool.Release(cmd);
  57.         }
  58.  
  59.         public override void FrameCleanup(CommandBuffer cmd)
  60.         {
  61.             if (cmd == null)
  62.                 throw new ArgumentNullException("cmd");
  63.  
  64.             base.FrameCleanup(cmd);
  65.         }
  66.     }
  67.  
  68.     //-------------------------------------------------------------------------
  69.  
  70.     class BlitPass : ScriptableRenderPass
  71.     {
  72.         Material material;
  73.  
  74.         public BlitPass(RenderPassEvent renderPassEvent, Material mat)
  75.         {
  76.             this.renderPassEvent = renderPassEvent;
  77.             this.material = mat;
  78.         }
  79.  
  80.         public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  81.         {
  82.             CommandBuffer cmd = CommandBufferPool.Get("Blit Pass");
  83.            
  84.             cmd.Blit(DrawUIIntoRTPass.m_uiRT,renderingData.cameraData.renderer.cameraColorTargetHandle,material);
  85.  
  86.             context.ExecuteCommandBuffer(cmd);
  87.             CommandBufferPool.Release(cmd);
  88.         }
  89.  
  90.         public override void FrameCleanup(CommandBuffer cmd)
  91.         {
  92.             if (cmd == null)
  93.                 throw new ArgumentNullException("cmd");
  94.  
  95.             cmd.ReleaseTemporaryRT(DrawUIIntoRTPass.m_uiRTid);
  96.  
  97.             base.FrameCleanup(cmd);
  98.         }
  99.     }
  100.  
  101.     //-------------------------------------------------------------------------
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement