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 cosa fare se qualcosa va storto.
Caricamento dinamico interfaccia OpenGL
Fino alle Qt 5.4, su piattaforma Windows la scelta di come interfacciare le librerie Qt con le librerie OpenGL poteva avvenire solo in fase di compilazione delle Qt, con l'opzione -opengl del compando configure.
Con
configure -opengl desktop
le librerie si interfacciano direttamente con l'implementazione opengl dei driver della scheda grafica. Affinché tutto vada a buon fine è necessario però che siano disponibili le funzioni opengl nella versione 2.1.
Usando invece il comando
configure -opengl es2
le librerie si interfacciano con le librerie angle che a loro volta fanno da ponte tra comandi opengl e comandi direct3d. Abbiamo in questo caso un sistema meno performante, ma meno problemi in caso di driver 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 il seguente ordine di priorità:
- prima verrà provata la libreria opengl32 verificando la disponibilità di funzioni OpenGL 2.0
- se il passo precedente ha esito negativo, si provano la libreria ANGLE
- infine, se tutto è andato storto, sarà usata libreria opengl32sw.
In caso di problemi
Con Windows 7 ed alcuni driver della intel ho riscontrato alcuni problemi nella procedura. In particolare mi riferisco a driver compatibili con opengl 2.0, ma non con opengl2.1. In tal caso veniva attivata la libreria opengl32, facendo funzionare tutto tranne le funzioni del modulo opengl e il modulo QtQuick 2, carenze non da poco.
In tal caso è necessario forzare le Qt ad attivare la piattaforma ANGLE, che rende disponibile opengl 2.1. Per farlo è sufficiente impostare la variabile di ambiente QT_OPENGL ad angle. Procediamo quindi con tasto destro del mouse su Risorse del computer.
QT_OPENGL=angle
In alternativa, se vogliamo che il programma autonomamente si interfacci alle librerie angle, nel codice della funzione main() aggiungiamo il metodo
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES)