Direct3Dで、はまった

「Sonic R」というWindows 98時代のゲームがある。手元にCDがある。Windows XPでは動かないと思っていたけど、DirectXウィンドウ化ツールを使うとプレイできた。じゃあVistaでもできるかなあと思って色々やっているうちにはまった。

いつの間にかDirect3Dが使えなくなっている。ゲーム(Sonic Rではない)が起動しない、Aeroが使えない、GPUを使うソフトがエラーを吐く。心当たりは、古いDirectXのインストールを試みたこと。でもはっきりしない。DirectDrawは普通に使えるみたいで、まあ自分のPC用途からしてそれほど不便ではないのだが、やはり気になる。

DirectX エンド ユーザー ランタイム Web インストーラ
これは、既に最新のが入ってると言われて何も起こらなかった。

DirectX End-User Runtimes (June 2010)
Webインストーラではなく本体をダウンロードしてみるが、やはりダメ。ゲームのエラーメッセージが出なくなり「おっ」と思ったが、プレイできないのは同じだった。

DirectX Software Development Kit
藁にもすがる気持ちでSDKを入れてみる。しかしインストールに失敗。後から知ったのだが、Visual C++の再頒布可能パッケージを予めアンインストールしておけば、インストールできた。ちょうどそこでインストールが止まるのだから、このくらい試すべきだった。

グラフィックのドライバを削除して再インストール。これもダメ。個人設定〜画面の設定〜詳細設定〜トラブルシューティング〜設定の変更と辿るのも、このPCではいじれない仕様。ていうか、いじれたとして解決する気もしなかった。

DirectX 診断ツール(「ファイル名を指定して実行」でdxdiag)を使うと、「ディスプレイ」タブで「Direct3D アクセラレータ」だけ使用不可になっていた。

Windows のゲームの問題を自動的に診断および修復する
診断ツール Fix it : Windows の Aero グラスが無効か機能しない問題
これも試した。前者は何も起こらず。後者は、「ビデオカードドライバーがAero効果をサポートしていません」と表示されて、解決せず。

ここまで来て、元々のSonic R付属のDirectXインストーラをもう一度見てみた。そしたら「Direct3Dのハードウェア機能を使用する」というオプションにチェックが入っていない!確かにこの状態でOKボタンを押した記憶があるわww
というわけで解決した。

せっかくなので、レジストリの差分を調べた。レジストリのどこかをいじれば元に戻ると思っていたのだが、どうしてもわからなかったのだ。レジストリの該当する箇所はすぐに見つかった。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\DriversのSoftwareOnlyが1になっていた。これを0にすればよかった。

レジストリの値を変更するためのGUIとしては、DirectXSDKに付属のDirectX Control Panel(dxcpl.exe)があった。ああ、SDKはインストール失敗したのだったよ。「Direct3D 9」タブで、「Software Only」のチェックを外せばよい。