From af45671eb7ef7300c5b6f0a5a5df1fb64f418514 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Fri, 28 May 2021 18:24:07 +1000 Subject: [PATCH] Extract helper method RunFilterChainSteps from UpdateSourceDrawingWork --- .../DisplayManager/DisplayManager.cs | 77 ++++++++----------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs index be81a669d5..bf182f1b42 100644 --- a/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs +++ b/src/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs @@ -1012,51 +1012,7 @@ namespace BizHawk.Client.EmuHawk _currentFilterProgram.RenderTargetProvider = new DisplayManagerRenderTargetProvider(size => _shaderChainFrugalizers[rtCounter++].Get(size)); _gl.BeginScene(); - - // run filter chain - Texture2d texCurr = null; - RenderTarget rtCurr = null; - bool inFinalTarget = false; - foreach (var step in _currentFilterProgram.Program) - { - switch (step.Type) - { - case FilterProgram.ProgramStepType.Run: - { - int fi = (int)step.Args; - var f = _currentFilterProgram.Filters[fi]; - f.SetInput(texCurr); - f.Run(); - var orec = f.FindOutput(); - if (orec != null) - { - if (orec.SurfaceDisposition == SurfaceDisposition.Texture) - { - texCurr = f.GetOutput(); - rtCurr = null; - } - } - break; - } - case FilterProgram.ProgramStepType.NewTarget: - { - var size = (Size)step.Args; - rtCurr = _shaderChainFrugalizers[rtCounter++].Get(size); - rtCurr.Bind(); - _currentFilterProgram.CurrRenderTarget = rtCurr; - break; - } - case FilterProgram.ProgramStepType.FinalTarget: - { - inFinalTarget = true; - rtCurr = null; - _currentFilterProgram.CurrRenderTarget = null; - _gl.BindRenderTarget(null); - break; - } - } - } - + RunFilterChainSteps(ref rtCounter, out var rtCurr, out var inFinalTarget); _gl.EndScene(); if (job.Offscreen) @@ -1081,6 +1037,37 @@ namespace BizHawk.Client.EmuHawk // presentationPanel.GraphicsControl.End(); } + private void RunFilterChainSteps(ref int rtCounter, out RenderTarget rtCurr, out bool inFinalTarget) + { + Texture2d texCurr = null; + rtCurr = null; + inFinalTarget = false; + foreach (var step in _currentFilterProgram.Program) switch (step.Type) + { + case FilterProgram.ProgramStepType.Run: + var f = _currentFilterProgram.Filters[(int) step.Args]; + f.SetInput(texCurr); + f.Run(); + if (f.FindOutput() is { SurfaceDisposition: SurfaceDisposition.Texture }) + { + texCurr = f.GetOutput(); + rtCurr = null; + } + break; + case FilterProgram.ProgramStepType.NewTarget: + _currentFilterProgram.CurrRenderTarget = rtCurr = _shaderChainFrugalizers[rtCounter++].Get((Size) step.Args); + rtCurr.Bind(); + break; + case FilterProgram.ProgramStepType.FinalTarget: + _currentFilterProgram.CurrRenderTarget = rtCurr = null; + _gl.BindRenderTarget(rtCurr); + inFinalTarget = true; + break; + default: + throw new Exception(); + } + } + private void LoadCustomFont(Stream fontStream) { IntPtr data = Marshal.AllocCoTaskMem((int)fontStream.Length);