Arbeiten mit mehreren Monitorsystemen (Direct3D 9)

Das Konzept des exklusiven Vollbildmodus bleibt in Direct3D 9 erhalten, wird aber in den Methodenaufrufen IDirect3D9::CreateDevice und IDirect3DDevice9::Reset vollständig implizit beibehalten. Wenn ein Gerät erfolgreich zurückgesetzt oder im Vollbildmodus erstellt wird, wird das Direct3D-Objekt, das das Gerät erstellt hat, als Besitzer 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 Vollbildmodus annehmen noch Videospeicher zuweisen 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 verlorenen Zustand versetzt. Informationen zum Behandeln verloren gegangener 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, in 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 von demselben Direct3D9-Objekt erstellt wurden, das das Gerät erstellt hat, das sich bereits im Vollbildmodus befindet, über das gleiche Fokusfenster wie das Gerät verfügen, das bereits im Vollbildmodus ist und einen anderen Adapter als jedes Vollbildgerät darstellt. Geräte in dieser Kategorie haben keine Einschränkungen hinsichtlich ihrer Fähigkeit, zurückgesetzt oder erstellt zu werden, und werden nicht in den verlorenen Zustand versetzt. Geräte dieser Kategorie können sogar in den Vollbildmodus versetzt werden.

Geräte, die nicht zu dieser Kategorie gehören, d. h. geräte, 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 verbleiben im verlorenen Zustand, bis der exklusive Modus verloren geht.

Die praktische Folge 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 sind, von demselben Direct3D9-Objekt erstellt wurden und alle dasselbe Fokusfenster verwenden.

Wenn Sie ein neues Gerät mit demselben 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 1 zurücksetzen

Programmiertipps