如果我想在 Windows XP 和更高版本的 Windows 上实时缩放和合成 2D 抗锯齿矢量和位图图像,充分利用可用的硬件加速,我应该使用 GDI+ 还是 DirectX 9.0c?(实际上,Windows XP 和 Windows 7 很重要,但我们并不关心 Vista 上的性能。)
考虑到应用程序不是跨平台的(而且永远不会),使用 SDL 有什么好处吗?我想知道 SDL 是否可以更轻松地切换到提供更好性能的任何底层绘图 API……</p>
在哪里可以找到在 DirectX 9.0c 中进行 2D 图像缩放和合成的文档?(我找到了 DirectDraw 的文档,但读到它在 DirectX 7 之后已被弃用。但 Direct2D 直到 DirectX 10 才可用。)
我可以合理地期望缩放和合成在中低规格 PC(即集成显卡)上的 Windows XP 上进行硬件加速吗?如果不是,那么我使用 GDI+ 还是 DirectX 9.0c 是否重要?
2 回答
不要使用 GDI+。它在软件中做所有事情,并且它有一个不利于软件性能的渲染模型。其他任何事情你都会过得更好。
Direct3D 或 OpenGL(如果您想要一个更完整的跨平台 API,您可以通过 SDL 访问)将为您提供支持它的硬件的最佳性能。Direct2D 在同一条船上,但在 Windows XP 上不可用。我的理解是,至少在 Intel 的集成 GPU 的情况下,硬件能够进行简单的操作,例如转换和合成,而这些 GPU 的大多数问题都出在对功能和性能要求很高的游戏中,以及针对 ATI/Nvidia 卡进行了优化。如果您以某种方式找到了显卡不支持 Direct3D 的机器并且正在回退到软件,那么您可能会遇到问题。
我相信 SDL 在 Windows 上使用 DirectDraw 进行非 OpenGL 绘图。不知何故,我的印象是 DirectDraw 在现代版本的 Windows 中的软件中执行所有操作(鉴于 DirectDraw 的用途自 win9x 时代以来从未真正重要过),但我无法验证这一点。
理想的情况是可以使用 Direct3D 或 OpenGL 进行渲染的跨平台矢量图形库,但 AFAICT 没有这样的东西可用。Cairo 图形库在 Windows 上缺乏加速,Mozilla 已经启动了一个名为 Azure 的项目,该项目显然具有该功能,但似乎并非专为在其项目之外使用而设计。
我刚刚发现:DirectX 8 中的 2D 渲染。
看来,自从微软在 DirectX 7 之后删除了 DirectDraw,他们希望所有 2D 绘图都使用 3D API 完成。这可以解释为什么我完全找不到我正在寻找的文档。
到目前为止,这篇文章看起来很有希望。
这是另一个:3D 世界中的 2D 编程