2011-01-07 6 views
0

Ich möchte ein hardwarebeschleunigtes DirectX-Fenster (9 im Moment) auf einem zweiten Bildschirm erstellen. Dieser Bildschirm ist (zumindest im Moment) mit dem gleichen Grafikdisplay wie der primäre Bildschirm verbunden.Wie öffne ich ein hardwarebeschleunigtes DirectX-Fenster auf einem zweiten Bildschirm?

Derzeit, wenn ich versuche, das Fenster auf dem zweiten Bildschirm basierend auf Fensterposition zu öffnen oder es dort zu ziehen, springt die CPU - Auslastung um 10%, was darauf hindeutet, dass Windows auf einen Software - Fallback umstellt Hardwarebeschleunigung.

Maschine ist Windows XP mit einer NVIDIA-Grafikkarte (verschiedene Karten, da dies auf mehreren Maschinen läuft), mit dem neuesten Treiber. Zur gleichen Zeit wird CUDA ausgeführt, um die Bilder zu erstellen, wenn das wichtig ist. Programmiersprache ist C++, manuelle Fenster und Message-Queue-Erstellung, kein tookbox zur Zeit verwendet, um die GUI zu verwalten

Dank

Antwort

1

Wenn Sie Create nennen, stellen Sie sicher, dass der Index des Monitors verwenden Sie zielen. Der Standardwert D3DADAPTER_DEFAULT ist nur 0, der primäre Monitor. DirectX ist ein bisschen kludgy, aber wenn das Fenster auf einem anderen Monitor ist als in CreateDevice angegeben, wird es geräuschlos in einem Framebuffer gerendert, der auf den ersten Monitor abzielt, und dann die Kopie auf einen Framebuffer auf dem zweiten Monitor mit dem Betriebssystemfenster puffern Manager.

Die schnelle und schmutzige Lösung besteht darin, stattdessen CreateDevice (1, ...) zu verwenden, da dies fast immer der Fall ist, in dem ein Dual-Monitor-Setup indexiert wird. Eine zuverlässigere Lösung besteht darin, MonitorFromWindow (hwnd) zu verwenden, um den Monitor zu finden, den das Fenster am häufigsten abdeckt, und anschließend durch verfügbare d3d-Adapter zu suchen, die denselben Monitor-Handle mit GetAdapterMonitor() zurückgeben. Wenn Sie ein System mit mehr als zwei Monitoren haben oder wenn Sie nicht im Voraus wissen, welcher Monitor Sie haben möchten und nur ein HWND haben, dann brauchen Sie die längere Methode.