DirectX11 DirectXTexでテクスチャ対応

テクスチャを貼ったポリゴンを表示してみようとしてサンプルプログラムを見てみるとなんか以前作成したものと様子が違う。D3DX11CreateTextuteFromFileで簡単にテクスチャ画像が読み込めるはずだったのに。
調べてみるとD3DX11系の便利関数は、SDKから削除されていました。使用する場合は個別に公開されているライブラリ
DirectXTex http://directxtex.codeplex.com/
DirectXTK http://directxtk.codeplex.com/
を利用します。
今回は、テクスチャ関連の機能を使うため、DirectXTexをダウンロードして、作成したプログラムに組み込みました。

組み込み方ですが、プロジェクトファイルを作成しているプログラムのソリューションに追加する方法もありましたが、勉強のためにlibファイルを作成してリンクする方法で行いました。
VS2012でDirectXTexをコンパイル、ライブラリファイルの作成。DirectXTexに関してはデバッグする必要もなさそうなので、ReleaseビルドしたDirectXTex.libファイルだけを使うことに。
そしてコンパイル&リンク(Debugビルド)すると

とエラー発生。
エラー内容を調べてみると
_ITERATOR_DEBUG_LEVEL:STLコンテナ(vectorなど)の範囲チェックを行うかどうかのdefine定義
‘RuntimeLibrary’:標準ライブラリのデバッグ機能の有無、リンク方法
これが一致していないためプログラムを正常に動作しないとうエラーでした。
面倒ですが、DebugとRelease用のライブラリを作成して、リンクするようにします。
エラーを出さないようにするには⇒VS2012 ライブラリ(lib)のリンク _ITERATOR_DEBUG_LEVELとRuntimeLibrary
以前のVisualStudioでは、エラーは出ずにリンクできしまい実行時に意味不明なバグで強制終了することがあっため、コンパイルの時点でエラーになってくれるので助かります。(エラーが出たときはムカつきましたが…)

追記
上で”意味不明なバグ”と書きましたが、原因として考えられるのは
デバッグ用newで作成したクラスをリリース用deleteで削除(またはその逆)
異なるSTL実装間でのコンテナやり取り(データ構造が違う可能性あり)
などがあり、予測不能なバグが発生します。

広告

「DirectX11 DirectXTexでテクスチャ対応」への3件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証:数字を入力してください(必須) * Time limit is exhausted. Please reload CAPTCHA.