2011-07-30 67 views
3

我正在使用COSMOS編譯器在C#中編寫操作系統(對於那些不知道COSMOS會將IL代碼轉換爲x86程序集的人),我正在製作一個GUI。
我已經制作了GUI,但現在我正在嘗試製作雙緩衝區。
聽起來很容易,但以下是我的問題 -
我不能使用System.Drawing庫或任何其他使用p/invokes的名稱空間的任何方法。另外,我不能使用多維數組(我可以使用常規數組)。所以我的問題是如何實現雙緩衝區?
我知道這是可能的,因爲我知道有人做了它。C#雙緩衝?

此外,我唯一的圖形功能是SetPixel,GetPixelClear。儘管我更喜歡答案,但如果有人知道關於雙緩衝的好文章,請告訴我。 PS:我在320×200的RE OS LOL

回答

4

你需要學習DOSçVGA比賽絕殺的一點點,它聽起來就像;-)

Double Buffering, Page Flipping, & Unchained Mode。所有相同的概念都適用,但不知道它們將如何轉換爲C#代碼。

快樂編碼。

+0

謝謝,這正是我需要的 – Grunt

0

雙緩衝可以通過使用一個數組來繪製(而不是顯示),並通過將數組blitting(當完成繪圖時)到顯示器來實現。

1

嘗試查看您是否可以訪問System.Drawing.BufferedGraphics。它爲此實現方法。否則,我擔心你必須手動完成。

通常,當您直接在屏幕上繪圖時,用戶會在繪製時看到您正在繪製的內容。就像你問亞歷克斯給你畫一個蘋果;你會在他用筆畫蘋果的時候檢查他。現在,如果你問亞歷克斯畫一個紅蘋果,然後抹去它,然後畫一個藍色的蘋果,然後抹掉它,然後畫一個黃色的蘋果等等。每次擦拭它時你都會看着他。這樣想想:電腦是一個快速的亞歷克斯。因此,如果您要求在屏幕上直接繪製快速動畫,用戶將會標記動畫幀之間發生了什麼:閃爍不佳!

閃爍的解決方案是雙緩衝。緩衝區就是用於繪圖的內存屏幕區域。當您使用雙緩衝時,不是直接繪製到屏幕,而是繪製到位於視頻內存中的後臺緩衝區,然後將整個緩衝區複製到屏幕。