2013-04-22 3 views
5

Alcuni computer dispongono di più di una scheda grafica/chipset installata, anche quando (ad esempio per i laptop) non hanno più di un monitor.Come creare un contesto OpenGL con un driver grafico specifico?

Ho problemi con un sistema portatile con hardware grafico Intel e Nvidia. I driver di Intel sono notoriamente terribili nel loro supporto OpenGL, e il mio codice sta andando incontro a un bug inspiegabile del rendering, perché sembra essere il default del sistema Intel, non quello di Nvidia, quando si crea il contesto di rendering.

C'è un modo per evitare questo all'avvio? Per dire qualcosa come "sondare tutti i driver grafici disponibili, evitare i driver Intel se possibile, e costruirmi un contesto di rendering OpenGL con il driver che funzionerà"?

+0

Nel pannello NVidia è possibile selezionare la GPU predefinita –

+0

@MichaelIV: Grazie, ma non è quello che sto chiedendo. –

+0

Non si tratta solo dei driver ma anche della GPU. Molti notebook di oggi hanno 2 schede: Intel e dedicata (NVidia o ATI). Quindi è necessario impostare l'hardware prima tramite interfaccia bias o windows come il pannello NVidia. passare l'hardware prima cercando di selezionare diversi driver non ha senso. –

risposta

1

Non c'è modo portatile per fare quello che stai chiedendo, ma questo documento descrive come forza "grafica ad alte prestazioni di rendering" nei sistemi con tecnologia NVIDIA Optimus:

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

In particolare, fare riferimento alla sezione " NvOptimusEnablement variabile globale (nuova nel driver uscita 302)", che dice:

partire con i driver di uscita 302, gli sviluppatori di applicazioni possono diretta il driver Optimus in fase di esecuzione per utilizzare la High performance Grafica per il rendering di qualsiasi applicazione, anche quelle per le quali non esiste un profilo applicazione esistente. Possono farlo tramite esportando una variabile globale denominata NvOptimusEnablement. Il driver Optimus cerca l'esistenza e il valore dell'esportazione. Al momento conta solo l'LSB del DWORD. Un valore di 0x00000001 indica che il rendering deve essere eseguito utilizzando Grafica ad alte prestazioni. Un valore di 0x00000000 indica che questo metodo deve essere ignorato.

Esempio di utilizzo:

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

Un'altra possibilità è l'estensione WGL_nv_gpu_affinity, ma il contesto di WGL ha bisogno di sostenerla e non sono sicuro se funziona su sistemi misti Intel/Nvidia:

http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt