トップページ > 記事閲覧
DirectX11使用時のデバイスロスト・復帰について
名前:uncle 日時: 2026/03/19 10:11

お世話になっております。 DxLib側ではデバイスロストの復帰に対応しておられると認識していたのですが、DirectX11使用時に復帰しない事を自環境で確認しております。 コードを確認したのですが、 DXGISwapChain_ResizeBuffersとDXGISwapChain_Presentのどちらも-1を返して即時終了という形になっており、復帰処理が行われていないように見受けられます。 呼び出し元も確認しましたが、エラーチェックをして復帰する処理は見当たりませんでした。 少なくともこの2か所はチェックしておく必要があると認識しているのですが如何でしょうか? 以上、ご確認よろしくお願いいたします。
メンテ

Page: 1 |

Re: DirectX11使用時のデバイスロスト・復帰について ( No.1 )
名前:管理人 日時:2026/03/20 04:29

> DxLib側ではデバイスロストの復帰に対応しておられると認識していたのですが、DirectX11使用時に復帰しない事を自環境で確認しております。 DirectX9 ではフルスクリーンで起動したソフトを ALT+TAB で別プロセスにフォーカスを切り替えただけでも デバイスロストしていたのでデバイスロスト対応が必須だったのでデバイスロストの検出と復帰に対応したのですが、 DirectX11 ではフォーカスを切り替えた程度ではデバイスロストしなくなったのでデバイスロスト対応はしていません 実際の所 DirectX11 では通常のゲームプレイでデバイスロストするような状況はあまり無いと思うのですが、 デバイスロストが頻繁に発生するような環境での使用を予定されているのでしょうか?
メンテ
Re: DirectX11使用時のデバイスロスト・復帰について ( No.2 )
名前:uncle 日時:2026/03/20 09:28

ご返信ありがとうございます。 「頻繁に発生する環境を想定しているか」という意味では、必ずしもそうではありません。 ただ、こちらとしては発生頻度の高低とは切り離して、製品として最低限の動作保証の観点から、 デバイスロスト発生時にも描画停止や異常終了に至らず、復帰できることが望ましいと考えております。 DirectX9と比較してDirectX11では発生しにくいという点は理解しておりますが、 ユーザー数が増えれば、発生頻度が低い事象であっても実際に遭遇する方は一定数出てくると考えております。 そのため、本件は頻度の問題というより堅牢性の問題として認識しております。 そのうえで、DirectX11における本件は現状仕様として対応しないという整理なのか、今後対応をご検討いただける可能性があるのかをご確認いただけますと幸いです。 よろしくお願いいたします。
メンテ
Re: DirectX11使用時のデバイスロスト・復帰について ( No.3 )
名前:管理人 日時:2026/03/21 06:23

DirectX11 でデバイスロストが発生するとなると、グラフィックカードが壊れかけていて 高負荷になった際に動作不良を起こしてデバイスがロストするとか、USB接続型のディスプレイ出力デバイスを 出力先として実行している途中にそのUSB接続型デバイスをUSBポートから外す等の ある程度不具合が発生してもおかしくない状況になると思いますので、 ユーザー視点でも仮にそのような状況になった際にソフトが動作不良を起こしても そんなに反感は覚えないと思います ( 実際に2014年頃にDXライブラリが DirectX11 に対応して以降、デバイスロスト対応に関する ご要望を受けたことや、デバイスロスト非対応であることに関するクレームを受けたことはありません ) DXライブラリは主にフリー作品やインディー作品等の小規模なゲームソフトで使用されることを想定しているので 『堅牢性』や『動作保証』という言葉が登場するような高い品質が求められる製品での使用はあまり想定していません (・・; ( 『クラッシュしたら再起動すればいいや』くらいのノリが許される作品での使用を想定しています… ) とはいえ、デバイスロスト対応が簡単に実現できそうであれば対応してみようと思いますので、 よろしければ uncleさんが試されたデバイスロストを意図的に発生させる方法を教えて頂けないでしょうか? m(_ _)m
メンテ
Re: DirectX11使用時のデバイスロスト・復帰について ( No.4 )
名前:uncle 日時:2026/03/21 09:51

ご説明ありがとうございます。スタンスは理解いたしました。 確かに、デバイスロストがアダプタの着脱やドライバ更新などでしか発生しないのであれば、自分も「そこは諦めてもよいライン」と考えております。 ただ、デバイスロストにはTDRも含まれます。 このあたりはユーザー環境に依存する部分もあるため、「レアケースだから対応しない」と切り捨てられるほどのレアケースとは言いにくい、と考えています。 >uncleさんが試されたデバイスロストを意図的に発生させる方法を教えて頂けないでしょうか? 正確には意図的に発生させる方法を確立しているという訳ではなく、 長時間起動しているとデバイスロストが発生することを確認している、という状況になります。 確立方法を確認した所、 設定 → システム → オプション機能 → 「機能を表示」を開き、 追加された機能一覧に「グラフィックス ツール」が表示されていなければ、「使用可能な機能を表示する」から「グラフィックス ツール」を選択してインストール、 その後、検索窓に「developer command prompt」と入力して"管理者"で実行、「dxcap -forcetdr」を実行すれば疑似的にではありますが再現可能な事を確認しました。 ご確認の程、よろしくお願いいたします。
メンテ
Re: DirectX11使用時のデバイスロスト・復帰について ( No.5 )
名前:管理人 日時:2026/03/22 01:55

デバイスロスト再現方法をご教示いただきありがとうございます、手元でも現象を再現できました 思いの外デバイスロスト対応が容易にできたので、Direct3D 9, Direct3D 11 どちらも対応してみました uncleさんの環境でも正常に動作するか、よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > ただ、デバイスロストにはTDRも含まれます。 確かに、ここ数年で頻発するようになりましたね… ( 手元に GeForce系しかないので Radeon や Intel ではどうなのかは不明ですが… ) 安定動作の面では昔より状況が悪くなっていますね… (- -;;
メンテ
Re: DirectX11使用時のデバイスロスト・復帰について ( No.6 )
名前:uncle(解決済み) 日時:2026/03/22 12:10

自環境でも復帰できることが確認できましたm(_ _)m ご対応ありがとうございました、 本件はクローズさせていただきます。 備考 ・SetGraphicsDeviceRestoreCallbackFunctionも正常に動作していました。 ・フォントの見た目に軽微な差異や、一部画像にチラつきが発生していましたが、フォントやシェーダーのリロードを行えば解決しました。
メンテ

Page: 1 |

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

   クッキー保存