5


2

SlimDX Device.Resetが「D3DERR_INVALIDCALL:Invalid call(-2005530516)」エラーでクラッシュする

最近、「VS 2005」から「VS 2008」(Windows XP)にアップグレードしました。 プロジェクトの1つで `SlimDx`を使用しています。 アップグレード後にすべてが正常に機能していましたが、* Recover *機能は例外です。

_ D3DERR_INVALIDCALL:無効な呼び出し(-2005530516) _

[.kbd] #Ctrl#-[。kbd] #Alt#-[。kbd]#Del#を使用し、次に[.kbd]#Escape#を使用して、失われたデバイスをシミュレートします。

void Recover()
{
  try
     {
         if (res.Code == D3DERR_DEVICENOTRESET)
         {
           res = m_device.Reset(m_presentParams); //Crashes on this.
           if (res.IsSuccess)
           {
             m_deviceLost = false;
            }
          }
     }
   catch(Exception e)
   {}
 }

これは「VS 2005」でうまく動作していたため、「VS 2008」と関係がありますか?

3 Answer


8


http://www.gamedev.net/community/forums/topic.asp?topic_id=163751 [このフォーラムの投稿]で役立つ情報を見つけました。 VBに関連するそのフォーラムの質問に注意してください。しかし、これはまだ良い情報です。 Simon O’Connorの全クレジット。

再フォーマットおよびわずかに編集。

_ _ INVALIDCALLは通常、D3Dに渡したパラメーターが無効であるか、要求した操作が不可能であることを意味します。

D3D呼び出しがINVALIDCALLエラーを返した理由を見つける最も簡単な方法は、次のように伝えることです。

  1. D3DランタイムのDEBUGバージョンを使用していることを確認してください インストール済み(SDKのインストール時にオプションが提供されました)。

  2. ランタイムのDEBUGバージョンが有効になっていることを確認してください。 に行く コントロールパネルの[DirectX]アプレットで、[Direct3D]タブを確認します。

  3. DirectXコントロールパネルアプレットで、デバッグ出力を増やす Direct3Dの最大レベル。 Visual BASICを10年以上使用していないので、どのデバッグサポートが利用できるかを忘れてしまい、チェックするためにこのマシンにインストールしていません…​ VBにデバッグ出力ウィンドウがある場合:

  4. プログラムを実行し、INVALIDCALLエラーで失敗させます。

  5. 次に、デバッグ出力ウィンドウのすべてのテキストを確認します。 D3Dはログを記録します 情報、警告、そして重要なエラー。 また、D3D呼び出しが失敗した理由も説明します。

VBに単純なデバッグ出力ウィンドウがない場合は、http://www.sysinternals.comからDebugViewをダウンロードして実行するか、DirectX SDKに付属のコマンドラインデバッグビューアーを使用します。 _ _


1


これは通常、すべてのリソース(頂点バッファ、テクスチャなど)を破棄しなかった場合に発生します


0


void Recover()
{
   try {
            if (res.Code == D3DERR_DEVICENOTRESET)
            {
                 res = m_device.Reset(m_presentParams); //Crashes on this.
                 if (res.IsSuccess)
                 {
                      m_deviceLost = false;
                 }
            }
   } catch(Exception e) {}
}