J'ai installé Ubuntu sur Windows 10 à l'aide du sous-système Windows pour Linux (WSL). J'essaie d'obtenir des graphiques OpenGL pour travailler. Mon objectif ultime est de pouvoir exécuter le simulateur de gazebo pour robot OS (ROS), qui nécessite OpenGL. En première étape, j'essaie de vous assurer que les graphiques OpenGL fonctionnent comme ils sont censés.
Selon -- ce didacticiel et beaucoup d'autres, à exécuter ROS et Gazebo, je devrais installer VCXSRV et exécuter le serveur X avec l'option "Native OpenGL" désactivée, donc je le fais.
Mon problème immédiat est que OpenGL ne semble pas fonctionner parfaitement. J'ai installé les utils Mesa et quand je courais glxgears
je vois la fenêtre graphique, mais l'animation est extrêmement lente. J'aurais estimé que les engrenages tournent vers une tour d'environ 1 révolution par minute. Je peux réorienter les engrenages à l'aide des touches fléchées, mais la mise à jour est à nouveau extrêmement lente. (De temps en temps, il y a un "saut" visible, si cela importe.)
Pour une comparaison, j'ai essayé de courir glxgears
sur Ubuntu en cours d'exécution dans une machine virtuelle. À ma grande surprise, il anime beaucoup plus vite; Les engrenages font une rotation complète environ une fois toutes les 4 secondes, comparées à une fois toutes (peut-être 60 secondes mais j'ai perdu patience) lors de la course sous WSL avec WSL. C'est une grosse surprise puisque je m'attendais à ce que la VirtualBox soit beaucoup plus lente.
Sous Windows avec WSL, glxgears
affirme qu'il fonctionne très rapidement - entre 800 et 1700 fps. Dans VirtualBox glxgears
rapporte environ 900-1000FPS.
Informations de version sur GLXGEARS et OPENGL:
xxxx@DESKTOP-8U2MCOG:~$ glxgears -info
GL_RENDERER = Software Rasterizer
GL_VERSION = 1.4 (2.1 Mesa 19.2.0-devel (git-cdf42f5eaa))
GL_VENDOR = Mesa Project
GL_EXTENSIONS = GL_ARB_depth_texture GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_occlusion_query GL_ARB_texture_env_dot3 GL_ARB_transpose_matrix GL_EXT_draw_range_elements GL_EXT_multi_draw_arrays GL_NV_depth_clamp GL_NV_fog_distance GL_NV_point_Sprite GL_Sun_multi_draw_arrays
VisualID 183, 0xb7
20311 frames in 5.0 seconds = 4062.197 FPS
Pourquoi glxgears
fonctionne si lentement dans WSL? Si cela devrait être à juste titre capable de courir plus vite, alors comment puis-je faire cela arriver?
[~ # ~ ~] Mise à jour [~ # ~]
Basé sur la réponse de @allquixotic ci-dessous, j'ai commis une autre tentative d'exécution avec l'option wgl
, que j'ai fait en quittant cette seconde case "Native OpenGL". J'avais essayé cela avant, mais il s'avère que j'avais besoin de faire cela après un redémarrage Pour qu'il prenne effet. Lorsque je courais glxgears
avec cette configuration, je reçois une lecture légèrement différente sur la console:
xxxx@DESKTOP-8U2MCOG:~$ glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
23633 frames in 7.5 seconds = 3147.913 FPS
10395 frames in 6.8 seconds = 1529.523 FPS
10395 frames in 6.9 seconds = 1512.829 FPS
Maintenant, je suis sûr que mon moniteur ne fonctionne pas à une vitesse de balayage verticale de 1500Hz! Je pense donc que cela pourrait être un indicateur de ce qui se passe vraiment; une certaine étrangeté avec le système de rendu indirect. Aussi, je remarque que lorsque I Ctrl + C pour mettre fin au programme, le GL Windows continue à courir et à l'animation pendant 10-11 secondes après avoir terminé le programme - et c'est si je 'VE Lancez uniquement le programme pendant 3-4 secondes. Donc, je devrais deviner qu'il y a une tonne de messages en file d'attente, ou quelque chose comme ça ...?
Bien que je déteste être "ce gars" qui publie une réponse à sa propre question, j'ai traversé plus qu'une petite douleur pour faire travailler les choses, et j'aimerais sauver le prochain gars le même problème. Voici donc
Qu'est-ce qui a effectivement fini de fonctionner
Pour des raisons pour lesquelles je ne comprends pas, mon système a fonctionné lorsque j'ai couru contrairement à la recommandation (assez sensée) de @allquixotic.
1) Désactiver LIBGL_ALWAYS_INDIRECT
Cela a été vraiment difficile, simplement parce que je devais trouver où il a été fixé.
\etc\profile.d
était un fichier wsl-integration.sh
./usr/share/wslu/wsl-integration.sh
LIBGL_ALWAYS_INDIRECT
a été fixé, alors j'ai commenté cette ligne.2) N'utilisez pas le -wgl
argument de ligne de commande (ou son équivalent d'interface graphique) pour VCXSRV
Depuis que je lance VCXSRV à partir d'un client d'interface graphique, cela signifiait quitter la deuxième boîte d'option, Titres "Native OpenGL", non contrôlé.
Une fois que ces deux modifications apportées (et que j'ai fait un redémarrage frais pour s'assurer qu'aucun ancien réglage de VCXSRV n'avait persisté), les engrenages de glxgears
tournaient à un taux normal et je pourrais les réorienter à l'aide de la flèche. Les clés, comme elles sont censées travailler.