問題タブ [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.
com - IDXGIObject::GetParent とリリース
にIDXGIObject
は、その親へのポインタを取得する機能がありますGetParent
。残念ながら、ドキュメントには、返されたインターフェイスで呼び出す必要があるかどうかは記載されていません。呼び出すかどうかRelease()
は、デバッグ/リリースの両方で正常に機能します (つまり、クラッシュはありません)。いいえ。これがどのように機能するはずですか?
c# - アプリケーションがフルスクリーンになったことを確認します。(DXGI/DirectX10)
これは私の質問です... DXGI (DX10/11) でアプリケーションが全画面表示になったことを確認する方法があります。フルスクリーンにするということは、システムがモード変更を完了したということです。アプリケーションがデッドロックを防ぎ、タイミングを調整するために必要だからです。(私はマルチスレッドエンジンを持っており、Presentはメッセージポンプスレッド上になく、モード変更でデッドロックをランダムに引き起こします))実際には、メッセージポンプスレッドでメッセージを処理し続けるために1秒待機させ、それは機能しますが、もっと何かが欲しいです「ねえ、モードの変更が完了しました。現在、フルスクリーンモードになっています」と言うDETERMINISTIC。:D
何か案が?
directx - DirectX IDXGIOutput::GetDisplaySurfaceData を使用した DWM スクリーン キャプチャ
DXGI とGetDisplaySurfaceData()
Direct3D 10/11 を使用して、DWM の DirectX サーフェスをキャプチャしようとしています。
IDXGIOutput::TakeOwnership()
ただし、を呼び出す前にアダプターの出力の所有権を取得するGetDisplaySurfaceData()
と、画面全体が一瞬ブラックアウトしてから元に戻ります (表示モードの切り替え時と同様)。
なぜこれが起こるのですか?どうすればこれを防ぐことができますか?
visual-studio-2008 - IID_IDXGIDevice を IUnknown::QueryDevice に渡すときの DXGI のリンカー エラー
レンダリング フレームワークでスワップチェーンとウィンドウの作成を D3D10 デバイスの作成から分離しようとしています。つまり、D3D10CreateDeviceAndSwapChain を実際に使用することはできません。テスト アプリをビルドしようとすると、予期しないリンカー エラーが発生します。
私はDXGI.hを含め、DXGI.libとD3D10ライブラリにリンクしていますが、他には何もありません。
問題のコードは次のとおりです。
if(FAILED(hr = pDXGIFactory->QueryInterface(IID_IDXGIDevice, reinterpret_cast(&pDXGIDevice)))) return hr;
私が受け取るリンカ エラーは、未解決の外部シンボルである _IID_IDXGIDevice に関連していますが、どの追加ライブラリにリンクする必要があるかについての情報が見つかりません。任意の提案をいただければ幸いです。
Win7 x64、VS2008、および DirectX SDK の最新バージョンを使用しています。
c++ - D3D11: GDI テキストを GXDI サーフェスに描画する方法 (D2Dなし)
GDI と D3D11 を使用してテキストをテクスチャに描画する際に助けが必要です。D2D/DirectWrite を使用してみましたが、必要に応じて D3D11 ではなく D3D10 のみをサポートしています。これまで試したことはすべて失敗しました... GDI メソッドを使用してテクスチャに書き込みたいと思います。だから私はこのパラメータでテクスチャを作成しました:
次に、マイクロソフトがここで言うように、このテクスチャから通常の RenderTargetView を作成しました。
次のステップ: DXGI インターフェイスを取得します。
Render 関数では、次のようにします。
問題は、GDI 描画後もテクスチャがまだ空であることです (PIX でもテスト済み)。すべてが機能し、エラー メッセージはありません。
誰でもそれがどのように機能するかを説明できることを願っています。
ありがとう、ステファン
編集:(ドキュメントによると)でも試してみましたGetDC(FALSE,&hDc)
:同じ結果->何もありません。
graphics - IDXGISwapChainとID3D11Device/ID3D11DeviceContextを使用して別のウィンドウに表示するにはどうすればよいですか?
以前、ツールを作成するときは、D3Dバージョン9を使用しました。このバージョンでは、Present()の呼び出しでターゲットウィンドウと長方形を取得できるため、1つのデバイスから多くの異なるウィンドウに描画できます。これは、D3Dを使用してデスクトップアプリケーションを高速化したり、ゲームではなくツールを構築したりする場合に最適です。
また、以前にD3D11を使用してゲームレンダラーを構築しました。これは、状態管理とスレッドインターフェイスが適切に設計されており、(D3D 10とは対照的に)まだかなり一般的なD3D9レベルのハードウェアをターゲットにすることもできるためです。 、10以上のみをターゲットにできます)。
ただし、ここでD3D11を使用してツールを作成したいと思います。残念ながら、D3D11CreateDeviceAndSwapChain()から戻ってきたIDXGISwapChainは、そのHWNDを「記憶」しているようで、そのウィンドウにのみ表示したいと考えています。これは非常に不便です。ウィンドウが多数あり、それぞれにかなり単純なグラフィックを描画する必要があり、WM_PAINTに応答する場合のみです(これもゲームではなくツール用です)。
私がやりたいのは、バッファRAMを節約することです。具体的には、以前は、デスクトップのサイズである単一のバックバッファーを作成できました。これは、すべてのレンダリングニーズに対応できることがわかっていたため、割り当てられた単一のコピーになります。オーバーラップするウィンドウが10個ある場合でも、それらはすべて同じバックバッファーを介してレンダリングされるため、最初の割り当てを超えてメモリを浪費することはありません。スワップチェーンではないテクスチャを作成し、それらを「レンダリングターゲット」として使用することはできますが、ビットマップを読み戻してコピーすることなく、任意のクライアントウィンドウの任意の長方形に表示する良い方法を見つけることができません。 DIBSection、これは本当に非効率的です。また、多くのスワップチェーンを作成し、それらに同じバックバッファを共有させる方法はありません。
私ができる最善の方法は、ウィンドウごとに1つのスワップチェーンを作成し、各スワップチェーンのバックバッファーのサイズを実際に小さくすることです。ただし、スワップチェーンにレンダリングする場合は、ウィンドウに合わせてサイズを変更します。ただし、ターゲットのサイズ変更は「無料」の操作AFAICTではないため、これは非効率的なようです。それで、もっと良い方法はありますか?
direct3d - ID3D10Texture2D スクロール コンテンツ
私は DirectX テクノロジの初心者ユーザーです。
ID3D10Texture2D のコンテンツをスクロールするにはどうすればよいですか? bitblt を使用しています。src と dst hdc が同じである GDI デバイス コンテキストの BitBlt のようなもの。
IDXGISurface の ID3D10Texture2D を持っています。スクロールが私の本当の目標ですが、dxgi API には何も見つかりませんでした。
c++ - IDXGISwapChain::Present によりドライバーがクラッシュし、デバイスが削除される
DirectX 11 API、特に遅延コンテキストを使用するゲーム エンジンを設計しています。基本的な考え方は、すべてのデバイス状態に独自の遅延コンテキストを与え、すべてのジオメトリがレンダリングされた後、すべての遅延コンテキストを反復処理し、直接のコンテキストでそのコマンド リストを実行することによって表示することです。これをテストするには、ワイヤーフレーム シェーダーのみを使用して画面に 2 つの三角形を描画するだけでした。すべての DirectX 呼び出しは、PIX デバッグ レポートで表示された場合でもエラーを返しませんが、) が呼び出されるとすぐにIDXGISwapChain::Present(0,0
、画面全体が黒くなり、その後戻ります。画面の右下隅に、ディスプレイ ドライバが「応答を停止し、正常に回復しました」というエラー ボックスが表示されます。PIX ログを確認したところ、"D3D11: Removing Device
" PIX ログのコールの pre ブロックと post ブロックの間。 post ブロックに示されている戻り値は ですDXGI_ERROR_DEVICE_REMOVED
。これをどう判断すればよいかよくわかりません。PIX ログは次のとおりです。
他に何か必要な場合はお知らせください。主に約 20 の個別のクラスに及ぶため、コードを投稿していませんが、バッファーの内容、HLSL、およびロジックの背後にある説明を投稿できます。
アップデート:
上記の問題をある程度解決しました。理由の一部は、シェーダー、インデックス バッファー、頂点バッファー、および定数バッファーを設定していないことが原因である可能性が最も高いです。元の問題はまだ解決されていませんが、これに取り組んでいるうちに新しい考えが浮かびました。私は電話したことはありませんID3D11DeviceContext::Begin(0)
。ただし、デバイス状態クラスからデバイス コンテキストを取得し、そのコンテキストで Begin を呼び出すと、アクセス違反が発生し、ID3D11DeviceContext
オブジェクトへのポインターが 0 に設定されます。これは への呼び出しでのみ発生し、呼び出しをBegin
削除すると動作が停止します。DirectX SDK のサンプル コードを見てみると、いつでも開始するための明示的な呼び出しが見つかりません。この電話は必要ですか?これは少し話題から外れているように思えるかもしれませんが、それが原因でコマンド リストが壊れている場合は、これが原因である可能性があります。Present
デバイスを削除しています。
関連コード:
c++ - 未解決の外部シンボル_IID_IDXGIFactory
VC ++ 2010でコンソールアプリケーションを作成し、それに次のコードを追加します。
このプロジェクトをビルドすると、リンカーエラーが発生します:エラーLNK2001:未解決の外部シンボル_IID_IDXGIFactory
次に、MFCをサポートするコンソールアプリケーションを作成し、同じコードを追加します。ビルドは成功しました。最初のケースの何が問題になっていますか?MFCプロジェクトが正常にビルドされ、非MFCプロジェクトが失敗するのはなぜですか?
multithreading - DXGI で複数のスワップチェーンを使用するにはどうすればよいですか?
ここがややこしい。1 つのスワップ チェーンに同時にアクセスできないということですか、それとも DXGI は完全にスレッド セーフではありませんか?
1 枚のカードに 2 つのディスプレイ用の 2 つのスワップ チェーンがある場合、それらを交換する最良の方法は何ですか? 複数のスワップ チェーンでリソースがほとんど見つかりません。