2013-05-29 10 views
8

Jestem częścią zespołu opracowującego aplikację przy użyciu C++ z SDL i OpenGL.Wymuszenie użycia dedykowanej karty graficznej?

Na komputerach przenośnych po uruchomieniu aplikacji nie jest używana dedykowana karta graficzna i nie można utworzyć kontekstu GL, ponieważ zintegrowana karta graficzna nie obsługuje wersji GL, której chcemy.

Mam przeczucie, że ten problem dotyczy konkretnego laptopa, a nie czegoś, co możemy rozwiązać za pomocą kodu. Ale jeśli ktoś wie, czy istnieje rozwiązanie, które byłoby wspaniałe.

+0

Masz na myśli laptopy z dwoma kartami graficznymi? Czy ręcznie przełączasz się na pomoc dedykowanej karty (w ustawieniach nvidii lub gdziekolwiek jest)? – riv

+0

Możliwe, że będziesz w stanie używać konkretnych interfejsów API (platform) docelowej, aby uzyskać dostęp do dostępnych urządzeń, a następnie wybrać, na którym z nich utworzyć aktywny kontekst. Chociaż mam wrażenie, że masz rację, a nieaktywne urządzenie graficzne nie pojawi się, dopóki nie zostanie włączone w ustawieniach laptopa zgodnie z sugestią @riv. – kc7zax

+1

@riv Tak, jest to laptop z dwoma kartami graficznymi. Możemy oczywiście dodać aplikację do listy aplikacji, które używają dedykowanej karty w ustawieniach nvidia/ati, ale dla użytkowników końcowych wolimy, żeby tego nie robili. –

Odpowiedz

3

Czy korzysta z dedykowanej grafiki NVidia? AFAIK, proces automatycznego przełączania z zintegrowanego na dedykowany oparty jest na profilach aplikacji. Twoja aplikacja nie znajduje się na liście sterowników znanych aplikacji 3D, dlatego użytkownik musi ręcznie przełączyć się na dedykowany procesor graficzny.

Spróbuj zmienić nazwę pliku wykonywalnego aplikacji na coś, czego szuka sterownik. Na przykład "Doom3.exe". Jeśli to działa, to znalazłeś swój problem.

Jeśli to nie pomoże, spróbuj postępując zgodnie z instrukcjami w tym filmie o tym, jak sprawić, że kierowca wstawić swoją aplikację w swoim liście aplikacje 3D:

http://www.frequency.com/video/how-to-whitelist-game-with-nvidias/24814032

Ale powyższe jest tylko do weryfikacji jeśli to rzeczywiście jest twój problem. Aby znaleźć rzeczywiste rozwiązanie, należy sprawdzić u dostawców sterowników kart graficznych (AMD i NVidia) najlepszy sposób wstawienia profilu aplikacji do swoich list. NVidia zapewnia NVAPI, a AMD ma ADL i AGS. Są zdecydowanie warte nauki.

+0

Celem jest uniemożliwienie użytkownikowi końcowemu konieczności dodania aplikacji do listy aplikacji korzystających z dedykowanej karty graficznej. Może to również wystąpić na urządzeniach innych niż nvidia. Rzucę okiem na link, który wysłałeś. Czy istnieje podobne rozwiązanie dla kart ATI? –

+1

@ConnorHollis: Miejsca, w których przechowywane są profile aplikacji, są dobrze znane.Rozwiązaniem straigwardowym jest, aby instalator dodał profil aplikacji dla sterowników AMD i NVidia. – datenwolf

+0

Ale powinieneś używać Nvapi z Nvidii do tworzenia profilu aplikacji zamiast pisać do tych miejsc, ponieważ lokalizacja tych informacji już się zmieniła w przeszłości i może w każdej chwili ulec zmianie. –

10

Najłatwiej z C++, aby upewnić się, że dedykowany karta graficzna jest używana zamiast chipsetu przełączana grafika pod Windows jest eksport następujących symboli (MSVC przykładowy kod):

Enable dedicated graphics for NVIDIA:

extern "C" 
{ 
    __declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001; 
} 

Enable dedicated graphics for AMD Radeon:

extern "C" 
{ 
    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; 
} 

Zastrzeżenie: Jeżeli użytkownik utworzył profil dla aplikacji, aby wykorzystać zintegrowane chipse t, to nie zadziała.

Nie jestem pewien, czy to działałoby podobnie pod Linux/MacOS (mało prawdopodobne).

+0

Masz '__declspec' dla jednej zmiennej i' _declspec' dla innej. Typo czy coś mi brakuje? – HolyBlackCat

+0

Dzięki za zauważenie tego! Dwa podkreślenia są bardziej poprawne, ale _declspec działa zgodnie z oczekiwaniami: http://stackoverflow.com/questions/1399215/difference-between-declspec-and-declspec –

+0

Hej, Jak mogę użyć tego w projekcie C#? (WPF) – user2088807

Powiązane problemy