2013/06/
09(日)  Windows7 + VisualStudio2012 + DirectX11
HDD交換のため環境をインストールしなおしたのは先日書いたとおり。

VisualStudio2012(以下VS2012)が使えなくなった状態でVisualStudio2010(以下VS2010)のバグにもう耐えられない(これがHDD換装の要因)とも先日書いたとおり。

そのため、今回はVS2010はインストールせず、VS2012のみインストールしていた。
ところがこの環境ではDirectX周りでコンパイルが通らなくなってしまった。
今日はその対応で非常に悩まされたので書いておく。


以前もVS2012におけるDirectXの扱いについて少し書いたが、そのときはプラットフォームツールセットを2010にすれば、今まで通り(もちろんDirectX SDKは別途インストール済み)使えるはず、ということしか書いていなかった。

しかし、今回はVS2010をインストールしていないのでその手は使えない。
非常に困った。

それにしても、DirectX SDKの対応バージョンがわかりづらいので少しまとめてみます。

ランタイムver  win7  win8  対応SDK  備考
11.1 × Windows SDK for Windows 8  
11 ○  ○  Windows SDK for Windows 8
(以下WinSDKfor8)
Windows7でも使えるらしい。
VS2012をインストールすると一緒にインストールされる。
DirectX SDK (June 2010)
(以下DXSDK2010)
VS2010対応最終アップデートバージョン?

OSの対象はWin7なのでDirectX11.1は今回省く。

問題は、同じバージョンであるDX11のSDKの扱い。

今回試したのが、上記したWinSDKfor8 とDXSDK2010。
しかし、DXSDK2010を使おうとすると、どうしてもWinSDKfor8と競合して警告が出まくる。

おそらくDirectX SDKが含まれていない旧Windows SDKとDXSDK2010の組み合わせならばいけると思うのだが、WinSDKfor8はWindowsSDKとDirectXSDKで共有部分があるようだ(特にWinerror.h)

DXSDK2010側で衝突したヘッダなどを回避させてみたが、そうすると今度はDXSDK2010側で未定義エラー。
(やろうと思えば該当警告を無効にできるけど、そういう力技はしたくない)

ということで、WinSDKfor8のWindows部分のみと旧SDKであるDXSDK2010の併用はできない…、少なくとも俺の実力では解決できないことがわかった。


ところで、なぜ旧SDKに拘るのかというと、DXSDK2010とWinSDKfor8のインターフェイスが、同じDirectX11のSDKであるにも関わらずまったく違うのだ。

まったくというと語弊があるかもしれないが、少なくとも大幅に修正が必要となる。
おそらく、DX11.1と似た仕様だと思われる。

そのため、同じDirectX11向けのコードなのに、まったく違うコードを書かなければいけない。
なので、できればDXSDK2010を使いたい。
かといって、旧WindowsSDKは、また環境がおかしくなるかもしれないのでインストールしたくない!

まったく、勘弁してくださいよ、Microsoftさん。

100歩譲って11.1対応のため、ってなら少しは納得できるが、機能がまったく同じなのにSDKバージョンで仕様がまったく違うってのはどうなのよ?

よくクソ扱いされるMicrosoftですが、それでも俺はMicrosoftの功績を称え、クソ扱いはしてきませんでした。
でもやっぱりMicrosoftはクソでした。

もし、この今回の指摘が俺の勘違いなら、クソ扱いは撤回します。
というかクソ扱いを撤回できる状況になってくれ。
解決策の情報を求む。



とまぁ、現状仕方ないので、SDKバージョンでの処理わけと、MSの仕様変更に振り回されないよう、自前実装できるところは自前実装への切り替えで処理することにしました。

ただ、旧DXSDKの対応は”とりあえず”動くように、といった程度だったので、どこまで対応してるか怪しいんだよね。
かといって、今から完全対応する余裕も環境もないし。


予定外の作業で時間がとられる〜。


今日の作業
CorePLi
  • チャンク関連修正
  • DirectX関連修正