Como acelerar meu mecanismo de jogo (GDI +, C #)

Atualmente, estou construindo um 2D Game Engine em C #, usando GDI. Sei que existem alternativas melhores para o GDI, mas também estou tão envolvido no projeto que não posso voltar agora.

Portanto, atualmente tenho um mecanismo gráfico, que renderiza uma parte de um bitmap, dependendo da posição da câmera e do tamanho da janela, o que me proporcionou um grande aumento de desempenho. Ótimo!

No entanto, notei que, se eu colocar vários objetos do jogo, na mesma posição, obterá a mesma taxa de quadros em comparação com os objetos em posições diferentes.

Então, talvez o mecanismo gráfico esteja processando partes do bitmap que não precisam ser renderizadas? e se for esse o caso, como faço para corrigir isso?

Eu acredito que o código não é realmente necessário, mas só para ter certeza, aqui está o que meu mecanismo gráfico está fazendo durante o loop principal do jogo

namespace GameEngine.Graphics
{
    public class GraphicsEngine
    {
        private Window window;
        private View view;

        private System.Drawing.Graphics frontBuffer;
        private System.Drawing.Graphics backBuffer;
        private System.Drawing.Bitmap backBufferBitmap;

        public GraphicsEngine(Window window, View view)
        {
            this.window = window;
            this.view = view;

            frontBuffer = window.CreateGraphics();
            backBufferBitmap = new Bitmap((int)view.Size.X, (int)view.Size.Y);
            backBuffer = System.Drawing.Graphics.FromImage(backBufferBitmap);

            frontBuffer.CompositingMode = CompositingMode.SourceCopy;
            frontBuffer.CompositingQuality = CompositingQuality.AssumeLinear;
            frontBuffer.SmoothingMode = SmoothingMode.None;
            frontBuffer.InterpolationMode = InterpolationMode.NearestNeighbor;  
            frontBuffer.TextRenderingHint = TextRenderingHint.SystemDefault;
            frontBuffer.PixelOffsetMode = PixelOffsetMode.HighSpeed;

            backBuffer.CompositingMode = CompositingMode.SourceOver;
            backBuffer.CompositingQuality = CompositingQuality.HighSpeed;
            backBuffer.SmoothingMode = SmoothingMode.None;
            backBuffer.InterpolationMode = InterpolationMode.Low;
            backBuffer.TextRenderingHint = TextRenderingHint.SystemDefault;
            backBuffer.PixelOffsetMode = PixelOffsetMode.Half;
        }

        public void Render()
        {
            frontBuffer.DrawImage(backBufferBitmap, new Rectangle(0, 0, window.Width, window.Height),
                                                    new Rectangle((int)view.Position.X, (int)view.Position.Y,
                                                    (int)view.Dimensions.X, (int)view.Dimensions.Y), GraphicsUnit.Pixel);
        }
}
}

questionAnswers(0)

yourAnswerToTheQuestion