Questa è una vecchia versione del documento!
Qt, Windows e i driver OpenGL della Intel
Analizziamo il nuovo metodo con cui le librerie Qt si interfacciano con le funzioni OpenGL in ambiente windows. A seguire vediamo come risolvere eventuali problemi che potremmo incontrare.
Caricamento dinamico interfaccia OpenGL
Fino alle Qt 5.4, su piataforma windows la scelta di come interfacciare le librerie Qt con le librerie opengl disponibili doveva avvenire in fase di compilazione delle librerie Qt, con le due opzioni del comando configure: desktop o opengl
Con
configure -opengl desktop
le librerie si interfacciano direttamente con l'implementazione opengl dei driver della scheda grafica. Affinché tutto vada a buon fine è necesario che siano disponibili le funzioni opengl nella versione 2.1.
Usando invece il comando
configure -opengl es2
le librerie si interfacciavano con le librerie angle che a loro volta facevano da ponte tra le opengl e le direct3d. Abbiamo in questo caso un sistema meno performante, ma meno problemi in caso di implementazioni opengl carenti.
Con le Qt 5.4 è stata aggiunta l'opzione dynamic. Usando
configure -opengl dynamic
le Qt determineranno runtime le librerie con cui interfacciarsi, con la seguente procedure
- prima verrà provata la libreria opengl32 verificando la disponibilità di funzioni OpenGL 2.0
- se il passo precedente ha esito negativo, si prova la libreria ANGLE
- infine, se tutto è andato storto, sarà usata libreria opengl32sw.dll; si tratta di una libreria opengl software
In caso di problemi
Con Windows 7 ed alcuni driver della intel ho ricontrato alcuni problemi nella procedura. In particolare le librerie riconosceva come funzionante le librerie opengl, cosa in realtà non vera (grazie a mamma Intel!). Perciò era necessario forzare il sistema ad attivare la piattaforma angle.
Per farlo è sufficiente impostare la variabile di ambiente QT_OPENGL ad angle.
QT_OPENGL=angle
In alternativa, se vogliamo che il programma autonomamente adotti le librerie angle, nel codice della funzione main aggiungiamo il metodo
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES)