在VirtualBox Ubuntu 11.10上使用OpenGL GLUT出现分段错误

4

声明:我发现有一些关于同样问题的建议,但是那个(类似)帖子已经被移至SuperUsers并被删除。然而,我仍然想在这里发布我的问题,因为我认为它与软件/编程有关,不应该在SuperUsers上发布(有时候软件和硬件问题之间的界限并不明显)。

我在VirtualBox上使用Ubuntu 11.10 SSD运行Code::Blocks中非常简单的OpenGL程序。每当我构建并运行程序时,我都会收到以下错误:

  • OpenGL警告:XGetVisualInfo对0x232dbe0返回0个可视化信息
  • OpenGL警告:使用0x802重试未返回任何可视化信息
  • 分段错误

根据我目前自己了解的情况,这与VirtualBox有关。我需要设置

  • LIBGL_ALWAYS_INDIRECT=1

换句话说,通过X.org启用间接渲染,而不是直接与硬件通信。这个问题可能与我拥有ATI卡无关,因为我有一台带有ATI卡的笔记本电脑可以完美运行相同程序。

然而,我不敢说我的GPU是ATI并不起作用。我也不确定驱动程序是否已正确安装(在系统信息->图形->图形驱动程序下显示为Chromium)。

任何有关如何设置LIBGL_ALWAYS_INDIRECT=1的帮助都将不胜感激。我仅仅缺乏把这个命令放在哪里或在终端中如何执行它的知识。

来源:

编辑:在终端中输入:

export LIBGL_ALWAYS_INDIRECT = 1

验证直接渲染是否关闭:

glxinfo | grep direct

然而,问题仍然存在。我仍然收到有关OpenGL警告和分段错误的提醒。

在虚拟机配置中,你的3D加速设置是什么? - dwerner
2个回答

9
我在VirtualBox中的Ubuntu 12.04上运行Bullet Physics OpenGL演示时遇到了同样的问题。与其使用间接渲染,我通过修改源代码中的glut窗口创建代码,如此描述:https://groups.google.com/forum/?fromgroups=#!topic/comp.graphics.api.opengl/Oecgo2Fc9Zc,成功解决了这个问题。
这意味着替换原始的
...
glutCreateWindow(title);
...

使用

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

如链接所述。对我来说,为什么这样可以解决segfault问题还不清楚;显然glutGet除了检索状态值之外还有一些副作用。这可能是freeglut实现glut的一些怪癖。


4
如果您查看/etc/environment文件,您可以看到其中暴露了一些变量——这将让您了解如何在整个系统中公开该环境变量。根据您的需要,您还可以尝试将其放置在~/.profile~/.bash_profile中。
我脑海中真正的问题是:您是否已安装Ubuntu的客户机附加组件?您不需要在客户机中安装任何ATI驱动程序,因为VirtualBox不会将实际的物理图形硬件暴露给VM。您可以在虚拟机设置(确保关闭VM)的“显示”部分中配置您的Guest以支持3D加速。您可能需要增加分配的虚拟内存——64MB或128MB足够满足您的需求。

我在一些备用的SSD空间上进行了完整的Ubuntu全新安装,现在一切都运行良好。看起来问题与Vbox有关。顺便说一下,我的图形内存为128MB。尽管如此,你是唯一回答并努力解决这个问题的人,因此我会接受这个答案。 - Matthias Calis
将虚拟内存扩大并在“~/.bashrc”中添加“export LIBGL_ALWAYS_INDIRECT=1”对我很有用,谢谢! - A D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接