Мой вопрос: зачем вообще использовать что-то вроде open gl, sfml, sdl, когда все, что вам нужно сделать, это просто выделить некоторый буфер, передать растровое изображение и вывести его на экран?
Коротко: потому что это быстро (OpenGL, DirectX).
Длинная:
Вы можете думать, что можете сделать все это самостоятельно. Нарисуйте пиксели на экране. Вы можете написать небольшую библиотеку для рисования фигур, таких как квадраты или треугольники. Это будет работать, конечно. Есть много библиотек, чтобы сделать именно это. Некоторые из них даже реализуют OpenGL-спецификацию (так что они похожи на программную часть opengl), которая будет делать именно то, что делает Кейси Муратори. Они вычисляют все на стороне программного обеспечения, устанавливают пиксели на стороне программного обеспечения и записывают результат на экран.
Однако это медленно . Процессор, который в конечном итоге выполнит все эти вещи, не был создан для этого сценария. Вот для чего нужны графические процессоры. Что делает OpenGL (если, конечно, это не программная реализация), так это берет все, что вы ему скажете, и помещает все данные, все вызовы на отрисовку, почти все на видеокарту и приказывает GPU выполнить эту работу. Графический процессор сделан специально для такой работы. Умножение чисел с плавающей точкой (То , что вы делаете много при рисовании 3D-сцены) и выполнения шейдеров. И это параллельно. Просто для того, чтобы понять, насколько быстрым является GPU, подумайте о простой трехмерной сцене в полноэкранном режиме с разрешением 1920x1080 пикселей. Это умноженные 2 073 600 пикселей для рисования. Для каждогопиксель, графический процессор будет запускать фрагмент-шейдер по крайней мере один раз , в большинстве случаев более одного раза. Теперь, допустим, мы работаем со скоростью 60 кадров в секунду. Это означает, что графический процессор запускает фрагмент-шейдер 2073 600 * 60 = 124 416 000 раз в секунду . Как вы думаете, вы можете сделать что-то подобное на своем процессоре? (Это довольно упрощенное объяснение, есть еще много вещей, которые нужно учитывать, например, сколько пикселей вы перерисовываете с помощью более близких объектов, сколько MSAA вы используете и т. Д., Однако, 124 416 000 раз в секунду , вероятно, самые низкие, которые вы можете получить, и вы легко получится намного больше, чем 60fps с простой сценой)
Вот что делают OpenGL и Direct3D, для каких движков смотрите ответ @Uri Popovs.