没有OpenGL或DirectX,GDI/GDI +如何工作

bbo*_*sak 10 opengl directx gdi+ gdi

对不起,如果这是偏离主题的话.如果是这样; 请随意将其移至相应的网站.
GDI/GDI +如何在不使用低级API与DirectX或OpenGL等GPU进行通信的情况下呈现给显卡(在屏幕上显示内容)?如何在不使用任何API的情况下绘制到屏幕上?是; 我知道图像是在CPU上合成和渲染的,但是在显示在显示器上之前必须先将其发送到GPU.这是如何运作的?

Ben*_*igt 14

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

与您声称知道的相反,图像通常不会在CPU上完全渲染和合成.相反,视频驱动程序可以自由地使用CPU和GPU处理的任何组合,并且通常将大量GDI命令(尤其是位块传输,也称为blitting)委托给GPU.

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


在没有特定于制造商的驱动程序的情况下,在启动(和Windows安装)的早期,视频API确实在软件中执行所有渲染并写入帧缓冲区,帧缓冲区只是为GPU RAMDAC提供内存并映射到CPU地址空间的内存区域.帧缓冲存储在几种众所周知的格式之一(由VESA定义)中.

  • 因此,GDI 被置于 Direct3d 或 OpenGL 级别(并且仅实现基于窗口的绘图所需的 API)但与它们并行(它不相互使用)。我对吗? (2认同)
  • @SerG:大部分是正确的。API 是独立的,并且已经存在单独的实现,尽管视频驱动程序可以自由地只实现一个命令集到它的硬件并将其他命令放在上面,或者可能有一个命令集不完全匹配它们中的任何一个和所有是专有 API/命令集之上的层。最新版本的 Windows 还需要 GDI 和 GDI+ 渲染到屏幕外的表面,然后使用 DirectX 合成这些表面以形成总图像。但是从应用的角度来看,它们是完全分开的。 (2认同)