GDI/GDI+是如何在没有OpenGL或DirectX的情况下工作的

14

如果这个问题不是此处讨论的话题,我很抱歉。如果是,那么请随意将其移动到适当的站点。
GDI/GDI+如何在屏幕上显示内容(渲染到显卡)而不使用低级API与GPU通信,例如DirectX或OpenGL?它是如何在不使用任何API的情况下绘制到屏幕上的?是的,我知道图像是合成和在CPU上呈现的,但它必须以某种方式被发送到GPU,然后才能在监视器上显示。这是如何实现的?

1个回答

16

GDI原语是由显卡驱动程序实现的。视频驱动程序由GPU制造商提供,并使用专有的寄存器级接口与GPU通信,在此级别上不需要公共API。

与你所声称的相反,图像通常并非完全在CPU上渲染和合成。相反,视频驱动程序可以自由地使用CPU和GPU处理的任何组合,通常大量的GDI命令(特别是位块传输,也称为blitting)被委托给GPU。

由于专有接口必须足够强大以支持OpenGL客户端驱动程序和DirectX驱动程序,因此不足为奇的是,GDI驱动程序可以将命令传递给GPU以执行。


早期启动期间(以及Windows安装期间),当没有制造商特定的驱动程序可用时,视频API确实会在软件中执行所有渲染,并写入帧缓冲区,这只是喂养GPU RAMDAC的内存区域,并映射到CPU地址空间。帧缓冲区以几种众所周知的格式之一存储(由VESA定义)。


3
GDI被放置在Direct3D或OpenGL的层次上(仅实现基于窗口的绘图所需的API),但与它们并列(它们不互相使用)。我的理解是正确的吗? - SerG
3
@SerG:大部分正确。这些API是独立的,存在不同的实现,尽管视频驱动程序可以自由地仅针对其硬件实现一种命令集,并在其上层叠加其他命令集;或者可能有一种命令集与任何一个命令集都不完全匹配,而所有命令集都是基于专有API/命令集的上层。最近的Windows版本还需要使用GDI和GDI+来呈现离屏表面,然后使用DirectX合成以形成总图像。但从应用程序的角度来看,它们是完全独立的。 - Ben Voigt
啊,是的,既然提出了问题,那就得有相应的回答。 - HackerDaGreat57

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