Win32:是不是有使用硬件加速的替代 GDI32.dll?

Posted

技术标签:

【中文标题】Win32:是不是有使用硬件加速的替代 GDI32.dll?【英文标题】:Win32: Is there a replacement GDI32.dll that uses hardware acceleration?Win32:是否有使用硬件加速的替代 GDI32.dll? 【发布时间】:2011-02-08 02:14:14 【问题描述】:

有没有人创建了GDI32.dll 的版本来利用机器上可用的硬件加速功能? gdiplus.dll?

从 Windows Vista 开始,GDI 不再是硬件加速的。 (GDI+ 从来没有硬件加速)。如果微软不修复 GDI(和 GDI+)以使其能够在计算机上正常运行:本机应用程序(C++ MFC、Delphi 等)和托管的 WinForms 应用程序将永远运行不佳。

虽然我可以将 Direct2D 用于商业应用程序,但我无法控制这样一个事实,即开发环境仍然创建控件,具有数十年的库支持代码,假设存在 GDI。


Application Compatibility: Graphical Device Interface (GDI):

GDI 原语,例如 LineTo 和 矩形现在在软件中呈现 而不是视频硬件, 大大简化了显示驱动程序。

Windows And Video Memory

在 XP GDI 中,GPU 加速到 不同程度取决于如何 操作系统已配置或设备驱动程序 (详情见Hooking Versus Punting)。 在 Vista 中,GDI 没有 GPU 加速

Comparing Direct2D and GDI

因此,在 Windows Vista 中,GDI DDI 显示驱动程序更改为 仅由 Microsoft 实施 提供的驱动程序,Canonical Display 驱动程序 (CDD)。 GDI 渲染到系统 内存位图。使用了脏区 更新显存纹理 窗口管理器用来 合成桌面。

【问题讨论】:

【参考方案1】:

嗯,是的,GDI 是用于渲染图形的“随时随地工作”的 API。它对视频驱动程序的要求非常低。很久以前每个人都做对了。过了一会儿,我对 ATI Mach 视频卡有了清晰的记忆,它给我带来了无穷无尽的麻烦。它让我有一段时间没有购买 ATI 产品。

早在很久以前,每个人都得到了 DirectX。它在 WPF 渲染模型中得到了利用,它完全依赖 DirectX 来完成工作。 Milcore 是垫片名称。在您购买 WPF 编程模型之前,您不会得到它。

【讨论】:

Sooo....你是说使用硬件加速的 GDI 版本吗? 是吗?不,我没有。 GDI 视频驱动程序接口允许优化 BitBlt。已经完成了。 好吧,除了“好吧,是的”之外,您实际上并没有说任何一种方式 - 这可能是对“是否有替代 gdi32.dll 使用硬件加速。”首先,您拥有 GDI 的优点(随时随地工作,要求非常低,每个人都做对了,ATI 不支持)。然后你谈到了 DirectX(每个人都做对了,WPF 使用,在 milcore 中实现)。但是你没有说是否有使用硬件加速的 GDI 版本。从 Vista GDI 开始不再加速:它不使用显卡来绘制图元。 关闭 Aero 以恢复旧行为。启用它后,程序会吸引内存,而不是视频卡。无法加速。【参考方案2】:

硬件加速是什么意思? 我的意思是,除了光栅 blits 之外,GDI 并没有做很多事情,但这些都是硬件加速的。而且,鉴于 Vista 和 Windows 7 的桌面应用程序并没有太慢,仍然如此。

GDI 仍然让视频驱动程序完成所有繁重的工作,所以如果 GDI 没有硬件加速,那么是驱动程序供应商的问题,而不是 GDI 的问题。

【讨论】:

我的意思是绘制线条、矩形、填充矩形、绘制文本等。GDI 不是硬件加速的;在软件中渲染到屏幕外的 DirectX 表面。 显然 GDI 不是硬件加速的。正如 Ian 所说,GDI 渲染发生在软件中。【参考方案3】:

Vista 似乎是 GDI 性能历史上的一个特例。 以下两篇文章都表明,GDI 的未来再次一片光明。

http://msdn.microsoft.com/en-us/library/ff729480%28VS.85%29.aspx

GDI 在 Windows 上是硬件加速的 XP,并在 Windows 7 上加速时 桌面窗口管理器正在运行 并且正在使用 WDDM 1.1 驱动程序。 Direct2D 是硬件加速的 几乎所有 WDDM 驱动程序,无论 是否在使用 DWM。在 Vista 上, GDI 将始终在 CPU 上呈现。

http://blogs.msdn.com/b/e7/archive/2009/04/25/engineering-windows-7-for-graphics-performance.aspx

基于实际应用 统计数据,......我们与我们的 图形 IHV 合作伙伴提供 支持他们的司机加速 最常用的 GDI 操作。

【讨论】:

答案似乎是“微软创建了一个使用硬件加速的 GDI32.dll 版本”,但您需要 Windows 7 和 WDDM 1.1 驱动程序才能获得它。不错的权衡。 我真的可以看到 GDI 在 Vista 和 7 之间的性能差异,因为我的开发机器是 Windows 7。我真的很高兴微软花时间加速 GDI再次。我只能希望GDI+能得到同样的爱。

以上是关于Win32:是不是有使用硬件加速的替代 GDI32.dll?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Win32/GDI 加载 PNG 图像(如果可能,不要使用 GDI+)?

国产32位单片机用的是啥库

Win32编程知识积累

是否可以使用 WIN32 API 和 GDI+ (C++) 对工具提示进行样式化

无法从 Win32 C++ GDI+ 中的函数返回图形对象

GDI Image::Save 返回 Win32Error