【问题标题】:What's a good 2D graphics drawing API for Windows/C++?什么是适用于 Windows/C++ 的好的 2D 图形绘制 API?
【发布时间】:2011-04-06 23:28:33
【问题描述】:

我一直在开发一个小型应用程序,并且一直在使用 DirectX/3D 将纹理绘制到屏幕上(所有二维元素)。我发现 API 非常易于使用,并且可以使用 OOP 原则进行整合,但我不禁觉得在这么小的东西上使用 DirectX 实在是太过分了。

不过,我似乎无法就一个好的替代方案达成共识。有什么建议吗?

编辑:需要原生 alpha 混合和 PNG 文件支持。

带着很多初恋, 詹格勒

【问题讨论】:

  • 考虑到您在演示场景中看到的大多数 4K 演示都使用 D3D,我不会说它对于一个简单的 2D 应用程序来说太过分了。 D3DX还支持.bmp.dds.dib.hdr.jpg.pfm.png.ppm.tga文件格式。

标签: c++ windows api directx drawing2d


【解决方案1】:

如果您需要 alpha 混合,则必须使用图形硬件;做到这一点的唯一好方法是使用类似于您现在的方式(DirectX 或 OpenGL)的 3D API。任何替代方案(GDI/+ 或者说 DirectDraw)都不会使用完整的图形硬件来加速混合,而必须在 CPU 上执行,从而大大降低了性能。

如前所述,Direct2D 也是一个选项 - 它在功能上是 Direct3D 之上的一层,支持更多 2D 特定功能以及出色的文本支持。

【讨论】:

  • 就 DirectX/OpenGL 而言,您会推荐什么?我知道这是编程界非常热门的话题,但就性能和实用性而言,您认为哪个是更好的选择?
  • 你特别抱怨 DirectX 感觉有点过头了; OpenGL 有一个更快的上市时间 API 让你滚动。然而,由于 OpenGL 在设计时考虑了 C,因此您将失去 DirectX OO 设计的良好封装,并且必须处理 OpenGL 状态机。两者的性能几乎相同,因此请选择提供清晰易懂的 API 的那个。
  • 我所说的过度杀伤是指性能方面,它似乎占用了比这样一个小应用程序应该使用的更多的资源。我发现即使是最小的 DirectX 应用程序也承载着相当重的负载。感谢您的回复,真的很有帮助!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    Windows 包含一个开箱即用的功能。 (GDI32.DLL)。可以挂钩到 WindowProc 调用中的WM_PAINT 消息并使用BeginPaint() 开始绘图。 Zetcode 上提供了有关可以做什么的非常好的想法和基本教程。

    【讨论】:

      【解决方案4】:

      我以前用过Gosu,用起来没问题。它旨在更多地与 Ruby 一起使用,但对 C++ 来说还不错。我们在一个快速的横向卷轴游戏中使用了它,我们在其中弄乱了 z-order 和 alpha 通道。可能值得一试。

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        相关资源
        最近更新 更多