自分はWindows7でDirectX9を使っていて、そこからの移行だったので、かなり時間がかかってしまいました。
#D3DXの時代は終りを迎える
DirectXを使った開発をしようと思えば、今まではSDKをダウンロードして使っていました。
が、Windows8からはSDKが最初から入っているというスタイルになっています。
正しくは、DirectXSDK
はWindowsSDK
に統合されたようです。
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は現在、Windows8
とWindows7 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が出たらどうなるんでしょうね・・・。
質問やご意見、ご指摘ありましたらお願いします。