Win32:是否有一种替代GDI32.dll并使用硬件加速的方法?

10

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

从Windows Vista开始,GDI不再具备硬件加速功能(GDI+从未具备硬件加速功能)。除非Microsoft修复GDI(和GDI+)以便能够在计算机上良好运行:本地应用程序(C++ MFC、Delphi等)和托管WinForms应用程序将继续永远运行得很差。

虽然我可以在商业应用程序中使用Direct2D,但我无法控制开发环境仍会创建控件,并且有数十年的库支持代码,假定存在GDI。


应用程序兼容性:图形设备接口(GDI)

现在,诸如LineTo和Rectangle之类的GDI基元是由软件而不是视频硬件呈现的,这极大地简化了显示驱动程序。

Windows和视频内存

在XP中,GDI根据操作系统的配置或设备驱动程序的不同程度进行GPU加速(有关详细信息,请参见Hooking Versus Punting)。在Vista中,GDI没有GPU加速。

Direct2D和GDI的比较

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

3个回答

4

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

1

是的,GDI是用于渲染图形的“随时随地都能工作”的API。它对视频驱动程序的要求非常低。大家很早就明白了这一点。我还记得ATI Mach显卡曾经给我带来了无尽的麻烦,这花费了我很长时间,让我不再购买ATI产品。

大家也很早就明白了DirectX。WPF渲染模型正在利用它,完全依赖于DirectX完成工作。Milcore是中间层名称。只有当你接受WPF编程模型后,才会理解它。


所以...你是在说有一种使用硬件加速的GDI版本吗? - Ian Boyd
我做了吗?不,我没有。GDI视频驱动程序接口允许优化BitBlt。这已经完成了。 - Hans Passant
1
好吧,你并没有明确说明,除了“好的,是的”之外,这可能是对问题“是否有使用硬件加速的替换gdi32.dll”的回答。首先,你提到了GDI的优点(随时随地工作,需求非常低,每个人都有权访问,ATI不支持)。然后你谈到了DirectX(每个人都能使用,WPF使用,实现在milcore中)。但是你没有说是否有使用硬件加速的GDI版本。从Vista开始,GDI不再加速:它不使用显卡来绘制基元。 - Ian Boyd
关闭Aero以恢复旧的行为。开启它后,程序会绘制到内存而非显卡,因此无法进行加速处理。 - Hans Passant

1
什么是硬件加速?我的意思是,GDI除了光栅位块传输之外并没有做很多事情,但这些都是硬件加速的。而且,考虑到Vista和Windows 7在桌面应用程序方面并不会变得非常慢,它们仍然是硬件加速的。
GDI仍然让视频驱动程序来完成所有繁重的工作,因此如果GDI没有进行硬件加速,那么这就是驱动程序供应商的问题,而不是GDI的问题。

我的意思是绘制线条、矩形、填充矩形、绘制文本等。GDI没有硬件加速;渲染在软件中进行,呈现在离屏幕的DirectX表面上。 - Ian Boyd
很明显,GDI没有硬件加速。就像Ian所说,GDI渲染是在软件中完成的。 - bman

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