4

免责声明:我看到针对完全相同的问题提出了一些建议,但是(类似的)帖子已迁移到 SuperUsers 并且似乎已被删除。但是,我仍然想在这里发布我的问题,因为我认为它与软件/编程相关的程度不足以在 SuperUsers 上发布(有时软件和硬件问题之间的界限很模糊)。

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

  • OpenGL 警告:XGetVisualInfo 为 0x232dbe0 返回 0 个视觉效果
  • OpenGL 警告:使用 0x802 重试返回 0 个视觉效果
  • 分段故障

从我到目前为止收集到的信息来看,这与 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 警告和分段错误。

4

2 回答 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);
...

如链接中所述。我不清楚为什么这应该纠正段错误问题;显然 glutGet 除了检索状态值之外还有一些副作用。这可能是 freeglut 实施过剩的一个怪癖。

于 2012-12-07T00:38:27.817 回答
4

如果您查看该/etc/environment文件,您会看到其中公开了几个变量 - 这将使您了解如何在整个系统中公开该环境变量。您也可以尝试将其放入其中~/.profile~/.bash_profile根据您的需要。

我心中真正的问题是:您是否为 Ubuntu 安装了来宾插件?您不需要在来宾中安装任何 ATI 驱动程序,因为 VirtualBox 不会将实际的物理图形硬件暴露给您的 VM。您可以在“显示”部分下的虚拟机设置(确保先关闭 VM)中配置来宾以支持 3D 加速。您可能希望增加分配的虚拟内存 - 根据您的需要,64MB 或 128MB 应该足够了。

于 2012-03-18T23:07:51.283 回答