Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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));
        }