Exemple #1
0
        public color MultigridReduce(Action <Texture2D, RenderTarget2D> ReductionShader, bool Debug = false)
        {
            int n     = Multigrid[0].Width;
            int level = 0;

            while (n >= 2)
            {
                ReductionShader(Multigrid[level], Multigrid[level + 1]);

                if (Debug)
                {
                    Console.WriteLine($"Did multigrid reduce from level {level} to level {level + 1}, n == {n}");
                    Multigrid[level].CheckForNonZero();
                    var result = Multigrid[level + 1].CheckForNonZero();

                    if (n == 2 && result)
                    {
                        Console.WriteLine("Made it to the end of the line!");
                    }
                }

                n /= 2;
                level++;
            }
            GraphicsDevice.SetRenderTarget(null);

            Multigrid.Last().GetData(ReducedData);
            return((color)ReducedData[0]);
        }