public async Task RenderSceneToBitmapThreaded()

in System.Numerics/SIMD/RayTracer/Camera.cs [89:140]


        public async Task<Bitmap> RenderSceneToBitmapThreaded(Scene scene, int width = -1, int height = -1)
        {
            if (width == -1 || height == -1)
            {
                width = renderSize.Width;
                height = renderSize.Height;
            }
            else
            {
                renderSize = new Size(width, height);
            }

            var before = DateTime.UtcNow;
            Bitmap bitmap = new Bitmap(width, height);

            List<Task> tasks = new List<Task>();

            Color[,] colors = new Color[width, height];

            for (int xCounter = 0; xCounter < width; xCounter++)
            {
                var x = xCounter;
                var task = Task.Run(() =>
                    {
                        for (int yCounter = 0; yCounter < height; yCounter++)
                        {
                            var y = yCounter;
                            var viewPortX = ((2 * x) / (float)width) - 1;
                            var viewPortY = ((2 * y) / (float)height) - 1;
                            var color = TraceRayAgainstScene(GetRay(viewPortX, viewPortY), scene);
                            colors[x, y] = color;
                        }
                    });

                tasks.Add(task);
            }

            await Task.WhenAll(tasks);

            // Copy all pixel data into bitmap.
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    bitmap.SetPixel(x, height - y - 1, colors[x, y]);
                }
            }

            var after = DateTime.UtcNow;
            System.Diagnostics.Debug.WriteLine("Total render time: " + (after - before).TotalMilliseconds + " ms");
            return bitmap;
        }