Arbeiten mit mehreren Überwachungssystemen (Direct3D 9)

Das Konzept des exklusiven Vollbildmodus wird in Direct3D 9 beibehalten, wird jedoch in den Methodenaufrufen IDirect3D9::CreateDevice und IDirect3DDevice9::Reset vollständig implizit beibehalten. Wenn ein Gerät erfolgreich zurückgesetzt oder im Vollbildbetrieb erstellt wird, wird das Direct3D-Objekt, das das Gerät erstellt hat, als Der Besitz aller Adapter auf diesem System markiert. Dieser Zustand wird als exklusiver Modus bezeichnet, und an diesem Punkt besitzt das Direct3D-Objekt den exklusiven Modus. Der exklusive Modus bedeutet, dass Geräte, die von einem anderen Direct3D9-Objekt erstellt wurden, weder einen Vollbildvorgang annehmen noch Videospeicher zuordnen können. Wenn ein Direct3D9-Objekt den exklusiven Modus annimmt, werden außerdem alle Geräte außer dem Gerät, das den Vollbildmodus ausgeführt hat, in den Zustand "Verloren" versetzt. Informationen zum Behandeln verlorener Geräte finden Sie unter Verlorene Geräte (Direct3D 9).

Zusammen mit dem exklusiven Modus wird das Direct3D9-Objekt über das Fokusfenster informiert, das vom Gerät verwendet werden soll. Der exklusive Modus wird freigegeben, wenn das letzte Vollbildgerät, das sich im Besitz dieses Direct3D9-Objekts befindet, entweder auf den Fenstermodus zurückgesetzt oder zerstört wird.

Geräte können in zwei Kategorien unterteilt werden, wenn ein Direct3D9-Objekt den exklusiven Modus besitzt. Die erste Kategorie von Geräten sind Geräte, die mit demselben Direct3D9-Objekt erstellt wurden, das das Gerät erstellt hat, das sich bereits im Vollbildmodus befindet, das gleiche Fokusfenster wie das Gerät hat, das sich bereits im Vollbildmodus befindet, und einen anderen Adapter als jedes Vollbildgerät darstellen. Geräte in dieser Kategorie haben keine Einschränkungen hinsichtlich ihrer Fähigkeit, zurückgesetzt oder erstellt zu werden, und werden nicht in den Zustand "Verloren" versetzt. Geräte in dieser Kategorie können sogar in den Vollbildmodus versetzt werden.

Geräte, die sich nicht in dieser Kategorie befinden, die von einem anderen Direct3D9-Objekt oder mit einem anderen Fokusfenster erstellt wurden, oder für einen Adapter mit einem Bereits-Vollbildgerät können nicht zurückgesetzt werden und bleiben im verlorenen Zustand, bis der exklusive Modus verloren geht.

Die praktische Auswirkung ist, dass eine Anwendung mit mehreren Monitoren mehrere Geräte im Vollbildmodus platzieren kann, aber nur, wenn alle diese Geräte für verschiedene Adapter vorgesehen sind, vom gleichen Direct3D9-Objekt erstellt wurden und alle das gleiche Fokusfenster verwenden.

Wenn Sie ein neues Gerät mit dem gleichen IDirect3D9-Objekt und Fokusfenster erstellen, verliert ihr ursprüngliches Gerät seine Oberflächen. Sie müssen IDirect3DDevice9::Reset auf dem ersten Gerät aufrufen, damit Ihre Anwendung es verwenden kann. Gehen Sie beispielsweise wie folgt vor, um zwei Geräte zu erstellen:

  1. Erstellen von Gerät 1
  2. Erstellen von Gerät 2
  3. Gerät zurücksetzen 1

Programmieren Tipps