3

COSMOSコンパイラを使ってOSをC#で書いています(COSMOSがILコードをx86アセンブリに変換するのを知らない人には)、私はGUIを作っています。
私はGUIを作っていますが、今はダブルバッファを作ろうとしています。
これはかなり簡単ですが、私の問題は以下の通りです。
System.Drawingライブラリまたはp/invokesを使用する他の名前空間のメソッドは使用できません。また、私は多次元配列(私は通常の配列を使用することができます)を使用することはできません。だから私の質問はダブルバッファを実装する方法です?
私はそれをした人を知っているので、それが可能であることを知っています。C#ダブルバッファリング?

さらに、グラフィック機能はSetPixelGetPixelおよびClearです。すべて私は答えを好むが、誰かがダブルバッファリングに関する良い記事を知っているなら、私に教えてください。
PS。 320×200 RESでの私のOS LOL

答えて

4

あなたはDouble Buffering, Page Flipping, & Unchained Modeを参照してください;-)

のように聞こえるDOS C VGAゲームの伝承を少し学ぶ必要があります。同じコンセプトがすべて適用されますが、C#コードにどのように変換されるかはわかりません。

ハッピーコーディング。

+0

ありがとうございました – Grunt

0

ダブルバッファリングは、(表示とは対照的に)プロットするアレイを使用し、ディスプレイに描画を完了したときにアレイをブリッジすることによって実装できます。

1

System.Drawing.BufferedGraphicsにアクセスできるかどうかを確認してください。その目的のためのメソッドを実装しています。それ以外の場合は、手動で行う必要があります。

通常、画面に直接描画すると、描画しているものが表示されます。アレックスにあなたにリンゴを描こうと依頼したときのようなものです。彼はペンでリンゴを描いている間に彼を調べます。今すぐアレックスに赤いリンゴを描くように頼んだら、それを消してから、青いリンゴを描き、それを消してから、黄色のリンゴを描くなどすれば、毎回消えていく。それをこのように考えてみましょう。コンピュータは速いアレックスです。したがって、高速のアニメーションを画面に直接描画するように要求すると、アニメーションフレーム間に何かが起こっていることをユーザーがマークします。

フリッカーの解決策は、ダブルバッファリングです。バッファは、描画に使用されるメモリのオフスクリーン領域です。ダブルバッファリングを使用すると、画面に直接描画するのではなく、ビデオメモリにあるバックバッファに描画し、バッファ全体を画面にコピーします。

関連する問題