2017-04-14 66 views
-1

我認爲這是一個非常有趣的問題,這個問題已經困擾了我很多年,但由於某種原因,我從來沒有設法找到一個直接的答案。讓我們看看我能在這裏得到什麼。如何從頭開始編寫我自己的圖形顯示引擎?

我想建立自己的圖形渲染和絕對原子塵埃顯示引擎。我正在談論直接I/O。

我想要將顏色值數組直接插入我的顯示器!

我需要一些建議,從哪裏開始。

我的目標是創建一個簡單的程序,以最有效的方式每秒至少輸出120幀硬編碼圖像數據到監視器表面(或者監視器的最大刷新率)。

我需要做什麼?

Windows是否支持任何C/C++庫?

我是否需要降低級別,爲顯卡編寫自己的驅動程序,還是AMD/nVidia將提供這些API?

請幫忙。

+0

你應該看看libagg:http://www.antigrain.com/ – sailfish009

+0

對於SO來說太寬泛的一個問題,但繼續下去。誰能說你不是下一個John Carmack? 「Windows是否支持任何C/C++庫?」是。 Direct X.否則,Windows阻止您直接操作硬件。 – user4581301

+0

你可以看看韋蘭如何做到這一點。但即使韋蘭也不是從頭開始製作的。 –

回答

1

Alomost所有現代計算機都沒有CPU直接驅動顯示器。

取而代之的是GPU。這款GPU擁有自己的內存和處理器(年復一年)。 GPU製造商編寫與OS和其他抽象交互的驅動程序,讓您告訴GPU要做什麼。

編寫自己的驅動程序並不是很實用,因爲GPU製造商不會爲您發佈足夠的信息。在許多情況下,它會由機器代碼組成,或者編寫您自己的編譯器(或編譯器後端)來爲所討論的GPU系列生成所述機器代碼。

現在並非所有人都迷路了。 Vulkan和各種各樣的着色器語言提供了將「原始代碼」導入GPU並更改顯示器上顯示內容的方法。這些功能由驅動程序提供。通常,「着色器語言」語言是C或C++變體,在CPU側具有「真實」C(有時是C++封裝)接口。

還有老派的方法,在這裏你可以操縱形狀(三角形)並使用C API對它們進行紋理處理。這缺乏更新的「將你自己的代碼發送到GPU」方法的能力和靈活性。

GPU是具有高度耦合快速存儲器的大規模並行相對較弱的處理器。這使得他們可以比CPU更高效地完成某些操作;有100多個核心彌補了很多罪惡。諸如柵格化多邊形或調整紋理大小等問題是繼承並行的,並且GPU旨在實時解決這些問題。然後,GPU上的特殊硬件將結果發送到顯示器。