Проверка версии opengl linux

Как узнать версию OpenGL в Linux и установить последнюю версию

Выход glxinfo | grep «OpenGL»

Я не понимаю этот вывод,
какая версия? и в чем разница между «Строкой версии OpenGL» и «Строкой версии основного профиля OpenGL».

и какими командами Linux мне следует обновить свой OpenGL

1 ответ

Чтобы понять вывод этой команды, вы должны знать, что современные реализации OpenGL поддерживают несколько профилей. Каждый профиль содержит подмножество полной функциональности OpenGL. Профиль может развиваться через разные версии.

Конкретно ваша система поддерживает три профиля:

  • Основной профиль: это самый современный профиль для OpenGL. Приложения, использующие этот контекст, получают доступ к самым последним функциям OpenGL, но не к устаревшим функциям OpenGL, таким как немедленный режим (glBegin и другие). В вашей системе установлена ​​последняя версия 4.6.
  • Профиль совместимости: этот профиль по-прежнему поддерживает устаревшие функции OpenGL, а также некоторые новые функции через расширения. Вы не должны использовать это для новых приложений, только для запуска старых приложений.
  • OpenGL ES: этот профиль был разработан для мобильных систем, но все больше и больше используется и в настольных приложениях. Считайте это небольшим подмножеством OpenGL, которое хорошо подходит для приложений, которым не требуется полный набор инструментов OpenGL. У вас есть OpenGL ES 3.2, который на данный момент снова является новейшим.

Подводя итог: ваша система обновлена, и вы должны иметь возможность создавать и запускать как современные приложения OpenGL, использующие основной или профиль ES, так и устаревшие приложения OpenGL, использующие профиль совместимости.

Источник

Как узнать версию видеодрайвера в линукс?

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,

$ glxinfo |grep -i opengl OpenGL vendor string: DRI R300 Project OpenGL renderer string: Mesa DRI R300 (RV350 4150) 20090101 AGP 8x x86/MMX+/3DNow!+/SSE TCL OpenGL version string: 1.5 Mesa 7.8.1 OpenGL extensions:

При чем здесь ati, если у вас кривой модуль radeon? glxgears, небось, 20-30fps показывает?

если нвидия то nvidia-xconfig

bash-4.1$ cat /var/log/Xorg.0.log|grep -i driver (WW) AllowEmptyInput is on, devices using drivers ‘kbd’, ‘mouse’ or ‘vmmouse’ will be disabled. X.Org Video Driver: 6.0 X.Org XInput driver : 7.0 (II) Loading /usr/lib/xorg/modules/drivers/radeon_drv.so Module class: X.Org Video Driver ABI class: X.Org Video Driver, version 6.0 (II) RADEON: Driver for ATI Radeon chipsets: ABI class: X.Org Video Driver, version 6.0 ABI class: X.Org Video Driver, version 6.0 ABI class: X.Org Video Driver, version 6.0 (II) EXA(0): Driver registered support for the following operations: ABI class: X.Org Video Driver, version 6.0 (II) AIGLX: enabled GLX_texture_from_pixmap with driver support Module class: X.Org XInput Driver ABI class: X.Org XInput driver, version 7.0

Читайте также:  Моя семья для windows phone

открытый драйвер ati..скорее всего какой-то xf86-video-ati. поищи в системе такой пакет и посмотри версию

Источник

How to know OpenGL version in Linux and install the last version [closed]

Want to improve this question? Update the question so it’s on-topic for Stack Overflow.

Closed last year .

the output glxinfo | grep «OpenGL»

I don’t understand that output,
what is the version ? and what is the difference between «OpenGL Version string» and «OpenGL core profile version string».

and what linux commands should i upgrade my OpenGL

1 Answer 1

To understand the output of this command, you should know that modern OpenGL implementations support multiple profiles. Each profile contains a subset of the complete OpenGL functionality. Profile can evolve through different versions.

Concretely, your system supports three profiles:

  • Core profile: this is the most modern profile for OpenGL. Applications that use this context get access to the most recent OpenGL features, but not the legacy OpenGL functionality like immediate mode (glBegin and friends). Your system has 4.6 which is the newest currently.
  • Compatibility profile: this profile still supports the legacy OpenGL functionality but also some of the newer functionality through extensions. You should not use this for new applications, only for running older applications.
  • OpenGL ES: this profile was designed for mobile systems, but is more and more being used on desktop applications as well. Consider it a small subset of OpenGL that is good for applications that do not need the full OpenGL toolkit. You have OpenGL ES 3.2 which is again the newest currently.

To summarize: your system is up to date and you should be able to create and run both modern OpenGL applications that use the core or ES profile, and legacy OpenGL applications that use the compatibility profile.

Источник

learnopengl. Урок 1.3 — Hello Window

После установки GLFW самое время сделать простенькую программку, как это принято в подобных материалах, пусть это будет Hello World. Для начала нужно создать .cpp файл и подключить несколько заголовочников, также необходимо установить переменную GLEW_STATIC, которая указывает на то, что мы будем использовать статическую версию библиотеки GLEW.

Убедитесь в том, что подключение 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.

Читайте также:  All windows run fix

Сигнатура функции 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.

За кулисами OpenGL использует данные, переданные через glViewport для преобразования 2D координат в координаты экрана. К примеру позиция (-0.5, 0.5) в результате будет преобразована в (200, 450). Заметьте, что обрабатываемые координаты OpenGL находятся в промежутке от -1 до 1, соответственно мы можем эффективно преобразовывать из диапазона (-1, 1) в (0,800) и (0,600).

Подготавливаем двигатели

Мы не хотим, чтобы приложение сразу после отрисовки одного изображения упало. Мы хотим, чтобы программа продолжала отрисовывать изображения и обрабатывать пользовательский ввод до тех пор, пока ее не закроют. Для этого мы должны создать цикл, называемый игровым циклом, который будет обрабатываться до тех пор, пока мы не скажем GLFW остановиться.

Функция glfwWindowShouldClose проверяет в начале каждой итерации цикла, получил ли GLFW инструкцию к закрытию, если так — то функция вернет true и игровой цикл перестанет работать, после чего мы сможем закрыть наше приложение.

Функция glfwPollEvents проверяет были ли вызваны какие либо события (вроде ввода с клавиатуры или перемещение мыши) и вызывает установленные функции (которые мы можем установить через функции обратного вызова (callback)). Обычно мы вызываем функции обработки событий в начале итерации цикла.

Функция glfwSwapBuffers заменяет цветовой буфер (большой буфер, содержащий значения цвета для каждого пикселя в GLFW окне), который использовался для отрисовки во время текущей итерации и показывает результат на экране.

Двойная буферизация
Когда приложение отрисовывает в единственный буфер, то результирующее изображение может мерцать. Причина такого поведения в том, что отрисовка происходит не мгновенно, а попиксельно сверху слева, вправо вниз. Поскольку изображение отображается не мгновенно, а постепенно, то оно может иметь немало артефактов. Для избежания этих проблем, оконные приложения используют двойную буферизация. Передний буфер содержит результирующее изображение, отображаемое пользователю, в это же время на задний буфер ведется отрисовка. Как только отрисовка будет закончена, эти буферы меняются местами и изображение единовременно отображается пользователю.

Еще кое что

Как только мы вышли из игрового цикла, надо очистить выделенные нам ресурсы. Делается это функцией glfwTerminate в конце main функции.

Читайте также:  Вирус windows services что это

Этот код очистит все ресурсы и выйдет из приложения. Теперь, попробуйте собрать приложение и если проблем с этим не возникнет вы увидите следующее:

Если у вас отобразилась скучнейшая черная картинка — то вы все сделали правильно! Если у вас отрисовывается что-то другое или у вас возникли проблемы с соединением всех примеров в уроке, то попробуйте этот исходный код.

Если у вас есть проблемы со сборкой приложения, для начала, удостоверьтесь, что линковщик в вашей 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 — это функция использующая состояние, которая использует состояние для определения цвета заполнения экрана.

Полный исходный код урока можно найти здесь.

Теперь у нас есть все, чтобы начать заполнять игровой цикл вызовами функций отрисовки, но мы прибережем это для следующего урока.

Источник

Оцените статью