Cómo hacer que mi motor de juego sea más rápido (GDI +, C #)

Actualmente estoy construyendo un motor de juego 2D en C #, usando GDI. Sé que hay mejores alternativas a GDI, pero también estoy tan inmerso en el proyecto que no puedo retroceder ahora.

Por lo tanto, actualmente tengo un motor de gráficos, que representa una parte de un mapa de bits, dependiendo de la posición de mis cámaras y el tamaño de las ventanas, lo que me ha dado un gran aumento de rendimiento. ¡Excelente!

Sin embargo, he notado que si coloco un montón de objetos del juego, en la misma posición, obtengo la misma velocidad de cuadros en comparación con si coloco los objetos en diferentes posiciones.

Entonces, ¿tal vez el motor de gráficos está renderizando partes del mapa de bits que no necesitan ser renderizadas? y si este es el caso, ¿cómo lo soluciono?

Creo que el código no es realmente necesario, pero solo para asegurarme de que esto es lo que hace mi motor de gráficos durante mi ciclo de juego principal

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);
        }
}
}

Respuestas a la pregunta(0)

Su respuesta a la pregunta