OpenGL & GLSL 3.3 на HD Graphics 4000 под Ubuntu 12.04

Я запускаю эту конфигурацию:

  • Ubuntu 12.04
  • Intel HD Graphics 4000

glxinfo дайте мне параметры:

OpenGL renderer string: Mesa X11
OpenGL version string: 2.1 Mesa 8.0.4
OpenGL shading language version string: 1.20
OpenGL extensions:

моей целью было запустить OpenGL 3.3 (и так GLSL 3.3). Если я легко справляюсь с проблемами разработки, я теряюсь в оборудовании и драйверах, поэтому кто-то знает способ достичь этого с моей конфигурацией?

3 ответов


к сожалению, в данный момент это кажется невозможным, так как драйверы с открытым исходным кодом, предоставляемые Intel, являются единственными доступными. Существует версия новее вашей (Mesa 9.0.1), но она по-прежнему поддерживает OpenGL 3.0 и GLSL 1.30, как вы можете прочитать в примечаниях к выпуску в Intel откроет сайт Источник.

проблема в том, что драйверы с открытым исходным кодом застряли с Mesa, который в данный момент поддерживает только GLSL 1.40, как вы можете видеть здесь: http://www.mesa3d.org/shading.html#support

Я боюсь, что если вам нужно использовать среду OpenGL 3.3, вам нужно будет получить выделенный GPU с доступными двоичными драйверами (карты nvidia или ati).


Отличная Новость!!!

Меса 10 отсутствует, что означает поддержку Opengl 3.3 и GLSL 3.3!

это протестировано на моем мобильном процессоре Core i5 4-го поколения с графическим чипсетом HD 4400.

современные OpenGL разработка теперь возможна на интегрированных чипсетах intel в linux! это огромный шаг вперед. Note that ubuntu 15.04 ship with Mesa 10.5

вот я рендеринг треугольника с помощью шейдера GLSL 3.3 :)

glsl 3.3 shader

Ok, чтобы получить экспериментальные драйверы, чтобы сделать эту работу на Ubuntu 13.10 вам нужно будет сделать несколько вещей:

# Note this will take awhile!
1.) Add the PPA Repository
  $ sudo add-apt-repository ppa:oibaf/graphics-drivers
2.) Update sources
  $ sudo apt-get update
3.) Dist-upgrade (rebuilds many packages)
  $ sudo apt-get dist-upgrade
4.) Reboot!

In your code make sure you request a Opengl 3.3 context!

выполнить команду glxinfo | grep OpenGL вы должны получить что-то вроде...

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.1.0-devel (git-f9cfe5c     saucy-oibaf-ppa)
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

источник Статьи

http://www.phoronix.com/scan.php?page=news_item&px=MTQ5OTk

https://launchpad.net / ~oibaf / + архив / графика-драйверы/


Итак, я видел много нитей, окружающих это, и я подумал, что здесь будет хорошее место для ответа. Im работает Ubuntu 15.04 с intel ivybridge. После использования приложения "Intel Graphics installer for linux", glxinfo дает следующую информацию о openGl:

OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.0
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 10.6.0
OpenGL shading language version string: 1.30

теперь из этого видно, что базовый профиль и версия glsl-3.3, но совместимый openGl - только 3.0, поэтому, если вы хотите, чтобы ваш код работал с 3.3, вам нужно указать как профиль ядра opengl, так и профиль ядра glsl. Следующие шаги должны работать, если вы используете freeglut и glew:

  • версия glsl #должна указать, что вы хотите основной профиль:

#version 330 core

  • укажите, что вы хотите opengl 3.3:

glutInitContextVersion (3, 3);

  • и, наконец, установить glewExperimental в true перед glewInit():

glewExperimental = GL_TRUE;

Edit:

что - то я забыл упомянуть,что,похоже, имеет отношение к большинству пользователей *nix, использующих freeglut, касается глубинного тестирования, то есть того, что должно быть нарисовано( и что не должно) сетки с определенной точки зрения:

чтобы использовать тестирование глубины в Linux, вам не только нужно включить тестирование глубины через

(glEnable(GL_DEPTH_TEST);

но вам также нужно создать свой контекст glut имеет буфер глубины (Windows, как правило, имеет буфер глубины по умолчанию, Linux-нет).

используя freeglut, это означает, что вам нужно включить GLUT_DEPTH на glutInitDisplayMode так что он создает контекст, чтобы иметь буфер глубины, например

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

п.з. Я использую freeglut только потому, что модуль колледжа, который я взял, дал нам демо-код для его запуска. С тех пор я определенно рекомендую переключение на glfw. Первая часть моего ответа все еще в значительной степени применима, только с методами glfw.