protected override void Draw(GameTime gameTime) { try { smartFPS.Update((float)gameTime.ElapsedGameTime.TotalSeconds); GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin( SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, Camera.GetTransformation(GraphicsDevice) ); spriteBatchUi.Begin( SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, CameraUI.GetTransformation(GraphicsDevice) ); spriteBatch.DrawString( SpriteFont , $@"FPS: {smartFPS.AverageFramesPerSecond} LOG: {string.Join("\n", LOG)}" , new Vector2(500, 2000) , Color.Black , 0 , Vector2.Zero , 25 , SpriteEffects.None , 0); for (var i = 0; i < GameLoop.GameObjects.Count; i++) { var obj = GameLoop.GameObjects[i]; foreach (var frame in obj.Animation.GetFrame()) { (obj.Animation.RenderOnUiLayer ? spriteBatchUi : spriteBatch).Draw( texture: Sprites[frame.Texture] , destinationRectangle: new Rectangle( (frame.Anchor.Position + frame.Offset).ToPoint() , new Point(frame.Width, frame.Height) ) , sourceRectangle: frame.SourceRectangle , color: frame.Color , rotation: frame.Rotation , origin: frame.RotationAnchor , effects: frame.Flipped ? SpriteEffects.FlipHorizontally : SpriteEffects.None , layerDepth: 0f ); } } while (RectanglesToRenderUI.Count > 0) { var rectangle = RectanglesToRenderUI.Dequeue(); DrawBorder(rectangle, 2, Color.Red, spriteBatchUi); } while (RectanglesToRender.Count > 0) { var rectangle = RectanglesToRender.Dequeue(); DrawBorder(rectangle, 50, Color.Green, spriteBatch); } spriteBatch.End(); spriteBatchUi.End(); } catch //(System.Exception ex) { } base.Draw(gameTime); }