Non voglio iniziare a utilizzare QOpenGL involucro e scoprire che non posso utilizzare la piena capacità di API OpenGL
Beh, Qt 5.0 di OpenGL involucri sono costruiti in cima la specifica 2.0 OpenGL ES (Embedded Systems) che è essenzialmente una versione annacquata delle specifiche desktop OpenGL 3.0. Qt ha scelto questa specifica per facilitare la portabilità in quanto è ampiamente supportata dalle piattaforme mobili, oltre ad essere supportata su quasi tutti i PC moderni. Se si sceglie di utilizzare i wrapper Qt bisogna aggirare le carenze delle specifiche OpenGL ES 2.0, che, per la maggior parte, rientrano nelle seguenti categorie:
- Nessun capacità di pipeline a funzione fissa. (nessuna pila di trasformazione,
glBegin
, glEnd
, glLightf
, ecc.)
- Nessun supporto per le funzionalità avanzate di OpenGL 3+ o supporto solo nelle estensioni. (oggetti buffer di texture, shader di calcolo, oggetti di carico atomico, shader di tessellation, oggetti buffer uniformi ecc.)
- Mancanza di determinati formati di texture (trame intere, trame immagine, ecc.)
- Piccole differenze in GLSL sintassi & semantica. (mancanza di qualificatori di layout, requisiti di precisione dei dati tramite
highp
, lowp
dichiarazioni, ecc.)
- Mancanza di alcuni metodi di convenienza. (
glBlitFramebuffer
, glMultiDrawArrays
, glDrawRangeElements
, ecc ..)
Per una descrizione completa delle specifiche OpenGL ES 2.0 aspetto here.
Tuttavia, questa mancanza di funzionalità non significa che i wrapper Qt non possono realizzare ciò che è necessario. Sebbene OpenGL ES 2.0 manchi di molte utili funzionalità, è comunque possibile ottenere il 99% di quanto permesso dalla specifica OpenGL desktop completa. Se si decide di utilizzare una specifica OpenGL desktop tramite wrapper personalizzati, Qt può comunque gestire la creazione della finestra & dei contesti OpenGL desktop mediante l'uso della classe QGLFormat
.
Ricordare che se si decide di utilizzare wrapper OpenGL desktop e di utilizzarli in un'applicazione Qt, alcune classi fornite da Qt potrebbero interferire con il funzionamento dei wrapper personalizzati. Ad esempio, le operazioni di QPainter su QGLWidget possono utilizzare la funzionalità delle specifiche OpenGL ES e interferire con il funzionamento degli oggetti wrapper.
Personalmente, preferisco usare wrapper OpenGL personalizzati in quanto preferisco di gran lunga le specifiche OpenGL desktop in quanto i set di funzionalità sono meglio definiti e offrono più opzioni per affrontare un problema.D'altra parte, Qt 5 fornisce alcune architetture assolutamente fantastiche per realizzare interfacce utente dinamiche rapide e potenti usando OpenGL ES. (Tramite QtQuick 2 e QML)
Quale API si adatta meglio alle vostre esigenze dipende essenzialmente dal fatto che stiate bersagliando o meno le piattaforme incorporate o mobili (nel qual caso siete obbligati a utilizzare OpenGL ES) e se siete disposti a sacrificare ulteriore tempo di sviluppo per scrivere e mantenere i wrapper OpenGL 3+ personalizzati.
fonte
2013-03-28 03:56:43
questa domanda è incredibilmente rilevante per chiunque tenti di utilizzare Qt e opengl. Quindi sì, è costruttivo. – UmNyobe