Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje mogą wysyłać zapytania dotyczące sprzętu w celu wykrywania obsługiwanych typów urządzeń Direct3D. Ta sekcja zawiera informacje o podstawowych zadaniach związanych z wyliczaniem kart wyświetlania i wybierania urządzeń Direct3D.
Aplikacja musi wykonać serię zadań, aby wybrać odpowiednie urządzenie Direct3D. Należy pamiętać, że poniższe kroki są przeznaczone dla aplikacji pełnoekranowej i że w większości przypadków aplikacja okienna może pominąć większość tych kroków.
Początkowo aplikacja musi wyliczyć adaptery ekranu w systemie. Adapter jest fizycznym elementem sprzętu. Należy pamiętać, że karta graficzna może zawierać więcej niż jeden adapter, podobnie jak w przypadku karty graficznej z dwoma wyjściami. Aplikacje, które nie są zainteresowane obsługą wielu monitorów, mogą zignorować ten krok i przekazać D3DADAPTER_DEFAULT do IDirect3D9::EnumAdapterModes metodę w kroku 2.
Dla każdej karty aplikacja wylicza obsługiwane tryby wyświetlania, wywołując IDirect3D9::EnumAdapterModes.
Jeśli jest to wymagane, aplikacja sprawdza obecność przyspieszania sprzętowego w każdym wyliczonym trybie wyświetlania, wywołując IDirect3D9::CheckDeviceType, jak pokazano w poniższym przykładzie kodu. Należy pamiętać, że jest to tylko jedno z możliwych zastosowań IDirect3D9::CheckDeviceType; Aby uzyskać szczegółowe informacje, zobacz Określanie obsługi sprzętu (Direct3D 9).
D3DPRESENT_PARAMETERS Params; // Initialize values for D3DPRESENT_PARAMETERS members. Params.BackBufferFormat = D3DFMT_X1R5G5B5; if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter, Device.m_DevType, Params.BackBufferFormat, Params.BackBufferFormat, FALSE))) return E_FAIL;Aplikacja sprawdza żądany poziom funkcjonalności urządzenia na tym adapterze, wywołując metodę IDirect3D9::GetDeviceCaps. Zdolność zwrócona przez tę metodę jest gwarantowana jako stała dla urządzenia we wszystkich trybach wyświetlania, zweryfikowana przez IDirect3D9::CheckDeviceType.
Urządzenia zawsze mogą renderować na powierzchnie o formacie wyliczonego trybu wyświetlania obsługiwanego przez urządzenie. Jeśli aplikacja musi renderować na powierzchni innego formatu, może wywołać IDirect3D9::CheckDeviceFormat. Jeśli urządzenie może renderować do formatu, gwarantowane jest, że wszystkie funkcje zwrócone przez IDirect3D9::GetDeviceCaps mają zastosowanie.
Na koniec aplikacja może określić, czy techniki multisamplingu, takie jak antyaliasing pełnej sceny, są obsługiwane dla formatu renderowania metodą IDirect3D9::CheckDeviceMultiSampleType.
Po wykonaniu powyższych kroków aplikacja powinna mieć listę trybów wyświetlania, w których może działać. Ostatnim krokiem jest sprawdzenie, czy dostępna jest wystarczająca ilość pamięci, aby zapewnić wymaganą liczbę buforów i antyaliasingu. Ten test jest niezbędny, ponieważ użycie pamięci dla trybu i kombinacji wielopróbkowej jest niemożliwe do przewidzenia bez weryfikacji. Ponadto niektóre architektury kart wyświetlania mogą nie mieć stałej ilości pamięci dostępnej dla urządzeń. Oznacza to, że aplikacja powinna mieć możliwość zgłaszania problemów z brakiem pamięci wideo podczas przechodzenia do trybu pełnoekranowego. Zazwyczaj aplikacja powinna usunąć tryb pełnoekranowy z listy trybów, które oferuje użytkownikowi, lub powinna próbować zużywać mniej pamięci, zmniejszając liczbę buforów tylnego planu lub używając mniej złożonej techniki multisamplingu.
Aplikacja okienna wykonuje podobny zestaw zadań.
- Określa prostokąt na pulpicie pokryty obszarem roboczym okna.
- Wylicza adaptery, szukając adaptera, którego monitor pokrywa obszar klienta. Jeśli obszar klienta jest własnością więcej niż jednego adaperu, aplikacja może zdecydować się na niezależne sterowanie każdym adaptem lub sterować jednym adaptem, a Direct3D dokonuje transferu pikseli z jednego urządzenia na drugie podczas prezentacji. Aplikacja może również zignorować dwa poprzednie kroki i użyć adaptera D3DADAPTER_DEFAULT. Należy pamiętać, że może to spowodować wolniejsze działanie, gdy okno zostanie umieszczone na monitorze pomocniczym.
- Aplikacja powinna wywołać IDirect3D9::CheckDeviceType w celu określenia, czy urządzenie może obsługiwać renderowanie do buforu wstecznego określonego formatu w trybie pulpitu.
IDirect3D9::GetAdapterDisplayMode można użyć do określenia formatu wyświetlania pulpitu, jak pokazano w poniższym przykładzie kodu.
D3DPRESENT_PARAMETERS Params; // Initialize values for D3DPRESENT_PARAMETERS members. // Use the current display mode. D3DDISPLAYMODE mode; if(FAILED(m_pD3D->GetAdapterDisplayMode(Device.m_uAdapter , &mode))) return E_FAIL; Params.BackBufferFormat = mode.Format; if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter, Device.m_DevType, Params.BackBufferFormat, Params.BackBufferFormat, FALSE))) return E_FAIL;
Tematy pokrewne