2013-05-29 5 views
8

Sono parte di un team che sviluppa un'applicazione utilizzando C++ con SDL e OpenGL.Forzare la macchina per utilizzare la scheda grafica dedicata?

Sui portatili quando l'applicazione viene eseguita, la scheda grafica dedicata non viene utilizzata e il contesto GL non riesce a creare perché la scheda grafica integrata non supporta la versione di GL che vogliamo.

Ho la sensazione che questo problema sia specifico del laptop in questione e non qualcosa che possiamo risolvere tramite codice. Ma, se qualcuno sa se c'è una soluzione, sarebbe grandiosa.

+0

Vuoi dire computer portatili con doppia scheda grafica? Passa manualmente alla scheda di aiuto dedicata (nelle impostazioni di NVIDIA o dovunque sia)? – riv

+0

Potrebbe essere possibile utilizzare le API specifiche della piattaforma di destinazione per accedere a quali dispositivi sono disponibili, quindi scegliere su quale creare il contesto attivo. Anche se ho la sensazione che tu abbia ragione e che il dispositivo grafico inattivo non venga visualizzato fino a quando non viene attivato nelle impostazioni per il laptop, come suggerito da @riv. – kc7zax

+1

@riv si è un laptop con doppia scheda grafica. Naturalmente possiamo aggiungere l'applicazione all'elenco delle applicazioni che utilizzano la scheda dedicata nelle impostazioni nvidia/ati, ma per gli utenti finali preferiremmo che non dovessero farlo. –

risposta

3

Utilizza grafica dedicata NVidia? AFAIK, il processo di passaggio automatico da integrato a dedicato si basa sui profili dell'applicazione. La tua applicazione non si trova nell'elenco dei driver delle applicazioni 3D note e pertanto l'utente deve passare manualmente alla GPU dedicata.

Provare a cambiare il nome dell'eseguibile della propria applicazione in qualcosa che il conducente cerca. Ad esempio "Doom3.exe". Se funziona, hai trovato il tuo problema.

Se questo non ha aiutato, prova a seguire le istruzioni contenute in questo video su come fare il conducente inserisce l'applicazione nella sua lista del 3D Apps:

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

Ma quanto sopra è solo per verificare se questo è davvero il tuo problema Per una soluzione reale a questo, è necessario verificare con i fornitori di driver grafici (AMD e NVidia) il modo migliore per inserire un profilo per la propria applicazione nei propri elenchi. NVidia fornisce NVAPI e AMD ha ADL e AGS. Meritano sicuramente uno studio.

+0

L'obiettivo è impedire all'utente finale di dover aggiungere l'applicazione all'elenco delle applicazioni che utilizzano la scheda grafica dedicata. Questo potrebbe verificarsi anche su dispositivi non nvidia. Daremo un'occhiata al link che hai inviato. C'è una soluzione simile per le schede ATI? –

+1

@ConnorHollis: i luoghi in cui sono archiviati i profili dell'applicazione sono ben noti.La soluzione straigtforward prevede che l'installer aggiunga un profilo dell'applicazione per i driver di AMD e NVidia. – datenwolf

+0

Ma dovresti usare Nvapi di Nvidia per creare il profilo dell'applicazione invece di scrivere in quei posti in quanto la posizione di tali informazioni è già cambiata in passato e potrebbe cambiare di nuovo in qualsiasi momento. –

10

Il modo più semplice da C++ per garantire che la scheda grafica dedicata è usato al posto di grafica chipset commutabile in Windows è quello di esportare i seguenti simboli (MSVC codice di esempio):

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; 
} 

Caveat: Se l'utente ha creato un profilo per l'applicazione da utilizzare chipse integrato t, allora questi non funzioneranno.

Non sono sicuro se questo funzionerebbe in modo simile sotto Linux/MacOS (improbabile).

+0

Hai '__declspec' per una variabile e' _declspec' per un'altra. Errore di battitura o mi manca qualcosa? – HolyBlackCat

+0

Grazie per averlo notato! Due caratteri di sottolineatura sono più corretti, ma _declspec funziona come previsto: http://stackoverflow.com/questions/1399215/difference-between-declspec-and-declspec –

+0

Ehi, come posso utilizzarlo in un progetto C#? (WPF) – user2088807