2013-04-22 12 views
5

Niektóre komputery mają zainstalowaną więcej niż jedną kartę graficzną/chipset, nawet jeśli (na przykład dla laptopów) nie mają więcej niż jednego monitora.Jak utworzyć kontekst OpenGL z określonym sterownikiem karty graficznej?

Mam problem z systemem laptop, który ma sprzęt graficzny Intel i Nvidia. Sterowniki Intela są notorycznie okropne w obsłudze OpenGL, a mój kod działa przeciwko niewytłumaczalnym błędom renderowania, ponieważ wydaje się domyślny systemowi Intel, a nie Nvidii, podczas tworzenia kontekstu renderowania.

Czy istnieje sposób, aby temu zapobiec przy uruchomieniu? Aby powiedzieć coś w rodzaju "sondowania dla wszystkich dostępnych sterowników graficznych, jeśli to możliwe, unikaj sterowników Intel i zbuduj mi kontekst renderowania OpenGL ze sterownikiem, który będzie działał"?

+0

W panelu NVidia można wybrać domyślny procesor graficzny –

+0

@MichaelIV: Dzięki, ale nie o to proszę. –

+0

Nie chodzi tylko o sterowniki, ale także o GPU. Wiele dzisiejszych notebooków ma dwie karty: Intel i dedykowaną (NVidia lub ATI). Więc musisz najpierw ustawić sprzęt za pomocą interfejsu lub interfejsu windowsowego, takiego jak panel NVidia. Jeśli nie Przełączanie sprzętu na pierwsze próbuje wybrać różne sterowniki jest bez znaczenia. –

Odpowiedz

1

Nie ma przenośny sposób zrobić to pytasz, ale dokument ten opisuje jak wymusić „renderowania grafiki High Performance” w systemach z technologią NVIDIA Optimus:

http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf 

szczególności, patrz rozdział " zmienna globalna NvOptimusEnablement (nowy driver wydania 302)”, który mówi:

Począwszy kierowców Release 302, programiści mogą bezpośredni kierowca Optimus w czasie wykonywania użyć High Performance Grafika do renderowania dowolnej aplikacji - nawet tych aplikacji, dla których nie ma istniejącego profilu aplikacji. Mogą to zrobić przez eksportowanie globalnej zmiennej o nazwie NvOptimusEnablement. Sterownik Optimus szuka istnienia i wartości eksportu. Znaczenie ma teraz tylko LSB dla DWORD. Wartość 0x00000001 wskazuje , że renderowanie powinno być wykonywane za pomocą grafiki o wysokiej wydajności. Wartość 0x00000000 o wartości wskazuje, że ta metoda powinna zostać zignorowana.

Przykład użycia:

extern "C" { 
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; 
} 

Inną możliwością jest rozszerzenie WGL_nv_gpu_affinity, ale context WGL musi go wspierać i nie jestem pewien, czy to działa na mieszanych układów Intel/nVidia:

http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt 
Powiązane problemy