我知道DirectX和OpenGL都内置在图形卡中,您可以在需要时访问它们,因此所有渲染都将是基于硬件的加速。
我找不到有关GDI的任何信息,但我确定它不是基于图形卡的加速度。这些技术有何不同,我在这里缺少什么?
GDI库的历史可以追溯到90年代初期和Windows的第一个版本。它支持了硬件加速栅格操作和软件向量图形图的混合。它是绘制GUI的"演示"图形和文本的主要内容。GDI 是GDI的基于C 类的包装器,但基本上是相同的技术。Windows的现代版本仍然支持Legacy GDI API,但现代图形卡并不能实现旧的固定功能"栅格操作"硬件加速路径 - 甚至不是真正准确地参考90年代早期" GPU"的视频卡。
OpenGL和Direct3D是图形API,围绕像素,线条和三角形构建的纹理。两者的现代版本都使用可编程着色器阶段,而不是固定功能硬件来实现变换&照明,质地混合等。这些启用了3D硬件加速度,但本身并不支持经典的"栅格操作"或基于矢量的图纸,例如样式/宽线,填充的椭圆机等在Direct3D上使用软件和硬件加速路径的" GDI风格"操作,这是现代Windows GUI与DirectWrite结合使用的方法,它实现了高质量的文本渲染。
请参阅Windows,Vector图形和栅格图形中的图形API。
简而言之,对于现代化的Windows编程,您应该使用Direct2D/DirectWrite进行"演示图形",也许可以通过Win2D等包装器,而Direct3D则使用2D栅格" Sprite"图形或3D图形渲染(请参阅Directx Tool套件)。/blockquote>
gdi 是纯 2D 图像访问和渲染(如果不禁用,则在射器级别上加速非常有限)。因此,在GDI中有没有:
- 纹理
- 着色器
- 缓冲区
- 深度/模板缓冲器
- 转换矩阵
- GFX管道
差异是:
- 透明性是通过特定的颜色值而不是alpha通道完成的
- 仅在每个频道添加,XOR,复制模式 中进行混合
- 您可以获取直接像素访问
- 获得Windows字体访问和文本功能支持
- 窗口相关 gdi 应仅从其主线程(
WndProc
)
来调用呼叫