与 directX/openGL 相比,windows gdi 的工作原理如何?

1 opengl directx graphics rendering gdi

我知道 DirectX 和 OpenGL 都内置于显卡中,您可以在需要时访问它们,因此所有渲染都将基于硬件加速。

我找不到任何有关 GDI 的信息,但我确信它不是基于显卡的加速。这些技术有何不同,我在这里缺少什么?

Chu*_*urn 5

GDI 库的历史可以追溯到 90 年代初和 Windows 的第一个版本。它支持硬件加速光栅操作和软件矢量图形绘制的混合。它主要用于为 GUI 绘制“演示”图形和文本。GDI+ 是 GDI 的基于 C++ 类的包装器,但基本上是相同的技术。现代版本的 Windows 仍然支持旧版 GDI API,但现代显卡不实现旧的固定功能“光栅操作”硬件加速路径 - 甚至引用 90 年代早期的“GPU”显卡也不太准确。

OpenGL 和 Direct3D 是围绕具有纹理的像素、线条和三角形构建的图形 API。两者的现代版本都使用可编程着色器阶段而不是固定功能硬件来实现变换和照明、纹理混合等。这些可以实现 3D 硬件加速,但它们本身不支持经典的“光栅操作”或基于矢量的绘图,如 styled/ Direct2D 是一个矢量图形库,它在 Direct3D 之上结合软件和硬件加速路径执行这些旧的“GDI 样式”操作,并且是现代 Windows GUI 所使用的与 DirectWrite 结合,实现高质量的文本渲染。

请参阅Windows 中的图形 API矢量图形光栅图形

简而言之,对于现代 Windows 编程,您应该使用 Direct2D/DirectWrite 来实现“演示图形”(可能通过Win2D等包装器),并使用 Direct3D 来实现 2D 光栅“精灵”图形或 3D 图形渲染(请参阅DirectX 工具包)。