D3D10始めました -第3回 Texture使用-


今回はテクスチャを読み込んで表示させてみます。

シェーダーファイル

まずはシェーダーのソースを示します。

従来のシェーダーと変わったところと言えば、ピクセルシェーダー内の
サンプラーおよびテクスチャのアクセス部分です。

対象とするテクスチャからのサンプルを、どのように行うか(サンプラ)、どの位置からとるか(UV)という意味のコードになっているように読み取れます。

入力レイアウトおよびデータの変更

テクスチャアクセス用にUVの設定が入りました。

テクスチャの準備

テクスチャは D3DX10CreateShaderResourceViewFromFile 関数を使い、
ビューを取得します。
このビューの中から対象となるテクスチャを取り出すことが出来ます。

  1. ファイルを元にシェーダーリソースビューを作成&取得
  2. リソース(ID3D10Resource)を取得
  3. リソースがTexture2DのデータならID3D10Texture2Dとしてそのリソースを使用できる。

という手順をたどる必要があります。

コードにすると次のようになります。

サンプラーの設定オブジェクト

テクスチャをシェーダーから扱うときにサンプラーを経由するため、
そのサンプラーの設定するためのオブジェクトを準備します。

基本的に設定を構造体に詰めて、生成関数を呼ぶだけなので簡単です。

描画処理

シェーダー等をセットした後に、
サンプラーオブジェクトとテクスチャのビューをデバイスに設定します。

まとめ

デバイス生成時にデバッグフラグをつけていると
デバイスへの設定情報が怪しいときにいろいろなメッセージを出してくれます。
今回のことでもサンプラー設定デフォルトでいいやと判断して、
設定を怠ったところ、警告メッセージが大量に出てきました。

以前のコードではリソースを解放するコードを書いておらず、
内部的にはリソースリークが発生している状況でした。
使ったデータはきちんと解放しましょう。

次回くらいには、DirectX10でのリソースリーク検知について書いてみようと思います。

ソースコード

今回作成した分のソースコードです。
HelloDX10_3.cpp のダウンロード

このバージョンからリソースはきちんと解放しています。

スポンサーリンク

シェアする

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

フォローする