2011-07-06 165 views
9

對不起,如果這是題外話。如果是這樣;請隨時將其移至相應的網站。
如何GDI/GDI +渲染到圖形卡(在屏幕上顯示的內容),而無需使用一個較低級別的API的用於與GPU如DirectX或OpenGL的通信?它如何在不使用任何API的情況下繪製屏幕?是;我知道該圖像是在CPU上合成和渲染的,但是它必須在顯示器上顯示之前將其發送到GPU。這個怎麼用?GDI/GDI +如何在沒有OpenGL或DirectX的情況下工作

回答

12

GDI原語是由視頻卡驅動程序實現的。視頻驅動程序由GPU製造商提供,並使用專有的寄存器級接口與GPU進行通信,不需要此級別的公共API。

與您聲稱所知道的相反,該圖像通常不會在CPU上完全呈現和合成。相反,視頻驅動程序可以自由使用CPU和GPU處理的任意組合,並且通常將大量GDI命令(尤其是位塊傳輸,也稱爲blitting)委派給GPU。

由於專用接口必須足夠強大,能夠支持OpenGL的客戶端驅動程序和DirectX驅動程序,這是毫不奇怪的是,GDI驅動程序可以將命令傳遞到GPU執行。


引導期間

早期(和Windows安裝)時,沒有特定製造商驅動程序可用,視頻API並在軟件中執行所有的渲染,並寫入到幀緩衝區,這僅僅是其中飼料的GPU RAMDAC的內存區域並映射到CPU地址空間。幀緩存以幾種衆所周知的格式之一(由VESA定義)存儲。

+1

所以GDI被放置在水平的Direct3D或OpenGL(和基於窗口的繪製實現只在必要的API),但與之平行(它不相互使用)。我對嗎? – SerG

+1

@SerG:大部分是正確的。這些API是獨立的,並且單獨的實現已經存在,儘管視頻驅動程序可以自由地僅實現一個命令集到其硬件並將其他層放在最上面,或者可以具有不完全匹配它們中的任何一個和所有的命令集是專有API /命令集的頂層。最新版本的Windows還需要GDI和GDI +渲染到離屏表面,然後使用DirectX將它們合成以形成整個圖像。但從應用角度來看,它們是完全獨立的。 –

相關問題