private void OnRenderControlPaint(object sender, PaintEventArgs e) { if (!_semaphore.WaitOne(0, false)) { return; } try { lock (_semaphore) { RenderContainer.DepthBuffer.Clear(); RenderContainer.BackBuffer.Clear(); Rectangle clipRectangle = new Rectangle(e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle.Width, e.ClipRectangle.Height); DrawSprites?.Invoke(RenderContainer.Device11.Device, RenderContainer.SpriteBatch, clipRectangle); DrawPrimitives?.Invoke(RenderContainer.Device11.Device, RenderContainer.BackBuffer.Target2D, clipRectangle); RenderContainer.Device11.SwapChain.Present(1, PresentFlags.None); } } catch (Exception ex) { Log.Error(ex); } finally { _semaphore.Release(); } }
public void Run() { var entityManager = new EntityManager(); CreateMap(entityManager, new Vector2(50, 50), new Vector2(16, 16)); CreateCursor(entityManager, new Vector2(25, 25), new Vector2(16, 16)); var calculateLocalToWorldMatrix = new CalculateLocalToWorldMatrix(entityManager); var drawRectangle = new DrawSprites(entityManager, _graphicsDevice, _window); var setPlayerInput = new SetPlayerInput(entityManager); var moveCursour = new MoveCursorToCorrectPosition(entityManager); long previousFrameTicks = 0; var sw = new Stopwatch(); sw.Start(); var frames = 0; while (_window.Exists) { ++frames; var currentFrameTicks = sw.ElapsedTicks; var deltaSeconds = (currentFrameTicks - previousFrameTicks) / (double)Stopwatch.Frequency; previousFrameTicks = currentFrameTicks; Input.UpdateFrameInput(_window.PumpEvents()); setPlayerInput.Update(); moveCursour.Update(); calculateLocalToWorldMatrix.Update(); drawRectangle.Update(); } sw.Stop(); drawRectangle.Dispose(); Console.WriteLine(frames); Console.WriteLine(sw.ElapsedMilliseconds / 1000f); Console.WriteLine(frames / (sw.ElapsedMilliseconds / 1000f)); }