2010-09-01 2 views
6

Я работал над небольшим небольшим приложением, и я использовал DirectX/3D для рисования текстур на экране (все двумерные элементы). API, я нахожу, довольно прост в использовании и включает в себя принципы ООП, но я не могу не чувствовать, что использование DirectX на чем-то, что этот маленький, безумно переутомляет.Какой хороший 2D-графический API для Windows/C++?

Однако, похоже, я не могу найти консенсус относительно хорошей альтернативы. Какие-либо предложения?

EDIT: Нужная поддержка альфа-смешивания и PNG-файлов.

С большой первой после любви, Jengerer

+0

Учитывая, что большинство демонстраций 4K, которые вы видите в демосцене, используют D3D, я бы не сказал, что это безумно переутомление для простого 2D-приложения. Также D3DX поддерживает форматы '.bmp',' .dds', '.dib',' .hdr', '.jpg',' .pfm', '.png',' .ppm' и '.tga'. – Stringer

ответ

5

Если вам нужно альфа-смешивание, вы должны использовать графическое оборудование; единственный хороший способ сделать это - использовать 3D API, аналогичный тому, как вы это делаете сейчас (DirectX или OpenGL). Любая альтернатива (GDI/+ или, скажем, DirectDraw) не будет использовать полное графическое оборудование для ускорения микширования и придется выполнять его на процессоре, что значительно снижает производительность.

Как уже упоминалось, Direct2D также является опцией - он функционально является слоем поверх Direct3D, который поддерживает больше 2D-функций, а также отличную текстовую поддержку.

+0

Что касается DirectX/OpenGL, что бы вы порекомендовали? Я знаю, что это довольно горячая тема в мире программирования, но с точки зрения производительности и практичности, что бы вы сказали, это лучший выбор? – Jengerer

+0

Вы прямо пожаловались, что DirectX чувствует себя как над-убить; OpenGL имеет гораздо более быстрый API для выхода на рынок, чтобы заставить вас прокатиться. Однако, поскольку OpenGL был разработан с учетом C, вы потеряете красивую инкапсуляцию дизайна DirectX OO и должны иметь дело с конечным автоматом OpenGL. Производительность будет почти одинаковой между двумя, так что пойдите с той, которая предоставляет API, который ясен и понятен вам. –

+0

Наверное, я имел в виду, что с точки зрения производительности, казалось, что для этого требуется гораздо больше ресурсов, чем когда-либо использовать такое небольшое приложение. Я считаю, что даже самые маленькие приложения DirectX несут очень тяжелую нагрузку. Спасибо за ответы, это действительно помогло! – Jengerer

4

Если вам не нужна поддержка XP, используйте Direct2D.
В противном случае используйте GDI+.

1

Windows включает в себя один из них. (GDI32.DLL). В вызове WindowProc можно подключить сообщение WM_PAINT и использовать BeginPaint() для начала рисования. Действительно хорошая идея о том, что можно сделать, и базовый учебник доступен по адресу Zetcode.

1

В прошлом я использовал Gosu, и с ним было нормально работать. Он был разработан, чтобы использоваться больше с Ruby, но это не плохо для C++. Мы использовали его в быстрой игре скроллинга, где мы перепутали с z-порядком и альфа-каналом. Возможно, стоит проверить.