比GDI+更简单的图形渲染方式有哪些,且速度更快?

4

我有一个使用GDI+编写的程序,并且已经充分优化(使用GraphicsPathDrawLines等批处理调用),但是在渲染时仍然很慢(使用抗锯齿绘制复杂地图需要几秒钟)。

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

如果:

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

那么我下一个最简单/轻量级的替代方案是什么(至少要比GDI+快20倍)?

我现在正在研究DirectDraw和Direct2D,但我甚至还没有弄清楚如何使用它们在屏幕上绘制基本图形。我也可能考虑OpenGL,但由于从未使用过,所以不确定从哪里开始。


1
DirectDraw已经被弃用,所以我建议不要使用它(甚至在DirectX 8+中也没有了)。Direct2D和DirectWrite在XP上不可用。如果您不关心XP(例如Chrome、Firefox使用Direct2D,Office 2013使用DirectDraw),则可以选择Direct2D或DirectDraw。如果需要XP支持,则使用Direct3D或OpenGL。 - dtech
1
我并不是downvote的人,但这看起来非常像一个推荐问题,而且正如你所知,这些问题是不被允许的。也许这个问题可以重新聚焦在你目前使用的算法上,以及它们在不同环境下的表现如何? - Frédéric Hamidi
1
@FrédéricHamidi:这不是一个算法问题,我的算法比GDI+渲染快得多。瓶颈确实是GDI+。不确定它为什么成为“建议”问题...我正在询问哪些API可用,而不是我应该购买什么软件之类的东西。 - user541686
@dtech:等一下,DirectDraw在XP上不可用?你确定吗? - user541686
@dtech:使用DirectDraw或Direct2D绘制基本的抗锯齿形状是否可能?看文档感觉它们唯一做的就是返回一个缓冲区,让你自己想办法逐像素进行绘制... - user541686
显示剩余4条评论
1个回答

3

Direct2D几乎可以替代GDI+,只是更快更干净。绘图函数通过ID2D1RenderTarget接口公开。

与Direct2D不同,GDI+没有硬件加速,因此您应该注意到渲染速度的巨大提高。抗锯齿绘图和alpha混合操作现在都包含在内。


1
Direct2D并不总是更快。这取决于瓶颈。有时候,它更多的是内存瓶颈,而不是渲染瓶颈。 - Frank Hileman
1
@Frank Direct2D永远不会更慢。如果你在使用Direct2D时受到内存带宽限制,那么无论你如何进行渲染,你都会受到内存带宽的限制。然而,选择适当的渲染目标可以严重减少内存流量,这是使用GDI或GDI+进行渲染时所没有的选项。 - IInspectable
2
Direct2D默认使用硬件加速,但根据硬件、系统中的可用内存以及视频硬件使用系统内存的方式,它可能比软件渲染慢。GDI+是在硬件资源更为有限的时代设计的;它不是最快的系统,但可以胜过Direct2D。许多人在Visual Studio中使用软件渲染,因为它在他们的系统上更快;这也适用于WPF,但根本问题是相同的。 - Frank Hileman
1
我喜欢Direct2D,并且推荐在新的工作中使用它,而不是GDI+。但当考虑到如此多的因素时,我不喜欢关于性能的笼统陈述。GDI+的优点是始终在所有系统上运行,而Direct2D可能存在漏洞。 - Frank Hileman
我认为对于专业软件和使用老旧机器的客户,应该支持GDI+和Direct2D。 - GorillaApe

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