swrast
Справа в тому , програмне забезпечення візуалізації. Це означає, що це не пошук драйвера обладнання для вашої відеокарти. Встановлено купу бібліотек libGL та купу символічних посилань на ці бібліотеки. Щоб побачити, як вони виконують це з оболонки:
find /usr -iname "*libGL.so*" -exec ls -l -- {} +
Тепер ймовірною причиною вашої проблеми є те, що встановлення графічних драйверів іноді порушує ці символічні посилання. (Зокрема, /usr/local/lib/libGL.so.1.2.0
це може бути неправильна ліб або символьна посилання на неправильне посилання).
Щоб вирішити, яку бібліотеку намагаються запустити програми OpenGL, ви можете увімкнути багатослів і запустити просту програму OpenGL. Ви можете перевірити це за допомогою стандартної програми тестування OpenGL:
LIBGL_DEBUG=verbose glxgears
Сподіваємось, це не вдасться так само, як SFML. З LIBGL_DEBUG
його допомогою слід розповісти, яку бібліотеку OpenGL він намагається завантажити. Окрім того, майже напевно буде встановлена вкладка, яку вона намагатиметься завантажити /usr/local/lib/libGL.so.1.2.0
(Правка: Це була стандартна бібліотека OpenGL на моїй машині в той час, коли я відповів на це. Це може бути зараз якась інша версія на вашій машині).
Тож рішення (у цьому випадку) - переконатися, що /usr/local/lib/libGL.so.1.2.0
це символічне посилання, що вказує на праву бібліотеку OpenGL. У моєму випадку у мене драйвер Nvidia 3.40, тому я побіг:
ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0
Але ви хочете вказати на вкладку OpenGL, відповідну вам (перелічена в першій команді find).
Підсумовуючи це: встановлення (власницьких) графічних драйверів може порушити символічні посилання, що використовуються для ліній OpenGL. Щоб вирішити цю проблему, вручну зафіксуйте символьні посилання (виправте /usr/local/lib/libGL.so.1.2.0
спочатку).
libGL.so
:LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram
. За замовчуванням мій Ubuntu 16.04 використовує/usr/lib/nvidia-361/libGL.so
через,/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
і це все добре працює.