Praca z wieloma systemami monitora (Direct3D 9)
Koncepcja wyłącznego trybu pełnoekranowego jest zachowywana w Direct3D 9, ale jest ona całkowicie implicytna w IDirect3D9::CreateDevice i IDirect3DDevice9::Reset wywołania metod. Za każdym razem, gdy urządzenie zostanie pomyślnie zresetowane lub utworzone w operacji pełnoekranowej, obiekt Direct3D, który utworzył urządzenie, jest oznaczony jako właściciel wszystkich adapterów w tym systemie. Ten stan jest znany jako tryb wyłączny, a w tym momencie obiekt Direct3D jest właścicielem trybu wyłącznego. Tryb wyłączności oznacza, że urządzenia utworzone przez dowolny inny obiekt Direct3D9 nie mogą zakładać operacji pełnoekranowej ani przydzielić pamięci wideo. Ponadto, gdy obiekt Direct3D9 przejmuje tryb wyłączności, wszystkie urządzenia oprócz tego, które przeszło na pełny ekran, zostają wprowadzone w stan utraty. Aby uzyskać informacje na temat obsługi utraconych urządzeń, zobacz Lost Devices (Direct3D 9).
Wraz z trybem wyłączności obiekt Direct3D9 jest informowany o oknie koncentracji uwagi, które ma być używane przez urządzenie. Tryb wyłączności jest zwalniany, gdy ostatnie urządzenie działające w trybie pełnoekranowym, należące do tego obiektu Direct3D9, zostaje przełączone na tryb okienkowy lub usunięte.
Urządzenia można podzielić na dwie kategorie, gdy obiekt Direct3D9 jest właścicielem trybu wyłącznego. Pierwszą kategorią urządzeń są te, które zostały utworzone przez tę samą instancję Direct3D9, co urządzenie, które jest już w trybie pełnoekranowym. Mają to samo okno na pierwszym planie, co urządzenie pełnoekranowe, i reprezentują inny adapter niż jakiekolwiek urządzenie pełnoekranowe. Urządzenia w tej kategorii nie mają żadnych ograniczeń dotyczących ich możliwości resetowania lub tworzenia i nie są umieszczane w stanie zgubienia. Urządzenia z tej kategorii można nawet umieścić w trybie pełnoekranowym.
Urządzenia, które nie należą do tej kategorii, a które zostałyby utworzone przez inny obiekt Direct3D9, z innym oknem o skoncentrowanej uwadze lub dla niektórych adapterów z urządzeniem już ustawionym na pełny ekran, nie mogą być zresetowane i pozostają w stanie zgubienia do momentu utraty trybu wyłącznego.
Praktyczną implikacją jest to, że aplikacja obsługująca wiele monitorów może umieścić kilka urządzeń w trybie pełnoekranowym, ale tylko wtedy, gdy wszystkie te urządzenia są przeznaczone na różne karty, zostały utworzone przez ten sam obiekt Direct3D9 i wszystkie dzielą to samo okno z fokusem.
Podczas tworzenia nowego urządzenia przy użyciu tego samego IDirect3D9 obiektu i okna fokusu oryginalne urządzenie utraci jego powierzchnie. Musisz wywołać IDirect3DDevice9::Reset na pierwszym urządzeniu, aby aplikacja mogła go używać. Aby na przykład utworzyć dwa urządzenia, wykonaj następujące czynności:
- Tworzenie urządzenia 1
- Tworzenie urządzenia 2
- Resetowanie urządzenia 1