как узнать версию opengl linux
Что такое терминальная команда, которая может показать версию OpenGL?
Итак, я хочу узнать, какая у меня версия OpenGL. У меня есть доступ к Ubuntu через SSH. Какую команду мне выполнить?
Чтобы проверить версию OpenGL,
glxinfo | grep «OpenGL version»
Вы получите вывод следующим образом,
Редактировать:
Возможно, вам повезет больше с современным OpenGL, просто добавив слово «версия» вместо «версия OpenGL», учитывая различия между профилями ядра и компата, а также различными версиями GLSL и GLES:
Обратите внимание, что фактическая версия представлена «базовой версией профиля» (4.1), тогда как «версия OpenGL» представлена как 3.0.
в зависимости от того, что вы ищете:
Реализация Open GL
Вы можете использовать glxinfo из пакета mesa-utils:
Библиотеки развития
это зависит немного,
сообщит вам информацию о версии и т. д. любого пакета.
но вам нужно знать, какая конкретная часть / реализация и т. д. opengl вас интересует. Я подозреваю, для вас это будет:
Примечание: я добавил этот ответ позже, потому что ни один из существующих ответов не рассматривает важные аспекты, касающиеся ssh, и не даст вводящих в заблуждение значений тем, кто следует вышеприведенным инструкциям.
Здесь перечислены правильная видеокарта (та, что на удаленном компьютере), а также правильные номера версий.
What is terminal command that can show OpenGL version?
So I want to find out which is my OpenGL version. I have access to Ubuntu via SSH. Which command shall I execute?
8 Answers 8
To Check OpenGL Version,
glxinfo | grep «OpenGL version»
You will get the output as follows,
Edit:
You may have better luck with modern OpenGL just grepping for «version» instead of «OpenGL version» given the differences between the core and compat profiles, as well as the various GLSL and GLES versions:
Notice that the actual version is presented by the «core profile version» (4.1), whereas the «OpenGL version» is presented as 3.0.
depending on what you’re looking for:
Open GL Implementation
You can use glxinfo, from the mesa-utils package:
Development Libraries
this depends a little,
will tell you version information, etc. of any package.
but you’ll need to know what specific part/implementation, etc. of opengl you’re interested in. i suspect, for you, it’ll be:
Note: I’ve added this answer at a later date, because none of the existing answers address a crucial aspects regarding ssh, and will give misleading values to those who follow the above instructions.
I should note here that this is both the wrong graphics card, and wrong version numbers. (‘Wrong’ in terms of what you would expect).
This lists the correct graphics card (the one on the remote computer), as well as the correct version numbers.
learnopengl. Урок 1.3 — Hello Window
Убедитесь в том, что подключение GLEW происходит раньше GLFW. Заголовочный файл GLEW содержит в себе подключение всех необходимых заголовочных файлов OpenGL, таких как GL/gl.h
Заметка от переводчика
Как заметил TrueBers это, предположительно, просто устаревший костыль и современные версии GLFW сами подключают требуемые библиотеки, правда если не установлен флаг GLFW_INCLUDE_NONE, а по умолчанию он не объявлен.
Далее напишем функцию main, пока что в ней будет создаваться окно GLFW. Она будет иметь следующий вид:
В данной функции мы сначала инициализируем GLFW вызывом функции glfwInit, после чего приступаем к его настройке, используя функцию glfwWindowHint. glfwWindowHint имеет очень простую сигнатуру, первым аргументом необходимо передать идентификатор параметра, который подвергается изменению, а вторым параметром передается значение, которое устанавливается соответствующему параметру. Идентификаторы параметров, а также некоторые их значения находятся в общем перечислении с префиксом GLFW_. Больше подробностей о настройке контекста GLFW можно найти в официальной документации GLFW. Если при запуске этого примера вы получаете ошибки, сильно похожие на неопределенное поведение, это значит то, что вы неправильно подключили библиотеку GLFW.
Поскольку в статьях будет использоваться OpenGL версии 3.3, то необходимо сообщить GLFW то что мы используем именно эту версию, что происходит в результате вызова метода glfwWindowHint c аргументами:
Таким образом, GLFW производит все необходимые действия при создании OpenGL контекста. Это гарантирует то, что если у пользователя нет необходимой версии OpenGL (в данном случае рассматривается версия 3.3), то GLFW просто не запустится. Помимо установки версии, мы явно указали на то, что будем использовать профиль GLFW_OPENGL_CORE_PROFILE. Это приведет к ошибке в случае использования устаревших функций OpenGL. Если вы используете Mac OS X, то необходимо добавить следующий вызов функции glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) в код инициализации GLEW.
Убедитесь в наличии поддержки OpenGL версии 3.3 и выше вашим железом и наличие установленного OpenGL соответствующей версии в ОС. Для того, чтобы узнать версию OpenGL на вашем компьютере под Linux используйте glxinfo в консоли. Для Windows можно использовать программу OpenGL Extension Viewer. Если версия OpenGL ниже необходимой убедитесь в том что ваше железо поддерживает его и/или попробуйте обновить драйвера.
Теперь нужно создать объект окна. Этот объект содержит всю необходимую информацию об окне и используется функциями GLFW.
Сигнатура функции glfwCreateWindow требует следующие аргументы: “Высота окна”, “Ширина окна”, “Название окна” (оставшиеся аргументы нам не понадобятся). Возвращает указатель на объект типа GLFWwindow, который нам потом понадобится. Далее мы создаем контекст окна, который будет основным контекстом в данном потоке.
В прошлом уроке мы говорили, что GLEW управляет указателями на функции OpenGL, соответственно мы должны инициализировать GLEW, перед тем как вызывать какие либо функции OpenGL.
Заметьте, что мы установили переменную glewExperimental в GL_TRUE, перед тем как инициализировать GLEW. Установка значения glewExperimental в GL_TRUE позволяет GLEW использовать новейшие техники для управления функционалом OpenGL. Также, если оставить эту переменную со значением по умолчанию, то могут возникнуть проблемы с использованием Core-profile режима.
Viewport
Прежде чем мы начнем что-либо отрисовывать нам надо еще кое что сделать. Нам нужно сообщить OpenGL размер отрисовываемого окна, чтобы OpenGL знал, как мы хотим отображать данные и координаты относительно окна. Мы можем установить эти значения через функцию glViewport.
Первые 2 аргумента функции glViewport — это позиция нижнего левого угла окна. Третий и четвертый — это ширина и высота отрисовываемого окна в px, которые мы получаем напрямую из GLFW. Вместо того, чтобы руками задавать значения ширины и высоты в 800 и 600 соответственно мы будем использовать значения из GLFW, поскольку такой алгоритм также работает и на экранах с большим DPI (как Apple Retina).
Также мы можем задать меньшие значения для viewport. В таком случае, вся отрисовываемая информация будет меньших размеров, и мы сможем, к примеру, отрисовывать другую часть приложения вне viewport.
Подготавливаем двигатели
Мы не хотим, чтобы приложение сразу после отрисовки одного изображения упало. Мы хотим, чтобы программа продолжала отрисовывать изображения и обрабатывать пользовательский ввод до тех пор, пока ее не закроют. Для этого мы должны создать цикл, называемый игровым циклом, который будет обрабатываться до тех пор, пока мы не скажем GLFW остановиться.
Функция glfwWindowShouldClose проверяет в начале каждой итерации цикла, получил ли GLFW инструкцию к закрытию, если так — то функция вернет true и игровой цикл перестанет работать, после чего мы сможем закрыть наше приложение.
Функция glfwPollEvents проверяет были ли вызваны какие либо события (вроде ввода с клавиатуры или перемещение мыши) и вызывает установленные функции (которые мы можем установить через функции обратного вызова (callback)). Обычно мы вызываем функции обработки событий в начале итерации цикла.
Функция glfwSwapBuffers заменяет цветовой буфер (большой буфер, содержащий значения цвета для каждого пикселя в GLFW окне), который использовался для отрисовки во время текущей итерации и показывает результат на экране.
Двойная буферизация
Когда приложение отрисовывает в единственный буфер, то результирующее изображение может мерцать. Причина такого поведения в том, что отрисовка происходит не мгновенно, а попиксельно сверху слева, вправо вниз. Поскольку изображение отображается не мгновенно, а постепенно, то оно может иметь немало артефактов. Для избежания этих проблем, оконные приложения используют двойную буферизация. Передний буфер содержит результирующее изображение, отображаемое пользователю, в это же время на задний буфер ведется отрисовка. Как только отрисовка будет закончена, эти буферы меняются местами и изображение единовременно отображается пользователю.
Еще кое что
Как только мы вышли из игрового цикла, надо очистить выделенные нам ресурсы. Делается это функцией glfwTerminate в конце main функции.
Этот код очистит все ресурсы и выйдет из приложения. Теперь, попробуйте собрать приложение и если проблем с этим не возникнет вы увидите следующее:
Если у вас отобразилась скучнейшая черная картинка — то вы все сделали правильно! Если у вас отрисовывается что-то другое или у вас возникли проблемы с соединением всех примеров в уроке, то попробуйте этот исходный код.
Если у вас есть проблемы со сборкой приложения, для начала, удостоверьтесь, что линковщик в вашей IDE настроен верно (как было описано в прошлом уроке). Также удостоверьтесь, что ваш код не имеет ошибок. Вы можете с легкостью сравнить его с исходным кодом, представленным выше. Если у вас все еще возникают проблемы, просмотрите комментарии к исходной статье, возможно там вы найдете решение своей проблемы.
Для достижения некоего контроля над вводом, мы можем воспользоваться функциями обратного вызова в GLFW. Функции обратного вызова это указатели на функции, которые можно передать в GLFW, чтобы они были вызваны в нужное время. Одной из таких функций является KeyCallback, которая будет вызываться каждый раз, когда пользователь использует клавиатуру. Прототип этой функции выглядит следующим образом:
Эта функция принимает первым аргументом указатель на GLFWwindow, далее идет число описывающее нажатую клавишу, действие осуществляемое над клавишей и число описывающее модификаторы (shift, control, alt или super). Когда будет нажата клавиша, GLFW вызовет эту функцию и передаст в нее требуемые аргументы.
В нашей (новой) key_callback функции мы проверяем является ли нажатая клавиша клавишей ESC и если на нее нажали (а не отпустили) — то мы закрываем GLFW устанавливая свойство WindowShouldClose в true используя glfwSetWindowShouldClose. Следующая проверка состояния в игровом цикле прервет цикл и приложение закроется.
Осталось только передать это функцию в GLFW. Делается это следующим образом:
Существует большое количество функций обратного вызова, которые можно переопределить. К примеру мы можем переопределить функции для изменения размера окна, обработки ошибок и т.д. Зарегистрировать функцию обратного вызова надо после создания окна и до игрового цикла.
Отрисовка
Нам хотелось бы разместить все команды отрисовки в игровом цикле, так как мы хотим, чтобы отрисовка происходила на каждой итерации цикла. Это должно выглядеть как-то так:
Чтобы просто удостовериться в том, что все работает как надо мы будем очищать экран, заливая его своим цветом. В начале каждой итерации отрисовки зачастую надо очищать экран, иначе мы будем видеть результаты прошлой отрисовки (иногда действительно надо добиться такого эффекта, но зачастую это не так). Мы можем с легкостью очистить буфер, использовав glClear, в которую мы передадим специальные биты, чтобы указать какие конкретно буферы надо очистить. Биты, которые мы можем сейчас установить — это GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT и GL_STENCIL_BUFFER_BIT. Сейчас нам надо очистить только цветовой буфер.
Заметьте, что мы также установили требуемый нами цвет, которым будет очищен экран, через glClearColor. Как только мы вызываем glClear весь буфер будет заполнен указанным цветом. В результату вы получите зелено-голубой цвет.
Как вы могли понять, glClearColor — это функция устанавливающая состояние, а glClear — это функция использующая состояние, которая использует состояние для определения цвета заполнения экрана.
Полный исходный код урока можно найти здесь.
Теперь у нас есть все, чтобы начать заполнять игровой цикл вызовами функций отрисовки, но мы прибережем это для следующего урока.
Как узнать версию видеодрайвера в линукс?
apt-cache show xserver-xorg-video-radeon
apt-cache show nvidia
apt-cache show nv
apt-cache show fglrx
заглянуть в логи xorg
Ну ещё можно поглядеть в пакетном менеджере synaptic установленный пакет
Вот и версия: 260.19.29, другими способами ее, наверное, и не узнать (т.к. устанавливал из оф. блоба).
так, думаю будет лучше, если не нвидиа
если не стоит mesa-progs, то
Кстати, насчет логов иксов выше было дельное предложение.
Извиняюсь не сказал название своей операционной системы. Это не убунтаи не дебиан, так что apt и синаптик отпадают.
bash-4.1$ grep LoadModule /var/log/Xorg.0.log (II) LoadModule: «glx» (II) LoadModule: «extmod» (II) LoadModule: «dri2» (II) LoadModule: «dbe» (II) LoadModule: «dri» (II) LoadModule: «radeon» (II) LoadModule: «vgahw» (II) LoadModule: «int10» (II) LoadModule: «ddc» (II) LoadModule: «i2c» (II) LoadModule: «fb» (II) LoadModule: «ramdac» (II) LoadModule: «exa» (II) LoadModule: «theatre_detect» (II) LoadModule: «evdev»
Вот такой вод вывод, только не понятно где тут упоминание о драйвере и его версии
glxinfo |grep ati GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_allocate_memory, GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, GL_ATI_blend_equation_separate, GL_ATI_texture_env_combine3,
При чем здесь ati, если у вас кривой модуль radeon? glxgears, небось, 20-30fps показывает?
если нвидия то nvidia-xconfig
открытый драйвер ati..скорее всего какой-то xf86-video-ati. поищи в системе такой пакет и посмотри версию
How to tell which version of OpenGL my graphics card supports on Linux
I am trying to figure out which version of OpenGL my graphics card and driver currently support.
This answer suggests running glxinfo | grep OpenGL which if fine, but here is (some) of that output:
So it is hard to tell, is it 4.5 or 4.6?
Also the official documentation from nVidia does not mention the answer either!
1 Answer 1
That is the highest legacy version the implementation will support. There are several possibilities here:
The nvidia proprietary driver falls in category 2.
For the core profile, there is simply no way to ask the implementation what it can support, as described in this answer:
That glxinfo output does not mean that your driver can’t do 4.6 core. (It actually can). It just means that the glxinfo aren’t aware of the presence of GL 4.6 right now, only only check for up to 4.5.
The source code for glxinfo will reveal the following logic:
so it just iterates through an array gl_versions and checks if a context with that version can be created.
And OpenGL 4.6 was added to that array in this commit on October 11, 2017:
So if you use a glxinfo which was compiled on a source code version before Oct 11 (which means basically every distro version right now), it simply will not show 4.6, even if your driver can do it.
So it is hard to tell, is it 4.5 or 4.6?
It is 4.6 for both compatibility and core profile. But I only know that because I know that driver.