問題タブ [dxgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2695 参照

c++ - バッファーまたは配列を取得するための DXGI DirectX 11 デスクトップの複製を理解するための問題

DXGI デスクトップ複製について知りたいです。私は多くのことを読みましたが、これは Microsoft Web サイトの DesktopDuplication サンプルの一部からコピーしたコードです。私の計画は、他のプログラム用に新しいテクスチャを作成したいので、DesktopImage から Buffer または Array を取得することです。誰かがそれを得るために何ができるかを説明してくれることを願っています.

0 投票する
1 に答える
3166 参照

c++ - C++ および directx 11 エラー dxgi.dll のシンボルがロードされていません

私は数日前に c++ と directx11 を学習し始めました。

だから私はそれの専門家ではありません。なぜそれが起こったのか説明してください...ウィンドウなどを正しく作成しました.Swapchainの初期化も期待どおりに進みまし.

デバッグするたびに、次のエラーが表示されます

ここで何が間違っているのかわかりません.静的ライブラリ(dxgi.lib d3dx11.lib d3d11.lib dxguid.lib D3DCompiler.lib)を含め、ヘッダーファイルとライブラリも正しくリンクしました..

エラーはこの行から発生しているようです

どうすればいいのかわからない..本当にイライラしました。

ここで私を助けてください..私はとても感謝しています

ありがとう

ここに完全なコードがあります

0 投票する
1 に答える
850 参照

windows - IDXGIOutput.GetDisplayModeList から返されるモードのリストで、DXGI_MODE_SCALING_UNSPECIFIED スケーリング モードは何を意味しますか?

フル スクリーン モードをサポートする Direct3D 10/11 アプリケーションを作成しようとしています。そのためには、利用可能なビデオ モードのリストをユーザーに提供する必要があります。また、ビデオ モードの変更を最小限に抑えるために、現在のデスクトップ設定をデフォルトのビデオ モードとして選択するとよいでしょう。

Direct3D 9 でそれを行うのは非常に簡単でした。たとえば、Direct3D 9 で提供される私のモード リストは次のとおりです。

しかし、同じ単純なことを DXGI で行うのは少し複雑です。私を最も混乱させたのは、IDXGIOutpit.GetDisplayModeListメソッドが同じビデオ モードの最大 3 つのコピーを返すという事実です。違いは、提供されるスケーリング モードにあります。

ここにあります:

最初に私が考えたのは、DXGI_MODE_SCALING_STRETCHED = このモードにはストレッチが必要である (バック バッファーが小さい、次にフロント バッファー、解像度が物理的ではない可能性がある)、DXGI_MODE_SCALING_CENTERED = このモードでは画像が画面全体を占有しない可能性がある (バック バッファーが小さい、次にフロント バッファー、ただし、物理解像度は保持されます)、DXGI_MODE_SCALING_UNSPECIFIED = "通常モード" (バック バッファーとフロント バッファーのサイズは一致しますが、物理解像度は保証されません)。つまり、Scaling = DXGI_MODE_SCALING_UNSPECIFIED を持つモードのみを一覧表示する必要があります。

しかし、その後、現在のモードを特定しようとしました。MSDN によると、IDXGIOutput.FindClosestMatchingModeメソッドを使用する場合、いずれかのパラメーターを指定しない場合、このメソッドは現在のデスクトップ設定に引き寄せられ、設定されているパラメーターに優先順位を付け、何らかの優先順位 (ScanlineOrdering>Scaling>Format> を使用) を使用します。 Resolution>RefreshRate) を選択して、他のものを選択します。そこで、デバイスを作成し (フォーマットを DXGI_FORMAT_UNKNOWN として指定できるようにするため)、完全に未決定のモードをこのメソッドに渡しました (Scaling = DXGI_MODE_SCALING_UNSPECIFIED を含む)。

結果は次のとおりです。

ご覧のとおり、現在のデスクトップ モードである 1920x1080x60Hz と一致しません。現在のデスクトップ モードを別のモードに変更しようとしたところ、IDXGIOutput.FindClosestMatchingModeは、デスクトップ パラメータに近いパラメータを使用して最も近い利用可能なモードを選択する傾向があることがわかりましたが、Scaling = DXGI_MODE_SCALING_STRETCHED では、指定された Scaling = DXGI_MODE_SCALING_UNSPECIFIED を単に無視します。自分。

これにより、DXGI_MODE_SCALING_UNSPECIFIED は、少なくともIDXGIFactory.CreateSwapChainメソッドの Scaling パラメーターの無効な値として扱われるという驚くべき結論に至りました (それ以外の場合、モードを選択するために使用されるIDXGIOutput.FindClosestMatchingModeは、ほとんどの場合IDXGIFactory.CreateSwapChainに提供されます)。 、1920x1080x60Hzの選択を拒否しますか?)。

IDXGIFactory.CreateSwapChainは、 IDXGIOutput.FindClosestMatchingModeを内部的に呼び出して、使用する「物理」モードを決定していると思います。しかし、それはどういう意味ですか? Scaling = DXGI_MODE_SCALING_CENTERED または DXGI_MODE_SCALING_STRETCHED を持たないモードをユーザーに提供することはできません。このモードは「物理的な」モードではないためです。つまり、IDXGIFactory.CreateSwapChainはとにかく他のモードを選択しますか?

しかし、なぜ DXGI_MODE_SCALING_UNSPECIFIED が利用可能なモードのリストに返されるのでしょうか? IDXGIFactory.CreateSwapChainメソッドを呼び出してイメージを中央に配置するかスケーリングするかを指定するときにのみ Scaling パラメーターを使用する場合、指定されたモードが「物理的な」モードと一致せず、 IDXGISwapChain.ResizeTargetを呼び出すときに使用されない場合、このメソッドは「物理」モードのみの場合、スケーリング パラメーターがIDXGIOutpit.GetDisplayModeListによって返される 1 つのリストに混在するのはなぜですか?

ユーザーにどのモードを表示する必要がありますか? スケーリング <> DXGI_MODE_SCALING_UNSPECIFIED を持つもののみ? それとも逆のことをするべきですか?従来の Win API を使用する代わりに、DXGI 自体を介して現在のモードを決定する方法は?

誰かが私にそれを説明できますか?MSDN でそれについて明確にされているものはありません。

0 投票する
2 に答える
1095 参照

c++ - DXGI EnumOutputs - DXGI_OUTPUT_DESC がなく、表示モード配列が空です

利用可能な表示モードを取得しようとしたときに奇妙な問題が発生しました。説明させてください...

最初に、利用可能なアダプターを列挙し、次に std::vector にプッシュすると、これは正常に機能します。

次に、これらのアダプターをコンボボックスに入力し、使用するアダプターを選択できるようにします。

出力を列挙して利用可能な表示モードを取得しようとすると、最初にコンボボックスから選択されたアダプターを取得します。

選択したアダプターのアドレスを確認したところ、アダプターの列挙中に取得したものと一致しました。

次に、出力を列挙してその説明を取得しようとします。

そして問題があります。ループは 2 つのモニターを検出し、それらすべてに対して pOutput ポインターを返しますが、GetDesc(odesc) を起動しようとすると、odesc が返されません。pOutput ポインタが指しているように見えます...空のオブジェクト。使用可能な表示モードを列挙すると、モードを確認するバック バッファー形式に関係なく、使用可能なモードが 0 になります。

ありがとう、パトリック

0 投票する
0 に答える
1437 参照

c++ - コンピューターの HDMI ポートに接続されたモニター (または TV) で画像をレンダリングするにはどうすればよいですか?

私は DirectX 10 プログラミングにかなり慣れていないので、限られたスキルで次のことをやろうとしています..

HDMI経由で接続された別の出力デバイス(別のモニター/テレビ)に、あるマシンから画像を表示しようとしています。私はそれについて調査し、DXGI がレンダリング目的で非常に役立つことを知りました。さらに、さらに調査しているときに、このリンクhereに出会いました。メインマシンに接続された複数のモニターに異なる画像を表示する方法を示していますが、そのためには拡張表示が必要です

私の要件は、コードを実行すると、拡張ディスプレイにせずに別の出力デバイスで画像をレンダリングする必要があることです。

私が試みているアプローチは、ビデオ アダプター (私の場合は 1 ) を列挙し、PC に HDMI 出力が接続されているため、利用可能な出力を列挙することです。しかし、拡張ディスプレイを設定しないと、列挙された出力配列で使用可能な出力が 1 つだけ表示され、ディスプレイを拡張すると、そのうちの 2 つが表示されます。

私の知る限り、すべてのビデオ アダプタには HDMI 用のポートが接続されています。

プログラムでそのポートにアクセスし、そのポートを使用して画像をレンダリングできる方法があるのだろうか??

MSDN 以外では、これらの概念のドキュメントや説明はかなり限られているため、どんな助けも大歓迎です。ここに私が持っているいくつかのコードがあります: