トップページ > 記事閲覧
Direct3D 11使用時、初期化に失敗すると強制終了する
名前:lltcggie 日時: 2016/08/30 02:07

いつもお世話になっています。 Direct3D 11使用時、初期化に失敗すると強制終了する症状が発生したので報告させていただきます。 症状 Direct3D 11使用時、IDXGIOutputの取得に失敗する環境で強制終了が発生する DXライブラリのバージョン 2016年8月30日01時14分現在での DxLibMakeTest.exe をコンパイルしたライブラリでも発生することを確認 原因 IDXGIOutputの取得に失敗した場合、DxGraphicsD3D11.cppのGraphics_D3D11_Terminate()で呼び出されているMV1TerminateVertexBufferAll()の内部で 強制終了が発生していた。 (具体的には MV1TerminateVertexBufferAll() -> Graphics_Hardware_RenderVertex() -> Graphics_D3D11_RenderVertex() -> D3D11DeviceContext_Map_ASync() -> D3D11DeviceContext_Map() ) DxGraphicsD3D11.cppのGraphics_D3D11_OutputWindow_Add()内 Result = DXGISwapChain_GetContainingOutput( OWI->DXGISwapChain, &OWI->DXGIOutput ) ; でデバッガなどを使いResultの値をS_OK以外の値に変更すれば再現します。 解決策 Direct3D 11の初期化が失敗したにもかかわらずMV1TerminateVertexBufferAll()を呼びだそうとしたのが原因とみて以下の様な修正を加えたところ、 強制終了は発生しなくなりDirect3D 9Exへのフォールバックが動くようになった。 DxGraphicsD3D11.cpp Graphics_D3D11_Terminate()内 // モデルの頂点バッファを解放 MV1TerminateVertexBufferAll() ; ↓ if (GSYS.Setting.ValidHardware) { // モデルの頂点バッファを解放 MV1TerminateVertexBufferAll() ; } 以上です。 よろしければ修正をお願いします。
メンテ

Page: 1 |

Re: Direct3D 11使用時、初期化に失敗すると強制終了する ( No.1 )
名前:管理人 日時:2016/09/01 00:55

ご報告ありがとうございます ご提案の対処法とは異なります( これまでも Graphics_D3D11_Terminate が呼ばれても問題ないつくりに なっていたのですが、頂点バッファの使い方の変更でエラーが発生するようになってしまったので Graphics_D3D11_RenderVertex で頂点バッファのポインタが NULL かどうかのチェックを入れることで対応しました )が、 エラーが発生しないように修正したバージョンをアップしましたので、よろしければお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: Direct3D 11使用時、初期化に失敗すると強制終了する ( No.2 )
名前:lltcggie(解決) 日時:2016/09/01 02:30

こちらでも修正されていることを確認しました。 お忙しい中対応していただきありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存