問題タブ [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.
c++ - インクルード ファイルを開けません: 'dxgi1_2.h': そのようなファイルまたはディレクトリはありません
ヘッダー ファイル "dxgi1_2.h" を VC++ コードにインクルードしていますが、エラーが発生しています。
これは、DX11に関連するMSFTから何かをインストールする必要があるためです。(このヘッダー ファイルには Win8 SDK で十分ですか) このエラーを修正する方法を教えてください。
windows-7 - DXGIおよび2+フルスクリーンディスプレイ(Windows 7)
2つのフルスクリーンDirect3D表示が必要なプログラムを開発しています。ドキュメントによると、ウィンドウモードでスワップチェーンを作成してから、フルスクリーンモードに切り替える必要があります。これはWindows8では正常に機能しますが(現在、Alt-Enterを使用して切り替えを行っています)、Windows 7では機能しません。Windows7では、この問題と同様の問題が発生します。フルスクリーンに切り替えても問題なく動作しますが、以前はフルスクリーンで正常に機能していたもう一方の画面は、フルスクリーンを解除するまで黒くなります(同じフルスクリーン解像度のままになります)。
このタグで大まかなプロトタイプの私の混乱を見つけることができます。
どうやら過去に特にWindows7に関連する他のバグがあったようです...しかし、私はわずかに異なる問題を抱えているようです。
また、リンクされた質問で提案されているようにDWMコンポジションを無効にしようとしましたが、問題を解決するために何もしませんでした。
この問題について提供できる情報が他にある場合はお知らせください...最悪のシナリオは、マルチモニターのフルスクリーンセットアップで正常に機能するように見えるDX9にフォールバックすることだと思います...
windows - DXGIでモニター/出力の現在の表示モード(解像度、リフレッシュレート)を取得するにはどうすればよいですか?
マルチモニターのフルスクリーンDXGI/D3Dアプリケーションを作成しています。スワップチェーンを作成する準備として、使用可能な出力とアダプターを列挙しています。
DXGIのIDXGIFactory::CreateSwapChainメソッドを使用してスワップチェーンを作成する場合、幅、高さ、リフレッシュレートなどの詳細を示す、タイプDXGI_MODE_DESCのバッファー記述を含むスワップチェーン記述を提供する必要があります。出力を確認するにはどうすればよいですか。現在に設定されています(または、出力の現在の表示モードを確認するにはどうすればよいですか)?このスワップチェーンで全画面表示にしたときに、ユーザーの解像度やリフレッシュレートを変更したくありません。
direct3d - DXGI: 出力 (モニター) から正しい表示モードを取得しようとしています
私は現在、厄介な小さな問題で立ち往生しています。DXGI モードの desc をゼロにするアプリケーションを開発しました。構造体と FindClosestMatchingMode() を呼び出して、宣伝されているように、「デスクトップ解像度に引き寄せられます」。
ラップトップが独自のディスプレイで完全に実行されている場合、これは正常に機能します。別のモニターを接続するとすぐに、暴走します。デスクトップを拡張した場合でも、ラップトップ モニターの解像度は正しく取得されますが、接続されているもの (1080p を実行) では 800*480 が優先されます :) (確かに、貧乏人の 16:10 ですが...)
クローン化/結合されたモニターで同じことを行うと (結果として 1 つの出力デバイスになります)、それらの解像度が同じであっても、同じ 800*480 がらくたになります。
何を与える?また、DXGI を介してディスプレイの現在のモードを適切に取得する方法や、この問題に対するまったく異なるが機能的なアプローチへのポインターを見つけた人はいますか?
D3D9 時代は生活が楽だった =)
- アップデート
外部モニターに属する IDXGIOutput インスタンスで行われた FindClosestMatchingMode() 呼び出しは、ネイティブの解像度が同じであっても、内部ディスプレイとは異なる動作をする (ほとんどの場合は明らかに間違っている) ことが判明しました。それに加えて、他のシステムにはこの問題はありませんが、ドライバーを含めてこの特定のラップトップをサポートすることはできません.
古き良き設定ダイアログの時間です。
c++ - CreateDXGIFactory1 を呼び出すときの E_NOINTERFACE
私は一般的にC++には比較的慣れておらず、Windows開発には非常に慣れていません。
DXGI ライブラリを使用するプログラムを作成しています。コンパイルは正常に行われますが、実行可能ファイルを実行すると、CreateDXGIFactory1 からの HRESULT が 0x80004002 または E_NOINTERFACE として出力されます。
ある種のライブラリが不足していますか、それともここでより深い問題がありますか?
私が使用しているコードは次のとおりです。
出力は「エラー: 0x80004002」です。
c++ - コンピューター上のモニターの列挙
コンピューターに接続されているモニターを列挙する 7 つの異なる方法を見つけました。ただし、すべてのソリューションで異なる結果が得られます (モニターの数と各モニターの情報)。
これらのソリューションは次のとおりです。
有名なものを使って
EnumDisplayDevices
Windows Management Instrumentation (WMI)の使用:
次のクエリを使用:SELECT * FROM WmiMonitorID
名前root\\WMI
空間で。再びWMIを使用:
新しいクエリ:名前空間SELECT * FROM Win32_DesktopMonitor
で。root\\CIMV2
Setup APIを使用する:
最初に呼び出しSetupDiGetClassDevs
てデバイス情報セットを取得し、次に次のように繰り返します。SetupDiEnumDeviceInfo
DirectX Graphics Infrastructure (DXGI)の使用
最初IDXGIFactory::EnumAdapters
に 、次にIDXGIAdapter::EnumOutput
ディスプレイの接続と構成 (CCD) APIの使用:
QueryDisplayConfig
(QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr);
MSDNリファレンスを使用して、これらすべてのメソッドの違いを正確に理解しようとしましたが、無駄でした。
観察
私が観察したことから:
- WmiMonitorIDおよびSetup APIクエリは、接続されている (必ずしもアクティブであるとは限らない) ディスプレイのリストを返します。
- Win32_DesktopMonitor WMIクエリは、間違った(少なくとも予期しない) 結果を返します (非アクティブな場合でも 1 つのモニターのみが列挙され、別のモニターでデスクトップが表示されます)。
- EnumDisplayDevicesは、アクティブなデバイスのリストを返します (1 つのモニターのみがアクティブで、他のモニターが接続されている場合を除く)。
- EnumDisplayMonitorsおよびDXGIクエリは、アクティブなモニターのリストを返します。
- CCDは最も信頼できる方法のようです (ターゲットとソースの間のすべての可能なパスを提供します)。
質問
これらの各方法 (接続されたディスプレイのリスト、インストールされたディスプレイのリスト、アクティブなディスプレイのリスト) を使用したときに実際に期待できる結果は何ですか? ミラー ディスプレイまたは拡張ディスプレイを使用している場合はどうなりますか? コンピュータに複数の出力のない複数のグラフィックス カードがある場合はどうなりますか?
おまけ: 一部のメソッド ( DXGI、EnumDisplayDevices、CCD ) は、 Adapter - Monitorで一種の階層を使用します。ただし、アダプターとモニターの間に同じリンクはありません。では、 DXGI用アダプターの定義は何ですか? CCD用? EnumDisplayDevices ? _
ms-office - 既存の Direct2D アプリケーションの画面を変更する
この質問は次のようなものです。Microsoft Word (Office 2013) が画面のペイントを使用している API は、未回答のままです。
Office プラグイン (ネイティブ C++) を持っていますが、これは Office にかなり関係しています。フックの使用 Office アプリケーションのクライアント領域を変更しています。
Office 2010までは、WM_NCPAINTをフックし、OfficeウィンドウでGDIメソッドを使用して、うまく機能していました。
ただし、Office 2013 は Direct2D、DXGI、および DirectWrite を使用します。Windows 7 では、画面に何かを描画すると、次にカーソルが点滅したときに消去されます。Windows 8 では、画面にアクセスすることさえできません。
現在、私の考えはフックすることID2D1DeviceContext::BeginDraw
ですID2D1DeviceContext::EndDraw
-そして最後の関数で、実際の関数に委譲する直前に、自分のものを追加します。別のアイデアはフックIDXGISwapChain1::Present1
です。上記の何が起こっているのかを特定するのに苦労したこれらの両方の方法の問題。
私は、装飾したいクライアント領域の上に別のプロセス (または可能であれば GDI ベースのウィンドウ) を考えています。実際のイーストステートの大部分は 100% 透明です。このソリューションの問題点は、キーボード フォーカスやマウス クリックなどの問題です。
ヒントや提案をいただければ幸いです。どのツール (DirectX 用の Spy++) も高く評価されます。DirectX (具体的には Direct2D) は、拡張可能またはプラグ可能なストーリーを文書化していますが、私は知りませんが、使用できますか? カーネル モードで不足しているものはありますか?