web-dev-qa-db-fra.com

Déployer Qt5 sur Windows sans accélération matérielle

Qt5 peut utiliser le pilote OpenGL ou le pilote DirectX en utilisant ANGLE. Comme nous ne pouvons pas dépendre d'un pilote OpenGL installé, nous devons utiliser le backend ANGLE. Malheureusement, cela ne résout pas tous les problèmes de déploiement, en particulier sur les machines virtuelles Windows sans accélération matérielle. Sur ces systèmes, nous recevons un message d'erreur indiquant que la création d'un contexte OpenGL a échoué.

Capture d'écran: échec de création du contexte OpenGL pour le format QSurfaceFormat

Nous déployons toutes les bibliothèques requises (libEGL.dll libGLESv2.dll libeay32.dll msvcp110.dll msvcr110.dll d3dcompiler_46.dll) mais nous recevons toujours ce message d'erreur.

Comment déployez-vous une application QML qui doit s'exécuter sur des machines d'utilisateur final sans pilote OpenGL et sur des machines (virtuelles) sans accélération Direct3D?

Il y a une page sur le wiki Qt mentionnant ce problème , mais ce n'est pas très utile pour le résoudre.

Mise à jour pour Qt 5.4.0:

Mes conclusions jusqu'à présent sont les suivantes:

  • La définition de QT_ANGLE_PLATFORM = warp -> crée une fenêtre sans contenu.
  • Définition de QT_ANGLE_PLATFORM = d3d9 -> même boîte de dialogue d'erreur, comme prévu.
  • Définition de QT_ANGLE_PLATFORM = d3d11 -> même boîte de dialogue d'erreur, comme prévu.
  • Définition de QT_OPENGL = desktop -> identique à QT_ANGLE_PLATFORM = warp.
  • Définition de QT_OPENGL = angle -> même boîte de dialogue d'erreur, comme prévu.
  • Définition de QT_OPENGL = logiciel + opengl32sw.dll (mesa pour Windows) -> imprévisible: peut s'exécuter, peut se bloquer, peut afficher la boîte de dialogue d'erreur.

Mise à jour pour Qt Quick 2D Renderer

Bien que Mesa semble être une solution partielle, la configration semble souvent très planter dans Qt 5.4.0.

Une autre solution de rechange pourrait être le rendu rapide 2D Qt, mais malheureusement, cela se bloque également.

  • Copie de softwarecontext.dll dans/scenegraph + Setting QMLSCENE_DEVICE = softwarecontext -> crash

Mettre à jour après une certaine expérience utilisateur:

  • A des bugs de rendu sur certains systèmes
  • Ne fonctionne pas de manière fiable sur tous les systèmes
  • Pas fiable
  • La valeur par défaut implémente OpenGL 1.1, qui est trop ancien.
  • Pas fiable, même si la version OpenGL est correcte.
  • A des bugs de rendu, si utilisé par Qt
  • A des problèmes de rendu majeurs
  • Crashes, Freezes
  • Fonctionne sur les systèmes sans accélération matérielle
  • Semble assez fiable pour le moment
  • assez lent en général, très lent sur certains systèmes.
  • Poids de déploiement élevé

Conclusion: il n'y a toujours pas de vraie solution pour ces systèmes

Mise à jour pour Qt 5.5

Anno 2015: les lecteurs graphiques cassés sont toujours cassés.

Ma conclusion pour le moment est:

  1. Utilisez QtQuick2dRenderer si possible.
  2. Sinon, utilisez le backend Mesa.
  3. Ignorer l'angle, ignorer Desktop OpenGL, ignorer Warp.
25
Sebastian Wagner

QT 5 a un énorme problème de compatibilité avec opengl sur certaines configurations matérielles La combinaison du pilote Intel HD3000 et de la carte Nvidia/ATI ne fonctionnera pas sous Windows 10. https://bugreports.qt.io/browse/QTBUG-4224

Intel supprime le support pour cette carte mais leurs pilotes ont un bug qui conduit à planter.

Vous ne pouvez pas compter sur le matériel opengl si vous souhaitez prendre en charge les clients avec HD3000.

8
Brun

Sous Windows, opengl32.dll est le pilote OpenGL par défaut. Il implémente OpenGL 1.1 (version vraiment ancienne). ANGLE a une base de référence d'OpenGL ES 2.0 et nécessite DirectX 9/11 installé pour mapper les appels.

Donc, si vous avez une carte vidéo sur laquelle aucun pilote OpenGL n'est installé, un pilote OpenGL inférieur à 2.0 et/ou DirectX 9/11 non installé, votre application ne fonctionnera pas.

En ce qui concerne la virtualisation et l'accélération 3D, celles-ci méritent peut-être d'être lues:

De plus, si vous exécutez un environnement Windows à plusieurs moniteurs sous VirtualBox, l'accélération 3D sera désactivée.

4
Kerry Kobashi

J'ai revérifié cela pour voir si ces problèmes ont été corrigés par la dernière version de QT 5.12.2, mais non, ils ne l'ont pas été. La fonction décrite dans l'entrée wiki QT OP référencée https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL sonne bien mais en pratique, cela ne fonctionne tout simplement pas.

Je conclus que j'évite OpenGL sur QT sous quelque forme que ce soit. C'est trop peu fiable.

1
Silicon Snooki