public async void AnimateMandelbrot() { // Target information float offsetX = -0.02f; float offsetY = 0.00562f; for (int i = 0; i < 500; i++) { if (_disposing || !MandelbrotInstance.IsActive) { break; } // Set the next areaView size areaView[0] = areaView[0] * 0.98f + offsetX; areaView[1] = areaView[1] * 0.98f + offsetX; areaView[2] = areaView[2] * 0.98f + offsetY; areaView[3] = areaView[3] * 0.98f + offsetY; // Generate the next frame of this animation. RestartWatch(); int[] data = await MandelbrotInstance.CalculateMandelbrot(areaView[0], areaView[1], areaView[2], areaView[3]); // ILGPU-CPU-Mode if (data == null || _disposing) { break; } ExecutionsDetails2 = ElapsedTime($"IL Run - {DeviceName}"); // Render the generated frame to the canvas. RestartWatch(); await MandelbrotExtensions.Draw(Canvas2D, data, displayPort[0], displayPort[1], maxIterations, Color.Blue); StateHasChanged(); ExecutionsDetails3 = ElapsedTime("Web Server Render"); } }
private async void CanvasInitComplete(BasicCanvas basicCanvas) { DeviceName = MandelbrotInstance.AcceleratorName(); displayPort[0] = Canvas2D.Width; displayPort[1] = Canvas2D.Height; areaView[0] = -2.0f; areaView[1] = 1.0f; areaView[2] = -1.0f; areaView[3] = 1.0f; maxIterations = 1000; if (_disposing || !MandelbrotInstance.IsActive) { return; } RestartWatch(); MandelbrotInstance.SetDisplay(Canvas2D.Width, Canvas2D.Height); ExecutionsDetails1 = ElapsedTime($"IL Compile - {DeviceName}"); if (_disposing || !MandelbrotInstance.IsActive) { return; } RestartWatch(); int[] data = await MandelbrotInstance.CalculateMandelbrot(areaView[0], areaView[1], areaView[2], areaView[3]); // ILGPU-CPU-Mode ExecutionsDetails2 = ElapsedTime($"IL Run - {DeviceName}"); if (data == null || _disposing) { return; } await MandelbrotExtensions.Draw(Canvas2D, data, displayPort[0], displayPort[1], maxIterations, Color.Blue); DisabledButtons = false; StateHasChanged(); // note StateHasChanged will force an update of controls on our razor page. }