Какие библиотеки и инструменты доступны в Windows и Linux?
SDL , OpenGL и Qt 4 (это библиотека графического интерфейса, но она достаточно быстрая / гибкая для 2D-рендеринга)
Будет ли применяться этот же метод программирования или у меня другое понимание аппаратной абстракции видео?
Обычно вы не записываете данные в поверхность «с помощью указателей» каждый кадр, а вместо этого манипулируете / рисуете их, используя методы, предоставляемые API. Это связано с тем, что драйвер будет работать быстрее с видеопамятью, чем при передаче данных из системной памяти в видеопамять каждый кадр. Вы по-прежнему можете записывать данные в аппаратную поверхность / текстуру (даже в каждом кадре), если это необходимо, но эти поверхности, возможно, придется обрабатывать особым образом, чтобы получить оптимальную производительность. Например, в DirectX вам необходимо сообщить драйверу, что данные поверхности будут часто меняться и что вы будете только записывать данные в поверхность, а не читать их обратно. Кроме того, в 3D-ориентированных API-интерфейсах (openGL / DirectX) поверхность рендеринга на другой поверхности является «особым случаем», и вам может понадобиться использовать «Render Targets» (DirectX) или «Framebuffer Objects» (OpenGL). Который отличается от DirectDraw (где, AFAIK, вы можете пометить все что угодно). Хорошая вещь заключается в том, что с 3D API вы получаете невероятно гибкий способ работы с поверхностями / текстурами - растягивание, вращение, окрашивание их в цвета, смешивание их вместе, обработка их с помощью шейдеров может быть выполнена на оборудовании.
Другое дело, что современные 3D API с аппаратной поддержкой часто не работают с 8-битными текстурами на поддонах и предпочитают изображения ARGB. При необходимости можно эмулировать 8-битные поверхности с палитрой, и 2D низкоуровневые API (SDL, DirectDraw) предоставляют их. Также вы можете эмулировать 8-битную текстуру на оборудовании, используя фрагментные / пиксельные шейдеры.
В любом случае, если вам нужен кроссплатформенный способ использования поверхностей «старой школы» (т. Е. «Записывать данные каждый кадр с помощью указателей» - т. Е. Вам нужен программный рендерер или что-то в этом роде), SDL легко это допускает. Если вам нужны высокоуровневые, более гибкие операции - Qt 4 и OpenGL для вас.