IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

En direct des Qt DevDays 2012


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 808
    Points
    219 808
    Billets dans le blog
    125
    Par défaut En direct des Qt DevDays 2012
    Bonjour à tous,

    Actuellement, je suis à Berlin, au Cafe Moskau pour assister aux Qt DevDays 2012.

    Comme chaque année, la première journée est réservée aux formations. J'assiste à la formation appelée "Modern OpenGL with Qt5" réalisée par Sean Harmer de KDAB.

    Nous avons passé les deux heures de la matinée à voir la création et l'initialisation d'une fenêtre OpenGL dans Qt 5 (il y a quelques changements mineurs par rapport à Qt 4) et l'affichage d'un joli triangle en OpenGL moderne.


    Pour cette après-midi, nous allons voir comment envoyer des données aux shaders et différents effets graphiques (phong shading, toon shading, texturing...).

    Je vais faire de mon mieux pour vous donner des informations au fur et à mesure.


  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 808
    Points
    219 808
    Billets dans le blog
    125
    Par défaut
    Nous avons pris l'après-midi à voir toutes les techniques pour recréer les différents types de lumières comme elles l'étaient dans le pipeline fixe, mais, cette fois, tout en OpenGL 3.3 sans pipeline fixe. Chacun des effets suivants a été revu :
    • lumière ambiante ;
    • lumière diffuse ;
    • lumière spéculaire ;
    • point lumineux, spot et lumière directionnelle ;
    • toon shading ;
    • brouillard.



    Ensuite, nous avons revu les techniques liées aux textures :
    • multi texturing ;
    • bump mapping ;
    • diffuse mapping ;
    • ambient occlusion.





  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 808
    Points
    219 808
    Billets dans le blog
    125
    Par défaut
    Il est vrai qu'hier je n'ai pas donné beaucoup d'informations techniques. Maintenant que j'ai un peu plus de temps, je peux vous expliquer les nouveautés dans la création d'applications OpenGL de Qt 5.

    Initialisation d'OpenGL dans Qt 5

    Tout d'abord, si vous voulez faire une fenêtre utilisant OpenGL, vous n'avez plus besoin d'hériter votre classe de QGLWidget mais simplement de la nouvelle classe QWindow (qui remplace QWidget). Lors de sa construction, vous devriez appeler la fonction setSurfaceType() avec comme paramètre OpenGLSurface afin d'avoir une fenêtre OpenGL. Voici l'exemple d'une classe Window qui hérite de QWindow afin de mettre en place une fenêtre OpenGL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Window::Window( QScreen* screen )
        	: QWindow( screen )
    {
        // Indique à Qt que nous allons utiliser OpenGL avec cette fenêtre
        setSurfaceType(OpenGLSurface);
     
        ...
    (Note : QWindow hérite de QSurface)

    Toutefois, nous n'avons pas encore configuré OpenGL. Pour cela, nous utilisons deux classes :
    • QSurfaceFormat
    • QOpenGLContext


    Sean Harmer compare QSurfaceFormat à un papier et QOpenGLContext à un crayon.

    Plus précisément, QSurfaceFormat permet de définir la version d'OpenGL (setMajorVersion() et setMinorVersion()), le profile (core ou deprecated) à utiliser (setProtile()), mais aussi le niveau de multisampling (anti-aliasing), la taille du buffer de profondeur, ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Spécifie le format que nous voulons
    QSurfaceFormat format;
    format.setDepthBufferSize( 24 );
    format.setMajorVersion( 3 );
    format.setMinorVersion( 3 );
    format.setSamples( 4 );
    format.setProfile( QSurfaceFormat::CoreProfile );
    Une fois le format configuré, il faut l'indiquer au QOpenGLContext :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Créer un contexte OpenGL
    m_context = new QOpenGLContext;
    m_context->setFormat( format );
    m_context->create();
    Le contexte doit par la suite être passé à une scène (classe héritant de QAbstractScene).

    Chaque fois que vous devez agir sur ce contexte OpenGL (initialisation d'OpenGL, mis à jour des buffers, affichage, ...) il faut rendre le context actif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_context->makeCurrent(this);
    (makeCurrent() accepte un paramètre de type pointeur sur QSurface).

    (Note : un contexte ne peut être actif que dans un thread à la fois)

    Pour l'affichage, nous pouvons imaginer le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Window::paintGL()
    {
        // Rend le contexte actif
        m_context->makeCurrent( this );
     
        // Effectue le rendu (dans le back buffer)
        m_scene->render();
     
        // Échange les front/back buffers
        m_context->swapBuffers( this );
    }
    Par défaut, Qt utilise du double buffering.


    Gestion des extensions

    La gestion a changé dans cette nouvelle version de Qt. Tout d'abord, la classe QOpenGLContext vous permet de récupérer une liste d'extensions sous la forme d'un QSet<QByteArray> avec la méthode extensions(). De plus, cette même classe intègre une seconde fonction : hasExtension() qui retourne un boolean indiquant si l'extension est supportée par la machine ou non.
    Bien sur, la fonction getProcAddress() permettant de récupérer les pointeurs de fonctions sur les fonctions des extensions OpenGL est toujours présente. Mais son usage a été limité car elle était source de problèmes. Pour remplacer cet ancien mécanisme, la classe QOpenGLContext expose une fonction functions() qui retourne un QOpenGLFunctions*. Cette dernière contient des méthodes pour appeler les fonctions OpenGL.
    Par contre, OpenGLFunctions ne fournit pas toutes les fonctions disponibles dans OpenGL (surtout si une nouvelle spécification OpenGL est créée), ni les fonctions pour toutes les extensions.
    De plus, Qt 5 propose des factory de fonctions appelées QOpenGLVersionFunctionsFactory (implémenté sous la forme d'un singleton). Cette classe aurait dû être intégrée directement dans QOpenGLContext, mais elle n'était pas prête pour Qt 5.0. Elle le sera dans Qt 5.1.

    L'avantage est que la classe ajoute des vérifications au moment de la compilation.


    Le code d'exemple utilisé pendant la formation est disponible : http://qt.developpez.com/evenement/2.../dd-opengl.zip

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 808
    Points
    219 808
    Billets dans le blog
    125
    Par défaut Retours sur les keynotes
    Deuxième journée aux Qt Dev Days 2012. La matinée était réservée aux keynotes à propos de Qt 5, l'occasion d'en apprendre plus sur le présent et le futur de Qt 5.

    En bref, les objectifs autour du projet Qt sont :
    • être numéro 1 dans la gestion de plateformes (Jolla, Blackberry 10, Android, iOS, les plateformes embarquées et bien sûr, les plateformes de bureau) ;
    • être numéro 1 dans l'expérience développeur (avec l'intégration de nouveaux outils, une meilleure documentation…) ;
    • être numéro 1 dans l'expérience utilisateur (prototypage rapide, performance, fluidité, fonctionnalités…) ;
    • garder le modèle de double licences (Open Source/commerciale) ;
    • renforcer l'écosystème autour de Qt ;
    • continuer avec l'architecture ouverte du Qt Project.


    Ensuite, Lars Knoll, mainteneur en chef, est venu nous présenter plus en détails Qt 5, dont la seconde bêta est maintenant disponible.
    Tout d'abord, Qt 5 sera normalement disponible en décembre. Une fonctionnalité supplémentaire sera ajoutée tous les six mois. Ainsi, Qt 5.1 verra le jour durant le printemps 2013 et Qt 5.2 durant la fin de l'année 2013.
    Actuellement, le support de BlackBerry 10 devrait arriver durant le printemps 2013 et le support de iOS et Android dans Qt 5.2.

    Lars a aussi annoncé que le projet Qt était une réussite avec 25 000 commits acceptés venant de 450 commiteurs rien qu'en une année.

    Ensuite, la keynote est revenue sur Qt 5.

    Comme cela avait déjà été annoncé l'année dernière, le code Qt 4 est compatible avec Qt 5 et cela a été confirmé. Qt Creator 2.6 est capable de compiler un projet avec Qt 4 et avec Qt 5.

    Qt 5 aura une architecture modulaire permettant d'utiliser et d'embarquer uniquement ce qui est nécessaire. Certains modules de Qt 4 ont été dépréciés (mais restent présents dans Qt 5) :
    • Qt OpenGL ;
    • Qt XML ;
    • Qt SVG ;
    • Qt Script et les outils de scripting.


    Finalement, Lars Knoll a revu les différentes améliorations de Qt 5 :
    • nouvelle abstraction pour le code spécifique aux plateformes (permet de porter Qt plus facilement) ;
    • nouvelle architecture graphique, utilisation optimale du GPU ;
    • utilisation du C++11, lorsque le compilateur le permet ;
    • signaux/slots revus ;
    • utilisation de l'Unicode par défaut (les chaines de caractères sont encodées en UTF-8 par défaut) ;


    Dans le futur, il est prévu que les composants Qt Quick soient disponibles pour desktops et plateformes tactiles avant l'été prochain. Le système de compilation qmake commence à être revu et son successeur, qbs, sera peut-être disponible avant l'été.
    Progressivement, les outils seront améliorés, avec le support complet de plus d'add-ons.


  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 899
    Points : 219 808
    Points
    219 808
    Billets dans le blog
    125
    Par défaut Compte rendu création de compositeurs avec le module QtWayland
    Je sors tout juste de la présentation sur la création des compositeurs avec le module Qt Wayland.

    Peut-être avez-vous déjà entendu parler de Wayland récemment, notamment à l'occasion de la sortie en version 1.0 et de ses spécifications.

    Tout d'abord, il faut savoir que Wayland est un protocole pour les compositeurs (ce qui contient les fenêtres) afin de parler à leurs clients au travers d'une bibliothèque C. Les compositeurs peuvent être des serveurs d'affichage fonctionnant avec Linux, des applications X ou encore un client Wayland lui-même. Les clients peuvent être des applications traditionnelles, des serveurs X (rootless ou fullscreen) ou d'autres serveurs d'affichage.

    L'avantage de Wayland est qu'il utilise une mémoire partagée entre les clients afin d'écrire des informations à afficher. Cette mémoire peut être implémentée grâce à un simple système de mémoire partagée ou à travers des buffers GPU (plus rapide encore, car évite les coûts d'envoi des données au GPU).

    Wayland a l'avantage d'être extensible, rapide, léger et personnalisable. À terme, il pourrait remplacer X11.

    Revenons maintenant à Qt. Jusqu'à Qt 4, le système gérant l'affichage des widgets pour les plateformes embarquées était appelé QWS, pour Qt Windowing System. Le problème de ce dernier est qu'il était compliqué d'implémenter de nouvelles plateformes ou même de supporter OpenGL pour gérer l'affichage des fenêtres. C'est pourquoi QWS a été supprimé dans Qt 5. Maintenant, si vous voulez implémenter un nouveau gestionnaire d'affichage, il faudra passer par QPA (Qt Platform Architecture). Qt Wayland propose une implémentation des spécifications Wayland et fournit une méthode pour implémenter un compositeur Wayland mais aussi des applications clientes s'intégrant au compositeurs Wayland.

    Avec Qt 5.0, pour lancer une application utilisant cette nouvelle plateforme, il suffit d'ajouter :
    -platform wayland
    Avec cette implémentation, Qt propose une série de nouvelles classes permettant de créer facilement vos propres compositeurs (vos propres interfaces accueillant l'affichage d'autres applications).

    WaylandCompositor est la classe principale du compositeur qu'il faut hériter afin de créer son compositeur. Dans celle-ci, il est nécessaire de réimplémenter la fonction surfaceCreated() et d'appeler frameFinished() une fois que le rendu des surfaces est terminé.

    WaylandSurface représente les surfaces qui seront affichées par les clients. Lors de la réception d'une nouvelle surface avec WaylandCompositor::surfaceCreated(), il est nécessaire de connecter les signaux afin d'être informé des régions qui doivent être dessinées. Il est par contre nécessaire de vérifier les données reçues à travers les signaux car elles peuvent être soit des textures OpenGL, soit des segments de mémoire partagée.

    Finalement, WaylandInputDevice, permet de transmettre les événements utilisateurs aux clients (d'envoyer les clics qui sont effectués à partir du compositeur aux applications intégrées dans celui-ci). Ce dernier gère aussi le focus.

    Tout cela permet de faire un compositeur accueillant d'autres applications, comme dans la vidéo suivante :
    [ame="http://www.youtube.com/watch?v=_FjuPn7MXMs"]Qt 5 based 3D Wayland compositor - YouTube[/ame]
    (Le code est disponible sur gitorious.)

    Toutefois, il reste une classe : WaylandSurfaceItem. Celle-ci est une implémentation pour Qt Quick 2.0 de WaylandSurface.

    Malheureusement, le module ne sera pas intégré à Qt 5.0 car les spécifications de Wayland ont été publiées deux semaines avant les Qt DevDays, mais cela reste prometteur.

    Si vous n'avez pas OpenGL, il reste un moyen de faire fonctionner Qt Wayland. Par contre, vous n'aurez pas Qt Quick 2.0 ni le support des buffers GPU natifs. Il vous faudra utiliser Mesa, implémentant un rendu logiciel (donc plus lent).

  6. #6
    Membre éprouvé

    Profil pro
    Responsable logiciel
    Inscrit en
    Octobre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable logiciel

    Informations forums :
    Inscription : Octobre 2010
    Messages : 223
    Points : 1 183
    Points
    1 183
    Par défaut Compte-rendu de la présentation "Google APIs avec Qt"
    Présentation par Roland Krause (ICS)

    Les API Google sont des services basés sur SOAP destinés principalement aux applications web, mais pas seulement.
    ICS a créé et mis à disposition en licence GPL (LGPL probablement bientôt) des interfaces Qt pour 18 services Google :
    - OAuth (authentification, dépendance pour d'autres services) ;
    - Tasks (gestion de tâches) ;
    - Maps, dont Street View ;
    - Latitude (localisation) ;
    - Blogger ;
    - Calendar (agenda) ;
    - Drive (stockage de fichiers dans le cloud) ;
    - Freebase (base de connaissances reliées dans un graphe) ;
    - Places (infos sur l'environnement de l'utilisateur) ;
    - Shopping (informations sur des produits) ;
    - Big Query (requêtes) ;
    - Predictions (moteur de prédictions, puissant mais nécessite de définir ses modèles) ;
    - Earth (seulement sur Windows).

    Attention, certains services sont payants au-dessus d'un plafond d'utilisation (Prediction, par exemple).
    Ces interfaces sont disponibles pour Qt en C++ (Linux/Windows/Mac OS X) et QML (N9 et Symbian) ; elles pourraient être intégrées comme module Add-on de Qt dans le futur.

    Lien : http://www.ics.com/technologies/qt_google_apis/.

  7. #7
    Membre éprouvé

    Profil pro
    Responsable logiciel
    Inscrit en
    Octobre 2010
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable logiciel

    Informations forums :
    Inscription : Octobre 2010
    Messages : 223
    Points : 1 183
    Points
    1 183
    Par défaut Qt et les services "cloud"
    Présentation de Sami Makkonen (Digia)

    Un slide bienvenu (ci-joint) récapitule les différents modèles "cloud", avec des exemples par catégories :
    - Saas, Software as a service, comme les Google Apps, Dropbox ;
    - Baas, Backend as a service, comme Firebase, Apigee ;
    - Paas, Platform as a service, comme Google App Engine, AWS ;
    - Iaas, Infrastructure as a service, comme Rackspace, AWS.

    Plusieurs briques de base pour l'utilisation de services cloud sont déjà disponibles dans Qt : gestion du XML, classes, Network, JSON, SOAP...

    Toujours côté Qt, un projet de recherche de l'université de Jyväskylä expérimente l'intégration avec les services Amazon (AWS) et MS Azure pour le stockage de fichiers. Il a été proposé comme projet pour le "playground" Qt.

    La session se termine par une présentation d'un projet Baas de Digia : engin.io, qui fournit des services aux applications et aux développeurs : stockage des données, gestion des environnements de développement / test / production.
    La démo de codage est assez impressionnante, l'utilisation de base est vraiment très simple. Il utilise en interne (entre autres) MongoDB (pour le stockage) et Amazon S3 (pour le load balancing).

    En plus de l'API Qt (QML) réglementaire, des API existent pour de nombreux autres langages. Il sort bientôt en beta, on peut s'inscrire sur le site pour manifester son intérêt.


Discussions similaires

  1. Présentation des Qt DevDays 2012
    Par LittleWhite dans le forum Qt
    Réponses: 4
    Dernier message: 15/02/2013, 00h53
  2. Importer directement des instructions MySQL en fichier texte dans MySQL
    Par lightstring4 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/05/2007, 16h39
  3. Transmission en direct des videos
    Par jack_1981 dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2006, 11h07
  4. [PLUGIN]copie direct des fichiers du projet par FTP
    Par wizzer dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/04/2006, 15h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo