很抱歉,如果这是偏离主题的话。如果是这样;请随意将其移至相应的网站。
GDI / GDI +如何在不使用低级API与DirectX或OpenGL等GPU进行通信的情况下呈现给显卡(在屏幕上显示内容)?如何在不使用任何API的情况下绘制到屏幕上?是;我知道图像是在CPU上合成和渲染的,但是在显示在显示器上之前必须先将其发送到GPU。这是如何工作的?
答案 0 :(得分:12)
GDI原语由视频卡驱动程序实现。视频驱动程序由GPU制造商提供,并使用专有的寄存器级接口与GPU通信,此级别不需要公共API。
与您声称知道的内容相反,图像通常不会在CPU上完全呈现和合成。相反,视频驱动程序可以自由使用CPU和GPU处理的任意组合,并且通常会将大量GDI命令(尤其是位块传输,即blitting)委托给GPU。
由于专有接口必须足够强大以支持OpenGL客户端驱动程序和DirectX驱动程序,因此GDI驱动程序可以将命令传递给GPU执行并不奇怪。
在没有特定于制造商的驱动程序的情况下,在启动(和Windows安装)的早期,视频API确实在软件中执行所有渲染并写入帧缓冲区,帧缓冲区只是为GPU RAMDAC提供内存并映射到CPU地址空间。帧缓冲存储在几种众所周知的格式之一(由VESA定义)。