問題: IDXGIOutput1::DuplicateOutput メソッドを呼び出すと、切り替え可能なグラフィックスを備えたマシンで個別のグラフィックス コントローラーを使用してアプリケーションを実行すると、DXGI_ERROR_UNSUPPORTED が返されます。
この回答は、この問題に光を当てます。つまり、ディスクリート グラフィックスは画面の一部のみをレンダリングし、データを統合グラフィックス コントローラのフレームバッファに送信します。つまり、すべての出力は常に統合グラフィックス コントローラを経由します。これが、DuplicateOutput が DXGI_ERROR_UNSUPPORTED を返す理由のようです。
winapi ( EnumDisplayDevices 関数) とdirectx ( IDXGIFactory::EnumAdapters メソッド& IDXGIAdapter::EnumOutputs メソッド) を使用してすべての出力とそのビデオアダプターを取得し、切り替え可能なグラフィックス (Intel HD 4600 & NVIDIA 840M) を備えたマシンで比較するサンプルを作成しました。結果は次のとおりです。
私の比較がどれほど正しいかはわかりませんが、winapiは DISPLAY1 が Intel カードに属し、directxは DISPLAY1 が NVIDIA カードに属していると言っていることがわかります。1 つの解決策は、Intel カードの出力を複製することです (すべてがそれを通過するため) が、EnumOutputs はその出力を返しません。
現在、回避策があります。Duplication API を使用するアプリケーションは、統合グラフィックス コントローラを使用して常に実行してください。
質問: DuplicateOutput を、切り替え可能なグラフィックスを備えたラップトップのディスクリート グラフィックス コントローラーで動作させるにはどうすればよいですか? それとも Desktop Duplication API の制限ですか?