在Windows/C++平台上,有哪些适合绘制2D图形的API?

8
我一直在开发一个小应用程序,使用DirectX/3D绘制屏幕上的纹理(所有2D元素)。我发现这个API非常容易使用和结合面向对象编程原则,但我感觉在这么小的东西上使用DirectX是过度杀伤力了。
然而,我似乎找不到关于好的替代方案的共识。有什么建议吗?
编辑:需要本地透明混合和PNG文件支持。
祝福您的第一篇文章成功, Jengerer

考虑到大多数在演示场景中看到的4K演示都使用D3D,我不认为对于简单的2D应用程序来说它是过度杀伤力的。此外,D3DX支持.bmp.dds.dib.hdr.jpg.pfm.png.ppm.tga文件格式。 - elmattic
4个回答

5
如果您不需要XP支持,请使用Direct2D
否则,请使用GDI+

5
如果您需要使用alpha混合,必须使用图形硬件;唯一的好方法是使用类似于现在所使用的3D API(DirectX或OpenGL)。任何其他替代方案(如GDI / +或DirectDraw)都不会使用完整的图形硬件来加速混合,并且必须在CPU上执行它,从而大大降低性能。
正如提到的那样,Direct2D也是一种选择--它在Direct3D之上实现了更多的2D特定功能以及出色的文本支持。

就DirectX/OpenGL而言,你会推荐哪一个?我知道这是编程世界中一个非常热门的话题,但就性能和实用性而言,你认为哪个更好呢? - Jengerer
你特别抱怨DirectX感觉过于复杂;OpenGL具有更快的上市API,可以让您快速入门。然而,由于OpenGL是以C语言为基础设计的,因此您将失去DirectX面向对象设计的封装性,并且必须处理OpenGL状态机。两者之间的性能几乎相同,因此选择提供清晰易懂API的那个。 - Ron Warholic
我所说的过度杀伤是指性能方面,它似乎比这样一个小应用程序所需的资源要多得多。我发现即使是最小的DirectX应用程序也会承载相当沉重的负荷。感谢回复,真的很有帮助! - Jengerer

3

Windows自带一个(GDI32.DLL)。可以在WindowProc调用中挂钩WM_PAINT消息,并使用BeginPaint()开始绘图。关于可以做什么以及基本教程的很好的想法可在Zetcode上找到。


1

我过去使用过Gosu,它的使用还算顺畅。它的设计更多是为了与Ruby一起使用,但对于C++也不错。我们在一个快速的侧向卷轴游戏中使用了它,在那里我们玩弄了z-order和alpha通道。值得一试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接