【问题标题】:Next-easiest graphics rendering faster than GDI+?比 GDI+ 更快的下一个最简单的图形渲染?
【发布时间】:2014-02-25 23:05:54
【问题描述】:

我有一个经过彻底优化的 GDI+ 程序(使用 GraphicsPathDrawLines 等进行批处理调用),但它的渲染速度仍然很慢(需要几秒钟才能绘制具有抗锯齿的复杂地图)。

没有办法让我的 GDI+ 更快,所以我正在寻找替代方案。

如果:

  1. 我需要与 Windows XP 兼容吗?
  2. 我不需要与 Windows XP 兼容?

我现在正在研究 DirectDraw 和 Direct2D,但我什至还没有弄清楚如何用它们在屏幕上绘制基本形状。我也可能会考虑使用 OpenGL,但我不知道从哪里开始,因为我从未使用过它。

【问题讨论】:

  • DirectDraw 已被弃用,因此我建议不要使用它(它甚至不再在 DirectX 8+ 中)。 Direct2D 和 DirectWrite 在 XP 上不可用。如果您不关心 XP(例如 Chrome、Firefox 使用 Direct2D,Office 2013 使用 DirectDraw),那么 Direct2D 或 DirectDraw 似乎是可行的方法。如果您需要 XP 支持,请使用 Direct3D 或 OpenGL。
  • Downvote 不是我的,但这看起来很多像一个推荐问题,而且这些都是题外话,你知道的。也许问题可以重新集中在您当前使用的算法以及它们在不同环境下的表现如何?
  • @FrédéricHamidi:这不是算法问题,我的算法比 GDI+ 渲染快得多。真正的瓶颈 GDI+。不确定是什么使它成为“推荐”问题...我在问有哪些 API 可用,我不是我应该购买什么软件或类似的东西。
  • @dtech:等等,DirectDraw 在 XP 上不可用?你确定吗?
  • @Mehrdad DirectDraw 是,但 DirectWrite 不是。 DirectDraw 虽然和 DirectX 7- 已经过时。 (我在最后两次提到 DirectDraw 时指的是 DirectWrite)

标签: winapi visual-c++ graphics gdi+


【解决方案1】:

Direct2D 几乎就像 GDI+ 的替代品,只是更快更干净。绘图功能通过ID2D1RenderTarget interface 公开。

与 Direct2D 不同,GDI+ 不是硬件加速的,因此您应该注意到渲染速度的巨大改进。抗锯齿绘图和 alpha 混合操作现在是软件包的一部分。

【讨论】:

  • Direct2D 并不总是更快。这取决于瓶颈。有时它更像是内存瓶颈,而不是渲染瓶颈。
  • @Frank Direct2D 永远不会慢。如果您使用 Direct2D 限制了内存带宽,那么无论您以哪种方式进行渲染,您的内存带宽都会受到限制。为 Direct2D 选择合适的渲染目标可以大大减少内存流量,但是,例如,在使用 GDI 或 GDI+ 渲染时,您没有此选项。
  • Direct2D 默认使用硬件加速,这可能比软件渲染慢,这取决于硬件、系统中的可用内存以及视频硬件使用系统内存的方式。 GDI+是在硬件资源更加受限的时代设计的;它不是最快的系统,但它可以胜过 Direct2D。许多人使用 Visual Studio 进行软件渲染,因为它在他们的系统上更快;这是 WPF,但根本问题是相同的。
  • 我喜欢 Direct2D 并推荐它而不是 GDI+ 用于更新的工作。当有很多因素需要考虑时,我只是不喜欢关于性能的笼统陈述。 GDI+ 确实具有始终在所有系统上工作的优势,而 Direct2D 可能有问题。
  • 我相信对于专业软件和老机器的客户应该支持GDI+和Direct2D。
猜你喜欢
  • 2012-01-09
  • 2012-12-14
  • 2010-11-07
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多