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 :)
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.