OpenGL GLUT в VirtualBox Ubuntu 11.10 ошибка сегментации - PullRequest
4 голосов
/ 18 марта 2012

ПРЕДУПРЕЖДЕНИЕ: Я вижу, что появляются некоторые предложения по тому же вопросу, однако этот (похожий) пост был перенесен в SuperUsers и, похоже, был удален. Однако я все же хотел бы опубликовать свой вопрос здесь, потому что я считаю, что это связано с программным обеспечением / программированием достаточно, чтобы не публиковать его на SuperUsers (иногда между приложением и программным обеспечением существует неопределенная грань).

Я использую очень простую программу OpenGL в Code :: Blocks в VirtualBox с Ubuntu 11.10, установленной на SSD. Всякий раз, когда я собираю и запускаю программу, я получаю следующие ошибки:

  • Предупреждение OpenGL: XGetVisualInfo вернул 0 визуальных элементов для 0x232dbe0
  • Предупреждение OpenGL: повтор с 0x802 вернул 0 визуальных элементов
  • Ошибка сегментации

Из того, что я до сих пор собирал, это связано с VirtualBox. Мне нужно установить

  • LIBGL_ALWAYS_INDIRECT = 1

Другими словами, разрешить косвенный рендеринг через X.org, а не напрямую связываться с оборудованием. Эта проблема, вероятно, не связана с тем фактом, что у меня есть карта ATI, поскольку у меня есть ноутбук с картой ATI, которая безупречно выполняет ту же программу.

Тем не менее, я не смею сказать, что тот факт, что мой графический процессор является ATI, не играет никакой роли вообще. Также я не уверен, правильно ли установлены драйверы (в разделе Информация о системе -> Графика -> Драйвер графического адаптера: Chromium.)

Любая помощь по КАК установить LIBGL_ALWAYS_INDIRECT = 1 будет принята с благодарностью. Мне просто не хватает знания, где разместить эту команду или где / как выполнить ее в терминале.

Источники:

РЕДАКТИРОВАТЬ: в терминале типа:

export LIBGL_ALWAYS_INDIRECT = 1

Чтобы убедиться, что прямой рендеринг отключен:

glxinfo | grep direct

Однако проблема сохраняется. Я все еще получаю упомянутые предупреждения OpenGL и ошибку сегментации.

Ответы [ 2 ]

9 голосов
/ 07 декабря 2012

Я столкнулся с этой же проблемой, запустив демонстрации Bullet Physics OpenGL в Ubuntu 12.04 внутри VirtualBox.Вместо использования косвенного рендеринга я смог решить эту проблему, изменив код создания окна перенасыщения в моем источнике, как описано здесь: https://groups.google.com/forum/?fromgroups=#!topic/comp.graphics.api.opengl/Oecgo2Fc9Zc.

Это повлекло за собой замену исходного

...
glutCreateWindow(title);
...

с

...
if (!glutGet(GLUT_DISPLAY_MODE_POSSIBLE))
{ 
    exit(1); 
}
glutCreateWindow(title);
...

, как описано в ссылке.Мне не понятно, почему это должно исправить проблему с сегфо;очевидно, у glutGet есть некоторые побочные эффекты помимо получения значений состояния.Это может быть причудой реализации glut у freeglut.

4 голосов
/ 19 марта 2012

Если вы посмотрите на файл /etc/environment, вы увидите пару переменных, представленных там, - это даст вам представление о том, как представить эту переменную среды во всей системе.Вы также можете попробовать ввести его либо в ~/.profile, либо в ~/.bash_profile в зависимости от ваших потребностей.

Реальный вопрос, который у меня возникает, это: вы устанавливали гостевые дополнения для Ubuntu?Вам не нужно устанавливать какие-либо драйверы ATI в вашем госте, поскольку VirtualBox не будет выставлять фактическое физическое графическое оборудование вашей виртуальной машине.Вы можете настроить гостя для поддержки 3D-ускорения в настройках виртуальной машины (сначала убедитесь, что вы выключили ВМ) в разделе «Дисплей».Возможно, вы захотите увеличить выделенную виртуальную память - 64 МБ или 128 МБ должно быть достаточно в зависимости от ваших потребностей.

...