< Summary

Class:GaussianBlurHandler
Assembly:UIBlur
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/UI/Blur/GaussianBlurHandler.cs
Covered lines:10
Uncovered lines:41
Coverable lines:51
Total lines:121
Line coverage:19.6% (10 of 51)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:11
Method coverage:18.1% (2 of 11)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
GaussianBlurSettings()0%2100%
GaussianBlurHandler()0%2100%
Setup(...)0%2100%
GaussianBlurPass(...)0%110100%
Configure(...)0%2100%
Execute(...)0%6200%
FrameCleanup(...)0%2100%
Create()0%110100%
AddRenderPasses(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/UI/Blur/GaussianBlurHandler.cs

#LineLine coverage
 1using UnityEngine;
 2using UnityEngine.Rendering;
 3using UnityEngine.Rendering.Universal;
 4
 5public class GaussianBlurHandler : ScriptableRendererFeature
 6{
 7    [System.Serializable]
 8    public class GaussianBlurSettings
 9    {
 010        public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
 11        public Material blurMaterial = null;
 12
 13        [Range(1,25)]
 014        public int blurPasses = 1;
 15
 16        [Range(1, 10)]
 017        public int downsample = 1;
 18
 019        public string targetName = "_blurTexture";
 20    }
 21
 22    [SerializeField]
 023    public GaussianBlurSettings settings = new GaussianBlurSettings();
 24    public class GaussianBlurPass : ScriptableRenderPass
 25    {
 26        public Material blurMat;
 27        public int passes;
 28        public int downsample;
 29        public string targetName;
 30        string profilerTag;
 31
 32        int tmpID1;
 33        int tmpID2;
 34
 35        RenderTargetIdentifier tmpRT1;
 36        RenderTargetIdentifier tmpRT2;
 37
 038        private ScriptableRenderer renderer {get; set;}
 39
 40        public void Setup(ScriptableRenderer renderer)
 41        {
 042            this.renderer = renderer;
 043        }
 44
 245        public GaussianBlurPass(string profilerTag)
 46        {
 247            this.profilerTag = profilerTag;
 248        }
 49
 50        public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
 51        {
 052            var width = cameraTextureDescriptor.width / downsample;
 053            var height = cameraTextureDescriptor.height / downsample;
 54
 055            tmpID1 = Shader.PropertyToID("tmpBlurRT1");
 056            tmpID2 = Shader.PropertyToID("tmpBlurRT2");
 57
 058            cmd.GetTemporaryRT(tmpID1, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
 059            cmd.GetTemporaryRT(tmpID2, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
 60
 061            tmpRT1 = new RenderTargetIdentifier(tmpID1);
 062            tmpRT2 = new RenderTargetIdentifier(tmpID2);
 63
 064            ConfigureTarget(tmpRT1);
 065            ConfigureTarget(tmpRT2);
 066        }
 67
 68        public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
 69        {
 070            CommandBuffer cmd = CommandBufferPool.Get(profilerTag);
 71
 072            RenderTextureDescriptor opaqueDesc = renderingData.cameraData.cameraTargetDescriptor;
 073            opaqueDesc.depthBufferBits = 0;
 74
 75            //first pass
 076            cmd.SetGlobalFloat("_offset", 1.5f);
 077            cmd.Blit(renderer.cameraColorTarget, tmpRT1, blurMat);
 78
 079            for (int i = 1; i < passes - 1; i++)
 80            {
 081                cmd.SetGlobalFloat("_offset", 0.5f + i);
 082                cmd.Blit(tmpRT1, tmpRT2, blurMat);
 83
 084                var RTtmp = tmpRT1;
 085                tmpRT1 = tmpRT2;
 086                tmpRT2 = RTtmp;
 87            }
 88
 89            //final pass
 090            cmd.SetGlobalFloat("_offset", 0.5f + passes - 1);
 091            cmd.Blit(tmpRT1, tmpRT2, blurMat);
 092            cmd.SetGlobalTexture(targetName, tmpRT2);
 93
 094            context.ExecuteCommandBuffer(cmd);
 095            cmd.Clear();
 096            CommandBufferPool.Release(cmd);
 097        }
 98
 99        public override void FrameCleanup(CommandBuffer cmd)
 100        {
 0101        }
 102    }
 103
 104    GaussianBlurPass scriptablePass;
 105
 106    public override void Create()
 107    {
 2108        scriptablePass = new GaussianBlurPass("GaussianBlur");
 2109        scriptablePass.blurMat = settings.blurMaterial;
 2110        scriptablePass.passes = settings.blurPasses;
 2111        scriptablePass.downsample = settings.downsample;
 2112        scriptablePass.targetName = settings.targetName;
 2113        scriptablePass.renderPassEvent = settings.renderPassEvent;
 2114    }
 115
 116    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
 117    {
 0118        scriptablePass.Setup(renderer);
 0119        renderer.EnqueuePass(scriptablePass);
 0120    }
 121}