Minha pergunta é: por que se preocupar em usar algo como open gl, sfml, sdl quando tudo o que você precisa fazer é simplesmente alocar algum buffer, passar um bitmap e desenhá-lo na tela?
Curto: Por ser rápido (OpenGL, DirectX).
Grandes:
Você pode pensar que pode fazer isso sozinho. Desenhe pixels para uma tela. Você pode escrever uma pequena biblioteca para desenhar formas, como quads ou triângulos. Isso vai funcionar, é claro. Existem muitas bibliotecas por aí para fazer exatamente isso. Alguns deles até implementam a especificação OpenGL (então eles são como um lado do software para opengl), que fará exatamente o que Casey Muratori faz. Eles calculam tudo no lado do software, definem os pixels no lado do software e gravam o resultado na tela.
No entanto, isso é lento . A CPU que eventualmente executará todas essas coisas não foi feita para esse cenário. É para isso que servem as GPUs. O que o OpenGL faz (a menos que seja uma implementação de software, é claro) é levar tudo o que você manda fazer e enviar todos os dados, todas as chamadas de chamada, quase tudo para a placa gráfica e dizer à GPU para fazer o trabalho. A GPU é feita especificamente para esse tipo de trabalho. Multiplicando números de ponto flutuante (isso é o que você faz muito ao desenhar uma cena 3D) e executando shaders. E isso em paralelo. Apenas para ter uma noção da velocidade da GPU, pense em uma cena simples em 3D em tela cheia com 1920x1080 pixels. Estes são, multiplicados, 2.073.600 pixels para desenhar. Para cadapixel, a GPU executará o fragment-shader pelo menos uma vez , na maioria das vezes mais de uma vez. Agora, digamos que rodemos a 60 quadros por segundo. Isso significa que a GPU executa o fragmento-shader 2.073.600 * 60 = 124.416.000 vezes por segundo . Você acha que pode fazer algo assim na sua CPU? (Essa é uma explicação bastante simplificada, há muito mais coisas a considerar, como quantos pixels você extrai por objetos mais próximos, quanto MSAA você usa e assim por diante; no entanto, as 124.416.000 vezes por segundo são provavelmente as mais baixas que você pode obter e você facilmente terá muito mais que 60 qps com uma cena simples)
É o que o OpenGL e o Direct3D fazem, para quais mecanismos a resposta de @Uri Popovs.