FC2ブログ

DirectX用語① スワップチェーン~フロントバッファとバックバッファ

 そろそろ1ヶ月経つので更新しました(おい)。
 今回から、仕組みが複雑な上、「これ1冊あれば大丈夫」という参考書が少ない(というか、多分ない)、DirectXの用語講座を開くことにしました。ただし、僕自身は3Dのプログラミングをやったことがないので、Direct3Dの中では2D描画で知っておくべき用語のみを載せておきます。また、僕自身DirectXの初心者なので、説明した内容が正確さを欠いているのも多々あると思います。もし間違いがあったなら、コメント等で教えてくださればうれしいです。
 ……あれ、3Dやってなくて経験も薄いのに、一体僕はどうしてこんな用語講座を作ろうとおもったんだろ?
 ……気にしたら負けってやつか、よし!
 といわけで(?)今回は、スワップチェーンについて話したいと思います。しかしその前に、次の二つの用語を知っておく必要があります。
  • フロントバッファ:画面に表示するバッファ
  • バックバッファ:次に画面に表示しようとするバッファ
 バッファと聞くと初心者には分かりにくいかもしれませんね。バッファとは、要するにデータのことです。フロントバッファもバックバッファも、画面に表示したい「絵」のデータのことです。上に書いてあるように、パソコン画面(※ウィンドウの中)にはフロントバッファが映ります。たとえば、フロントバッファに勇者がマップ上を歩いている絵のデータが入っているなら、画面にも優者がマップ上を歩いている絵が映ります。
 それに対して、バックバッファは次に表示しようとする絵のデータを入れておくものです。普通のゲームだとアニメーションが必須ですよね。なので毎回、画面に表示する絵(フロントバッファ)を書きかえなければなりません。しかし、フロントバッファはたいてい、たくさんの画像を貼り合わせて作ってあります。たくさんある画像のうちのひとつだけを書きかえると、その部分だけが変更されます。しかし、今画面に表示しているフロントバッファをそのまま書きかえると、その1部分だけの変更も画面に現れるはずですね(実際にそんなことをやったことないので、断言はできませんけど)。それはまずいですよね。だって、一般的なゲームで画面の一部だけが変わったりしていますか? いいえ、してません。全体がいっぺんに書きかえられています。RPGでキャラの移動によって画面がスクロールするとき、マップとキャラクターが別々に書きかえられていますか? いいえ、キャラとマップは同時に変化しています。ともかく、ひとつひとつ画像が書きかえられるというのは問題です。多分、処理も重くなるでしょう。
 そこでバックバッファが登場します。今表示しているフロントバッファとは別の、バックバッファというバッファを用意しておきます。画像を書きかえる場合、フロントバッファではなくバックバッファに画像を表示します。すべての画像を貼り合わせたら、バックバッファをフロントバッファにします。こうして、一気に画像を書きかえているわけです。
遅くなりましたね、ここからスワップチェーンの話をします(笑)
 上で述べたように、バックバッファをフロントバッファにして画像を書き換えます。その仕組みがスワップチェーンです。
  • スワップチェーン:フロントバッファとバックバッファを使って、画面を更新する仕組み。
 ただし、バックバッファをフロントバッファにする、と一言にいってもその方法はいくつかあります。スワップチェーンでは、その方法が重要なのです。その方法は、以下の3つです。
  • コピー:バックバッファをフロントバッファにコピーする(バックバッファの数は必ず1)
  • フリップ:バックバッファのアドレスとフロントバッファのアドレスを交換する。(バックバッファの数は必ず2以上)
  • ディスカード:方法をDirectXに任せる(ただし、画面は毎回、全面書き換えしなければならない)
 基本的に、コピーはウィンドウモード、フリップはフルスクリーンモードで使われるそうですが、まあディスカードを指定しておけばいいです。
 スワップチェーンの方法(スワップエフェクト)は、D3DPRESENT_PARAMETERS構造体のSwapEffectというメンバで設定します。SwapEffectにD3DSWAPEFFECT_DISCARDを指定すれば、スワップチェーンの方法をDirect3Dに任せる(ディスカードに設定する)ことができます。


 という感じになりました。こんなに長くなるとは……。
 ひょっとしたら、これで終わりになるかもしれないorz
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

プロフィール

ケーケー

Author:ケーケー
趣味:自作小説執筆、プログラミング、電子工作
好きなゲーム:ぷよぷよ

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR