Mi pregunta es: ¿por qué molestarse en usar algo como open gl, sfml, sdl cuando todo lo que tiene que hacer es simplemente asignar algo de búfer, pasar un mapa de bits y dibujarlo en la pantalla?
Corto: porque es rápido (OpenGL, DirectX).
Largo:
Puede pensar que puede hacerlo todo usted mismo. Dibuja píxeles en una pantalla. Puede escribir una pequeña biblioteca para dibujar formas, como quads o triángulos. Esto funcionará, por supuesto. Hay muchas bibliotecas por ahí para hacer exactamente esto. Algunos de ellos incluso implementan la especificación OpenGL (por lo que son como un lado del software para opengl) que hará exactamente lo que hace Casey Muratori. Calculan todo en el lado del software, establecen los píxeles en el lado del software y escriben el resultado en la pantalla.
Sin embargo esto es lento . La CPU que eventualmente ejecutará todas estas cosas no fue hecha para este escenario. Para eso están las GPU. Lo que hace OpenGL (a menos que sea una implementación de software, por supuesto) es tomar todo lo que le diga que haga y enviar todos los datos, todas las llamadas de extracción, casi todo a la tarjeta gráfica y decirle a la GPU que haga el trabajo. La GPU está hecha específicamente para este tipo de trabajo. Multiplicar números de coma flotante (eso es lo que hace mucho cuando dibuja una escena 3D) y ejecutar sombreadores. Y esto en paralelo. Solo para tener una idea de lo rápido que es la GPU, piense en una escena simple en 3D en pantalla completa con 1920x1080 píxeles. Estos son, multiplicados, 2,073,600 píxeles para dibujar. Por cadapíxel, la GPU ejecutará el fragment-shader al menos una vez , la mayoría de las veces más de una vez. Ahora, digamos que corremos a 60 cuadros por segundo. Esto significa que la GPU ejecuta el fragment-shader 2,073,600 * 60 = 124,416,000 veces por segundo . ¿Crees que puedes hacer algo así en tu CPU? (Esa es una explicación bastante simplificada, hay muchas más cosas a tener en cuenta, como cuántos píxeles dibuja sobre objetos cercanos, cuánto MSAA usa, etc., sin embargo, las 124,416,000 veces por segundo son probablemente las más bajas que puede obtener, y usted fácilmente tendrá mucho más de 60 fps con una escena simple)
Eso es lo que hacen OpenGL y Direct3D, para lo que hacen los motores, vea la respuesta de @Uri Popovs.