Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Отличные новости!!!

Mesa 10, что означает поддержку для Opengl 3.3 и GLSL 3.3!

Это протестировано на моем 4-го поколения Core i5 Mobile Processor с графическим чипсетом HD 4400.

Современное развитие OpenGL теперь возможно для интегрированных чипсетов Intel в Linux! это огромный шаг вперед. Note that ubuntu 15.04 ship with Mesa 10.5

Здесь я изображаю треугольник, используя шейдер GLSL 3.3:)

glsl 3.3 shader

Хорошо, поэтому, чтобы заставить экспериментальных драйверов выполнить эту работу на 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/+archive/graphics-drivers/

Ответ 3

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

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

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

#version 330 core

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

glutInitContextVersion (3, 3);

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

glewExperimental = GL_TRUE;

Edit:

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

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

(glEnable(GL_DEPTH_TEST);

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

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

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

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