DirectX11始めました -第2回-

今回は画面に三角形1つを出すまでをがんばってみます。

今回のプログラムの流れ

準備段階

第1回のものに加え、以下の準備を行います。

  1. 頂点バッファの準備
  2. シェーダーの準備
  3. 頂点入力レイアウトオブジェクトを作成

メッセージループ

画面クリア処理の後、以下の設定を行います。

  1. バッファのセット
    1. 頂点バッファのセット
    2. 入力頂点の情報オブジェクトをセット
  2. シェーダーのセット
  3. 描画命令を発行

頂点バッファの作成

頂点バッファを指定サイズで作成し、
ある初期値をコピーするようにして初期化まで行います。

シェーダーの準備

ピクセルシェーダーもほぼ同様なのでここでは頂点シェーダーだけの説明にします。

まずHLSLで記述したファイルから読み込みコンパイルを行います。
その後、コンパイル後のバイトデータ列からシェーダーを作成します。

なお、頂点シェーダーのバイトデータ列はこの後の処理でも使うので、
即座に解放することは出来ません。

また、DirectX SDK 2009Augustのものでは、
D3D10Blobを使うようになっていました。
DirectX SDK 2010June版では、D3DBlobを使うようです。
新しいバージョンのSDKでは、どうやらD3D[10,11]の部分の番号が取れていく傾向にありそうです。
特に機能拡張のないデータに関してはそのようになるっぽいです。
シェーダーのコンパイルのフラグもD3D10となっていますが、新しいSDKではバージョン番号が取れている物を使用することが出来るので、
DirectX11なのにDirectX10の設定を使うことに関する違和感は軽減されるかと思います。

手元が2009Augのため、DirectX11RTM版のSDKでは~という話です。
こんな変更もあるし、開発に使用するSDKのバージョンも再検討したほうが良さそうです。

自分がDirectX SDK 2009Augなのは、Windows7環境でDirectX9が正しく動作する最低バージョンだからです。

頂点入力レイアウトの作成

従来でいう頂点宣言になります。
頂点データがどのような構造で入力されていくかを示すオブジェクトになります。
この情報を作成するのに、頂点シェーダーのバイトデータ列が必要になっています。
このあたりはDirectX10と変更は特にありません。

描画処理

画面のクリア後には、今まで作成したオブジェクトをセットしていきます。

この部分も例によって、ID3D11ImmediateContextに対して設定し、描画コールを行います。
デバイスのオブジェクトではなく、コンテキストに対する描画発行となっています。
また、シェーダーのセットでも若干引数が増えました。
今回は使用していないので、ゼロが設定してあります。

シェーダーコード

現在のシェーダーコードはこんな感じです。

頂点シェーダー

ピクセルシェーダー

感想

DirectX SDK 2009Augを使用しており、これはDirectX11 SDK RTM版といえます。
そのため、シェーダー部分を筆頭に、D3D10, D3D11と入り乱れた感じで初期化になっています。
新しいSDKならこのあたりは解消されているらしいので、プログラムの見やすさは良くなると思います。

あと、算術関連がD3DXではなくxnamath.hに入るようになっていました。
この部分は大きな変更と言えそうです。
“XNA Math”だからプレフィックスは XM*** ということっぽい(XMFLOAT3 とか)。

ソースコードと画面

今回のソースコードです。 HelloDX11_2ソースコード

シェアする

  • このエントリーをはてなブックマークに追加

フォローする