< Summary

Class:GaussianBlurHandler
Assembly:UIBlur
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/UI/Blur/GaussianBlurHandler.cs
Covered lines:10
Uncovered lines:42
Coverable lines:52
Total lines:125
Line coverage:19.2% (10 of 52)
Covered branches:0
Total branches:0

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 System.Collections;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.Rendering;
 5using UnityEngine.Rendering.Universal;
 6
 7public class GaussianBlurHandler : ScriptableRendererFeature
 8{
 9    [System.Serializable]
 10    public class GaussianBlurSettings
 11    {
 012        public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
 13        public Material blurMaterial = null;
 14
 15        [Range(1,25)]
 016        public int blurPasses = 1;
 17
 18        [Range(1, 10)]
 019        public int downsample = 1;
 20
 021        public string targetName = "_blurTexture";
 22    }
 23
 24    [SerializeField]
 025    public GaussianBlurSettings settings = new GaussianBlurSettings();
 26    public class GaussianBlurPass : ScriptableRenderPass
 27    {
 28        public Material blurMat;
 29        public int passes;
 30        public int downsample;
 31        public string targetName;
 32        string profilerTag;
 33
 34        int tmpID1;
 35        int tmpID2;
 36
 37        RenderTargetIdentifier tmpRT1;
 38        RenderTargetIdentifier tmpRT2;
 39
 040        private RenderTargetIdentifier source {get; set;}
 41
 42        public void Setup(RenderTargetIdentifier source)
 43        {
 044            this.source = source;
 045        }
 46
 247        public GaussianBlurPass(string profilerTag)
 48        {
 249            this.profilerTag = profilerTag;
 250        }
 51
 52        public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
 53        {
 054            var width = cameraTextureDescriptor.width / downsample;
 055            var height = cameraTextureDescriptor.height / downsample;
 56
 057            tmpID1 = Shader.PropertyToID("tmpBlurRT1");
 058            tmpID2 = Shader.PropertyToID("tmpBlurRT2");
 59
 060            cmd.GetTemporaryRT(tmpID1, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
 061            cmd.GetTemporaryRT(tmpID2, width, height, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);
 62
 063            tmpRT1 = new RenderTargetIdentifier(tmpID1);
 064            tmpRT2 = new RenderTargetIdentifier(tmpID2);
 65
 066            ConfigureTarget(tmpRT1);
 067            ConfigureTarget(tmpRT2);
 068        }
 69
 70        public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
 71        {
 072            CommandBuffer cmd = CommandBufferPool.Get(profilerTag);
 73
 074            RenderTextureDescriptor opaqueDesc = renderingData.cameraData.cameraTargetDescriptor;
 075            opaqueDesc.depthBufferBits = 0;
 76
 77
 78            //first pass
 079            cmd.SetGlobalFloat("_offset", 1.5f);
 080            cmd.Blit(source, tmpRT1, blurMat);
 81
 082            for (int i = 1; i < passes - 1; i++)
 83            {
 084                cmd.SetGlobalFloat("_offset", 0.5f + i);
 085                cmd.Blit(tmpRT1, tmpRT2, blurMat);
 86
 087                var RTtmp = tmpRT1;
 088                tmpRT1 = tmpRT2;
 089                tmpRT2 = RTtmp;
 90            }
 91
 92            //final pass
 093            cmd.SetGlobalFloat("_offset", 0.5f + passes - 1);
 094            cmd.Blit(tmpRT1, tmpRT2, blurMat);
 095            cmd.SetGlobalTexture(targetName, tmpRT2);
 96
 097            context.ExecuteCommandBuffer(cmd);
 098            cmd.Clear();
 099            CommandBufferPool.Release(cmd);
 0100        }
 101
 102        public override void FrameCleanup(CommandBuffer cmd)
 103        {
 0104        }
 105    }
 106
 107    GaussianBlurPass scriptablePass;
 108
 109    public override void Create()
 110    {
 2111        scriptablePass = new GaussianBlurPass("GaussianBlur");
 2112        scriptablePass.blurMat = settings.blurMaterial;
 2113        scriptablePass.passes = settings.blurPasses;
 2114        scriptablePass.downsample = settings.downsample;
 2115        scriptablePass.targetName = settings.targetName;
 2116        scriptablePass.renderPassEvent = settings.renderPassEvent;
 2117    }
 118
 119    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
 120    {
 0121        var src = renderer.cameraColorTarget;
 0122        scriptablePass.Setup(src);
 0123        renderer.EnqueuePass(scriptablePass);
 0124    }
 125}