SlimDXに手を加えた個所一覧

  • JoyPadからのBufferedInputが使えなくなるデグレードに対する処置。slimdx_timestampsupport_diff.txt
  • POV/HAT入力配列を全て-1(センター)に初期化するコードを追加 (r132/r143)
  • DIDEVICEOBJECTDATA構造体のdwOfsメンバ相当の値を取得できるプロパティを、SlimDXのJoystickState()に追加。POV/HATが離されたことを検出するため。(r264)
  • VS2013CommunityUpdate4でビルドできるようにするための修正 (r814)

SimpleFrameworkに手を加えた個所一覧

  • ウインドウリサイズ対応で、WndProcのWM_SIZINGイベント処理を追加。また、AeroSnap実行時に落ちないよう、対応するイベント処理(イベントを無視)を追加。(GameWindow.cs)
  • ウインドウリサイズ対応で、BackBufferを640x480固定にして、物理解像度=640x480を維持。(GraphicsDeviceManager.cs)
  • ウインドウリサイズ対応で、WndProcのMENU_VIEWイベント処理を追加し、システムメニューへ、640x480に戻す処理を追加。(GameWindow.cs)
  • ウインドウがアクティブでないときのスリープ時間設定処理を追加。VSync時にはスリープしないよう注意。(GraphicsDeviceManager.cs)
  • USBサブモニタなど、GetDeviceCaps()でGPFが発生する場合への対応。(Enumeration9.cs)

SlimDXの、VS2008でのビルド方法(備忘録)

  • まずはFROMさんの説明を参照のこと。その上で、以下のポイントに注意
    • ビルドの構成にPublicを指定する
    • 署名に用いるキーペアの生成方法:
      • すべてのプログラム-Microsoft Visual Studio 2008-Visual Studio Tools\Visual Studio 2008 コマンド プロンプト、として、VisualStudioの環境変数設定済みのDOS窓を開く
      • sn.exe -k d:\slimdx_yyagi.snk などとして、キーペアを生成する
      • VisualStduio上で、ソリューションのプロパティから リンカ-詳細-キー ファイル、で先のキーペアを指定する
    • ビルド後のイベント: ファイルパスを全部"~"でくくる。以下例:
      copy "$(ProjectDir)\..\docs\SlimDX.xml" "$(OutDir)"
      mt -manifest SlimDX.dll.x86.manifest -outputresource:"$(TargetPath)";2
      sn -R "$(TargetPath)" D:\slimdxKey_yyagi.snk
      

SlimDXの、VS2013でのビルド方法(備忘録)

  • VS2013CommunityUpdate4をインストールする (Windows SDKも同時にインストールされる)
  • DirectX SDK June 2010をあらかじめインストールしておく
  • ソリューション build\vs2010\SlimDX.sln を、VS2013で読み込む。ソリューションのコンバートが発生するので実行する。
  • SlimDXソリューションのプロパティを開き、Effects11の構成を"Release"に、SlimDXの構成を"Public"にする。プラットフォームは、どちらもWin32を選択する。(x64にはしないこと)
  • Effects11プロジェクトのプロパティを開き、構成プロパティ-VS++ディレクトリの、インクルードディレクトリに $(DXSDK_DIR)Include を追加する。「親またはプロジェクトの規定値から継承」のチェックは入れたままにしておく。(これで、$(VC_IncludePath)と、$(WindowsSDK_IncludePath)が継承される)
  • 同様に、ライブラリディレクトリに $(DXSDK_DIR)Lib\x86 を追加する。「親またはプロジェクトの規定値から継承」のチェックは入れたままにしておく。(これで、$(VC_LibraryPath_x86)と、$(WindowsSDK_LibraryPath_x86)が継承される)
  • SlimDXプロジェクトのプロパティでも、Effects11と同じように、インクルードディレクトリとライブラリディレクトリの設定を行う。
  • また、SlimDXプロジェクトのプロパティの「構成プロパティ」-「全般」の、「ターゲット名」を、SlimDXc_net20x86_Jun2010 に変更する。(これをやらないと、SlimDXc_net20x86_Jun2010.dllでなくSlimDX.dllが生成され、ファイル名をSlimDXc_net20x86_Jun2010.dllにリネームしても内部の厳密名がSlimDX.dllのままとなり、DLLの参照時に非常に苦労することになる)
  • また、SlimDXプロジェクトのプロパティの、リンカーの、全般のバージョンを、4.0.10.43 などから 4.0 にする。(2桁しか通らない模様)
  • また、詳細設定の、「キー ファイル」で、署名用のファイルを指定する(~~.snk)。署名ファイルの生成方法は、sn.exe -k d:\slimdx_yyagi.snk などとして作成する。
  • また、署名に使ったファイルに対して、sn -T ~~.snkを実行し、出力される「公開キー トークン」の値を控えておく。
  • SlimDXプロジェクトのプロパティの、ビルド イベントの、ビルド後のイベントについて、コマンドラインとして以下を指定しておく。$(TargetPath)と署名ファイル名、どちらもダブルクォーテーションでくくるのがポイント。(例: "C:\Users\yyagi\Documents\SlimDXKey_yyagi.snk" など)
    sn -R "$(TargetPath)" "先ほど指定した署名ファイルのフルパス名"
    
  • VS2003のツール-オプションの、デバッグ-エディト コンティニュで、「エディト コンティニュ」のチェックボックスを外す。
  • ソリューション全体をビルドする。DirectX関係のマクロ二重定義のwarningが大量に発生するが、無視する。
  • build\vs2010\x86\Public\ 以下に SlimDXc_net20x86_Jun2010.dll が生成されるので、これを実行フォルダ\dllにコピーする。
  • VS2013でDTXManiaソリューションを開き、FDKのSlimDXの参照設定をやり直す。(実行時フォルダ\dll\SlimDXc_net20x86_Jun2010.dllを参照する)
  • 更に、DTXManiaプロジェクトのapp.configを編集する
    <?xml version="1.0"?>
    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
        <supportedRuntime version="v2.0.50727"/>
        <supportedRuntime version="v1.1.4322"/>
        <supportedRuntime version="v1.0.3705"/>
      </startup>
    
      <runtime>
        <loadFromRemoteSources enabled="true"/>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="dll"/>
          <dependentAssembly>
            <assemblyIdentity name="SlimDX"
                                          publicKeyToken="53d0e4ef1f1579f5"
                                          culture="neutral" />
            <codeBase version="1002.0.10.43"
              href="dll\SlimDXc_net20x86_Jun2010.dll"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

<dependentAssembly>~</dependentAssembly>のところがポイントで、 publicKeyTokenのところに、先ほど控えた値を転記する。 バージョン名やファイル名は、それぞれ正しい値を設定する。 (ここまで指示通りに実行していれば、上記の通りで変更しなくてよいはず) ここを間違えると、DTXManiaGR.exeのデバッグ実行時に、FileNotExceptionが発生して アプリ起動できない。Releaseビルド実行だと、何もなくアプリが終了してしまう。 (DTXManiaLog.txtの更新すら発生しない)

  • DTXManiaソリューションをリビルドする。

これで対応完了のはず。