17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows8でのDirectX11開発は準備が面倒臭い

Last updated at Posted at 2014-08-19

自分はWindows7でDirectX9を使っていて、そこからの移行だったので、かなり時間がかかってしまいました。

#D3DXの時代は終りを迎える
DirectXを使った開発をしようと思えば、今まではSDKをダウンロードして使っていました。
が、Windows8からはSDKが最初から入っているというスタイルになっています。
正しくは、DirectXSDKWindowsSDKに統合されたようです。
VisualStudio2012以降に付属してきます。
単体でWindowsSDKを入れることも出来るようです。(2015/03/16更新)

ダウンロードする手間は省けるのですが、そのSDKには、今まで自分がお世話になっていたD3DX系が入っていません。
これで困ることは、

  • テクスチャの読み込みが出来ない。
  • シェーダのコンパイルが出来ない。
  • ベクトルや行列の算術系関数が1つもない。

と、非常に困ることになってしまいます。
どうやらMicrosoftは今後、D3DXを廃止するとのことです。

以下に解決策を書きますが、めんどくさい人は、SDKをダウンロードして使ってください。

#解決策

上に書いた3つの問題をクリアするために、Microsoftは別の手段を用意してくれています。

  • テクスチャの読み込みが出来ない。→DirectXTex使え。
  • シェーダのコンパイルが出来ない。→D3DCompiler使え。
  • ベクトルや秒列の算術系関数が1つもない。→DirectXMathかXNAMath使え。

とのことです。(他にもDirectXTKというのもあるようですが、それは使ってません。)

算術系は、今回はXNAMathを使うことにします。理由は、DirectXMathだと動かないCPUがあるかもしれないからです。(殆ど無いと思いますが)
詳しくはここを参照してください。(英語)
http://msdn.microsoft.com/en-us/library/windows/desktop/ee418725(v=vs.85).aspx

ちなみに、XNAライブラリが開発中止になったので、今後はDirectXMathを推してくると思います。
(DirectXMathはXNAMathのラッピングだと聞いたんですが、どうなんでしょう?)

#導入
DirectXTexとXNAMathはダウンロードする必要があります。
XNAMathは最新が2.05になります。
D3DCompilerはSDK同様最初から入っていますが、dllが必要になります。
dllはSDKのどっかにあると思います。

・DirectXTex
http://directxtex.codeplex.com/releases/view/125470

・XNAMath 2.05
http://blogs.msdn.com/b/chuckw/archive/2012/06/22/xna-math-version-2-05-smoothing-the-transition-to-directxmath.aspx

XNAMathに関しては、ヘッダをインクルードするだけでいいです(.inlもいるので注意)
また、単体でインクルードするだけではエラーになるので、
先にWindows.hをインクルードしておく必要があります。


DirectXTexについてはちょっと特殊で、解凍したらそのまま使えるというわけではありません。
いくつかVisualStudioのソリューションファイルがあると思います。
自分が開発するVisualStudioのバージョンにあったものを開いて、そのままビルドしてください。

すると、新しくbinフォルダが出来ると思います。
binフォルダ内にライブラリができているので、それをリンクしてください。
ヘッダはDirectXTexフォルダ内にあります。(.hと.inlファイルがあります)

これでDirectX11での開発が可能になります。

##D3DXからの移行
今まで11での開発にD3DXを使っていた人は、大きく書き換える必要がありますが、
処理自体はそんなに変わりません。
が、テクスチャ読み込みの処理が若干変化するようです。
私は11ではD3DXを使ったこと無いのでよくわかりません。

#Windows7への対応
付属してくるSDKのDirectXのバージョンは11.1です。
これに対応しているOSは現在、Windows8Windows7 SP1 + KB2670838(WindowsUpdate)
になっているので、Vista以前のOSには根本的に対処できません。
(Vistaは11.0まで、XPは9.0cまでしか動きません)

が、上記の設定、環境で作ったものがWindows7上で普通に動くのか、というと、
そうでもないようです。(私は作ったゲーム動きませんでした・・・)

Windows7と8では互換性が失われていることも多いみたいです。(XAudioもそうでした・・・)
プロジェクトのビルド構成を新しく作って、Windows7と8それぞれのDebugとReleaseを作るといいかもしれませんね。
(7では2010JuneのDirectSDKを、8ではWindowsSDK上のDirectSDKをリンクする感じ?)

###蛇足
7はまだまだユーザが多いので、**非常に面倒ですが、**上手く回避して対応することをおすすめします。
Windows10が出たらどうなるんでしょうね・・・。

質問やご意見、ご指摘ありましたらお願いします。

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?