38.Dx12版サンプルを全面書き換え(2)

今回は残りのDx12版サンプルを全面的に書き換えましたGitHubに修正しました。
書き換えたのはSimpleSample005から0010SimpleSampleTestそしてDx12版ライブラリです。

この記事は、
コミットSimpleSample011,012(Dx12版)不具合修正。
から、
コミットSimpleSample008(Dx12版)構造修正。
の間の作業です。間にいくつかのコミットが飛んでいます。
GitHubサイト

https://github.com/WiZFramework/BaseCross

を参照して下さい。

Dx12に関する情報は、マイクロソフト社のDirectX-Graphics-Samplesが主な情報源となります。

マイクロソフト社のDirectX-Graphics-SamplesのGitHubサイトは以下になります。

https://github.com/Microsoft/DirectX-Graphics-Samples

ぜひ、興味ある方はダウンロードしてみてDx12研究を始めるといいと思います。

 

今回の変更のポイント

今回はVPPSDrawContextクラスの削除にともなう、残りのDx12版のサンプルの修正です。SimpleSample012に代表される形で、実装を行ってます。
また、フルバージョンDx12版のほうも、修正しています。もともとテスト用のフルバージョンVPPSDrawContextクラスを使用していたのでそこも変更しました。

今回の修正点で、少し触れておきたいのは、SimpleSample008のコードです。
いくらDx12操作をベタで書きましょうといっても、似たような描画処理を複数記述するのは助長的です。そのため、このサンプルでは、描画用のクラスを別に作成しています。とはいえVPPSDrawContextクラスのように無駄に欲張りな設計にはなっていません。
たとえシンプルバージョンで作成したとしても、どこかでライブラリ的なものは絶対必要になります。
そういう意味でDx12シンプルバージョンでのゲーム制作におけるライブラリ設計の一つのヒントになるかもしれません。

SimpleSample008について

SimpleSample008のDx12版を実行すると以下のような画面が出ます。背景には、頂点カラーをあしらった壁があり、手前に動的に頂点の変更が行われるスプライトがあります。

2016090301

この2つのオブジェクトは使うシェーダも違います。
ですから、これまでの例でいえば、ルートシグネチャパイプラインステートなどもオブジェクト単位で作成し、それぞれのクラス内でDx12処理を行うのが基本です。

しかしながら、この2つのオブジェクトの描画処理の違いは、頂点フォーマットコンスタントバッファシェーダーです。両方ともシェーダリソースは同じように使いますしルートシグネチャも同じ形式で大丈夫です。
ということは、この2つの描画処理をある程度まとめられるのがわかります。
まとめ方にはいろいろ方法がありますが、サンプルでは親子関係の描画オブジェクトを作成します。
親クラスとしてSpriteDrawクラスを作成します。そして派生クラスとしてPCTSpriteDrawクラスPTSpriteDrawクラスを作成します。
クラス名前からの想像できますように、派生クラスのPCTSpriteDrawは頂点フォーマットが位置、カラー、テクスチャを持ちます。PTSpriteDraw位置、テクスチャを持ちます。
この親子関係では、ほとんどの処理を親クラス側で行います。PCTSpriteDrawPTSpriteDrawは、窓口のような役割をします。
シンプルバージョンをもとに独自のライブラリを作成しようとしている人は、何らかの参考になりかと思います。
これらのクラスはSimpleSample008Character.h/cppにあります。

それでは、今回はこの辺で。
次回はDx12版で未記入のサンプルSimpleSample013から015を実装予定です。

カテゴリー

ピックアップ記事

  1. 2016092201
    今回は前回のサンプルを少し機能を追加しまして、いろんなオブジェクトを追加しています。FullTuto…
  2. 2016092001
    前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル003をアップしました。内…
  3. eyecatch
    前回更新から時間がたってしまいましたが、今回はフルバージョンチュートリアル002で懸案となっていまし…
PAGE TOP