2011-01-07 6 views
0

ハードウェアアクセラレータ付きのDirectX(現時点では9)ウィンドウをセカンダリ画面に作成します。この画面は、プライマリ画面と同じグラフィックスディスプレイ(少なくとも現時点では)に接続されています。ハードウェアアクセラレーションされたDirectXウィンドウをセカンダリ画面で開くにはどうすればいいですか?

現在、ウィンドウの位置に基づいて、またはドラッグすることによって、セカンダリ画面でウィンドウを開こうとすると、CPU使用率が約10%上がります。これは、ウィンドウがソフトウェアのフォールバックに切り替わることを示しているようですハードウェアアクセラレーション

マシンはNVIDIAグラフィックスカード(いくつかのマシンで実行されるさまざまなカード)を搭載したWindows XPで、最新のドライバを使用しています。また、それが重要であれば、同時に画像を生成するためにCUDAを同時に実行しています。プログラミング言語は、C++、マニュアルウィンドウとメッセージキューの作成、あなたがCreateDeviceを呼び出すとGUI

おかげで

答えて

1

、あなたがターゲットとしているモニターのインデックスを使用することを確認し管理するために、現時点で使用されていないtookboxです。標準のD3DADAPTER_DEFAULT値は、プライマリモニタである0にすぎません。 DirectXはちょっとしたことですが、ウィンドウがCreateDeviceで指定されたものとは別のモニタ上にある場合は、最初のモニタをターゲットにしたフレームバッファで静かにレンダリングし、OSウィンドウを使って2番目のモニタのフレームバッファにコピーをバッファしますマネージャー。

したがって、クイックで汚れた解決方法は、デュアルモニターの設定がどのようにインデックス付けされるかということであるため、代わりにCreateDevice(1、...)を使用することです。

MonitorFromWindow(hwnd)を使用してウィンドウが最も多く表示されるモニターを見つけ、GetAdapterMonitor()を使用して同じモニター・ハンドルを戻すモニターを探して、使用可能なd3dアダプターを繰り返します。 3つ以上のモニターを持つシステムがある場合や、必要なモニターを事前に知っておらず、HWNDしか持っていない場合は、より長い方法が必要です。

関連する問題