2010-09-01 12 views
6

He estado trabajando en una pequeña aplicación pequeña, y he estado usando DirectX/3D para dibujar texturas en la pantalla (todos los elementos de 2 dimensiones). El API, me parece, es bastante fácil de usar e incorporar usando los principios OOP, pero no puedo evitar sentir que el uso de DirectX en algo tan pequeño es increíblemente exagerado.¿Qué es una buena API de dibujo de gráficos 2D para Windows/C++?

Parece que no encuentro consenso sobre una buena alternativa. ¿Alguna sugerencia?

EDITAR: Es necesario el soporte nativo alfa-blending y PNG.

Con mucha primer post amor, Jengerer

+0

Teniendo en cuenta que la mayoría de las demostraciones de 4K que se ven en la muestra están usando D3D, no diría que es increíblemente exagerado para una simple aplicación 2D. Además, D3DX admite los formatos de archivo '.bmp',' .dds', '.dib',' .hdr', '.jpg',' .pfm', '.png',' .ppm' y '.tga'. – Stringer

Respuesta

5

Si necesita la mezcla alfa, debe usar el hardware de gráficos; la única buena manera de hacerlo es usar una API 3D similar a cómo lo está haciendo ahora (DirectX u OpenGL). Cualquier alternativa (GDI/+ o, por ejemplo, DirectDraw) no usará el hardware de gráficos completo para acelerar la mezcla y tendrá que realizarla en la CPU, lo que reduce enormemente el rendimiento.

Como se mencionó, Direct2D también es una opción; es funcionalmente una capa sobre Direct3D que admite más funciones específicas 2D así como excelente soporte de texto.

+0

En lo que respecta a DirectX/OpenGL, ¿qué recomendarías? Sé que es un tema candente en el mundo de la programación, pero en términos de rendimiento y viabilidad, ¿cuál diría que es la mejor opción? – Jengerer

+0

Usted se quejó específicamente de que DirectX se sentía como sobre matar; OpenGL tiene una API mucho más rápida para lanzar al mercado para que pueda comenzar a trabajar. Sin embargo, dado que OpenGL se diseñó teniendo en cuenta C, perderá la agradable encapsulación del diseño DirectX OO y tendrá que lidiar con la máquina de estado OpenGL. El rendimiento será casi idéntico entre los dos, así que vaya con el que proporciona una API que sea clara y comprensible para usted. –

+0

Por sobre-matar quise decir que en cuanto a rendimiento, parecía que se necesitaban muchos más recursos de los que una aplicación tan pequeña debería usar. Me parece que incluso las aplicaciones más pequeñas de DirectX tienen una carga bastante pesada. Gracias por las respuestas, ¡realmente me ayudó! – Jengerer

4

Si usted no necesita el apoyo XP, utilice Direct2D.
De lo contrario, use GDI+.

1

Windows incluye uno de fábrica. (GDI32.DLL). Es posible enganchar en el mensaje WM_PAINT en la llamada de WindowProc y usar BeginPaint() para comenzar a dibujar. Una muy buena idea de lo que se puede hacer y un tutorial básico está disponible en Zetcode.

1

He usado Gosu en el pasado, y ha estado bien trabajar con. Fue diseñado para usarse más con Ruby, pero no está mal para C++. Lo usamos en un rápido juego de desplazamiento lateral, donde nos metimos con z-order y el canal alfa. Vale la pena echarle un vistazo.

Cuestiones relacionadas