Простое 2D графическое программирование

Я использовал DirectDraw в C и годы C++ назад для рисования некоторой простой 2D графики. Я привык к шагам создания поверхности, записи в него с помощью указателей, зеркально отразив задний буфер, храня спрайты на внеэкранных поверхностях, и так далее. Таким образом, сегодня, если я хочу, пишут некоторые 2D графические программы в C или C++, что состоит в том, чтобы пойти путь?

  1. Будет этот тот же метод программирования все еще применяться, или у меня должно быть другое понимание абстракции видеооборудования?
  2. Какие библиотеки и инструменты доступны в Windows и Linux?
5
задан rup 12 July 2010 в 07:31
поделиться

3 ответа

Какие библиотеки и инструменты доступны в Windows и Linux?

SDL , OpenGL и Qt 4 (это библиотека графического интерфейса, но она достаточно быстрая / гибкая для 2D-рендеринга)

Будет ли этот же метод программирования по-прежнему применяться или мне нужно другое понимание абстракции видеооборудования?

Обычно вы не записываете данные на поверхность «с помощью указателей» каждый кадр, а вместо этого манипулируете / рисуете их, используя методы, предоставляемые API. Это связано с тем, что драйвер будет работать с видеопамятью быстрее, чем при передаче данных из системной памяти в видеопамять каждый кадр. Вы по-прежнему можете записывать данные на аппаратную поверхность / текстуру (даже во время каждого кадра), если это необходимо, но эти поверхности могут нуждаться в особой обработке для достижения оптимальной производительности.Например, в DirectX вам нужно сообщить драйверу, что поверхностные данные будут часто меняться и что вы собираетесь только записывать данные на поверхность, а не читать их обратно. Кроме того, в 3D-ориентированных API (openGL / DirectX) поверхность рендеринга на другой поверхности - это своего рода «особый случай», и вам может потребоваться использовать «цели рендеринга» (DirectX) или «объекты фреймбуфера» (OpenGL). Это отличается от DirectDraw (где, AFAIK, вы можете перенести что угодно на что угодно). Хорошо то, что с 3D api вы получаете невероятно гибкий способ работы с поверхностями / текстурами - растягивание, вращение, тонирование их цветом, смешивание их вместе, их обработка с использованием шейдеров может выполняться на оборудовании.

Другое дело, что современные API-интерфейсы 3D с аппаратной поддержкой часто не работают с 8-битными текстурами на паллетах и ​​предпочитают изображения ARGB. При необходимости можно эмулировать 8-битные поверхности с палитрой, и их предоставляет двухмерный низкоуровневый API (SDL, DirectDraw). Также вы можете эмулировать 8-битную текстуру на оборудовании, используя фрагментные / пиксельные шейдеры.

В любом случае, если вам нужен «олдскульный» кроссплатформенный способ использования поверхностей (например, «записывать данные в каждом кадре с помощью указателей» - т.е. вам нужен программный рендерер или что-то в этом роде), SDL легко позволяет это. Если вам нужны более гибкие операции более высокого уровня - Qt 4 и OpenGL для вас.

3
ответ дан 14 December 2019 в 13:25
поделиться

В Linux вы можете использовать OpenGL, он используется не только для поддержки 3D, но также поддерживает 2D.

2
ответ дан 14 December 2019 в 13:25
поделиться

SDL является также довольно проста в использовании, из коробки. Он также кроссплатформенный и включает в себя (и имеет множество) плагины, доступные для удовлетворения ваших потребностей. Он также прекрасно взаимодействует с openGL, если вам понадобится поддержка 3D.

1
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: