QML2 en surcouche du QML Scene Graph offre une API agréable pour combiner du code shader en GL/GLES avec QML. L'API consiste en deux nouveau éléments QML : ShaderEffectItem et ShaderEffectSource. Avec cette API, il est simple de créer des effets et des animation qui ne pourraient être réalisées en utilisant les élément standard de QML 1. Ceci permet aussi naturellement aux effets de faire leur traitement lourd sur le GPU et ainsi d'améliorer les performances et donc de permettre des effets qui ne pourraient fonctionner correctement sans une accélération matérielle.
L'implémentation de ShaderEffectItem ne dépend pas fondamentalement du QML Scene Graph et nous avons implémenté un plug-in QML Extension qui fourni une API similaire pour QGraphicsView, basé sur Qt Quick 1. La vidéo ci dessous vous montre une application écrite avec Qt Quick 1.0 fonctionnant sur N8, montrant quelques effets utilisant le plug-in "shaders". Elle montre aussi la même application tournant sur cinq plateforme différentes : Symbian^3, Maemo 5, Mac OS X, Windows 7 et Ubuntu.
Le code source de ce plug-in et l'application de démonstration sont disponible : https://qt.gitorious.org/qt-labs/qml...-shadersplugin. Des information plus détaillées sur les fonctions de l'API de ShaderEffectItem et ShaderEffectSource sont disponibles dans la documentation (dossier "doc". Une liste des dernière différences entre le plug-in et QML2 peut être trouvée dans le fichier readme.
Utiliser le plug-in "shaders" est simple :
- compilez le plug-in (voir le fichier readme dans le dossier du code source pour des informations plus détaillées) ;
- dans le code CPP de votre application, déclarez le viewport du QDeclarativeView en tant que QGLWidget. Rappelez-vous aussi de positionner le mode de mise à jour du viewport à "FullViewportUpdate" ;
- importez le module "Qt.labs.shaders 1.0" dans votre code QML.
Le plug-in est complètement fonctionnel et peut aussi être utilisé, mais il reste "work in progress" ; ainsi, l'API peut changer. L'objectif est de rester au plus près de l'API de QML2 durant ses évolutions pour conserver le plug-in aussi compatible que possible.
Cette fonctionnalité requiert OpenGL ou OpenGL ES 2.0 et dépend du module QtOpenGl. Ainsi, le fonctionnement est limité uniquement aux plateformes qui ont au moins la dernière version majeure de Qt (4.7) et le support de QtOpenGL, comme Windows, Linux, Mac et les appareilles mobiles fonctionnant sous Symbian^3 (expérimental depuis la 4.7.4) ou Maemo5, en supposant que Qt a été mis à jour à la version 4.7.x. Sur Maemo 5, il suffit d'avoir le firmware PR1.3.
Actuellement le backend de gestion des ressources OpenGL ES 2.0 backend sur Symbian n'est pas complet, mais nous allons améliorer cela dans Qt 4.7.4. Jusque là, il n'est pas recommandé d'utiliser cette fonctionnalité dans le développement d'applications pour Symbian. Toutefois, l'expérimentation et la et les retours sont encouragée !