Ubuntu 12.04 下 HD Graphics 4000 上的 OpenGL 和 GLSL 3.3

Posted

技术标签:

【中文标题】Ubuntu 12.04 下 HD Graphics 4000 上的 OpenGL 和 GLSL 3.3【英文标题】:OpenGL & GLSL 3.3 on an HD Graphics 4000 under Ubuntu 12.04 【发布时间】:2012-12-16 22:17:52 【问题描述】:

我正在运行该配置:

Ubuntu 12.04 英特尔高清显卡 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)。如果我很容易解决开发问题,我会迷失在硬件和驱动程序中,那么有人知道用我的配置实现这一目标的方法吗?

【问题讨论】:

在安装了许多不同的驱动程序、软件包后,我设法升级到OpenGL version string: 3.0 Mesa 8.0.4 and OpenGL shading language version string: 1.30。有没有人成功至少 OpenGL 3.3? 【参考方案1】:

好消息!!!

Mesa 10 已推出,这意味着支持 Opengl 3.3GLSL 3.3

这是在我的带有 HD 4400 图形芯片组的第四代酷睿 i5 移动处理器上测试的。

现代OpenGL 开发现在可以在Linux 中的集成英特尔芯片组上进行!这是向前迈出的一大步。 Note that ubuntu 15.04 ship with Mesa 10.5

这是我使用 GLSL 3.3 着色器渲染三角形 :)

好的,为了获得实验性驱动程序以使其在 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/

【讨论】:

感谢您的帖子,真的很有帮助!奇怪的是,虽然glxinfo 确实为我报告了 Mesa 10.1,但仍然只有 OpenGL 3.0 可用。你知道为什么会这样吗?我在这里发布了问题:***.com/questions/21565680/… 谢谢! ***.com/questions/25936165/… - 你能帮我解决这个问题吗?我必须强制使用软件渲染器,因为我的 Ubuntu 在 VmWare 中运行 这在 14.04 中似乎还不能正常工作(现在是六月)。 glxinfo 报告核心配置文件的相同字符串,但随后: OpenGL 版本字符串:3.0 Mesa 10.7.0-devel (git-f97166e 2015-06-01 trusty-oibaf-ppa) OpenGL 着色语言版本字符串 1.30 当我创建上下文时过剩请求版本 3.3 我仍然得到版本 3.0 上下文。 @cheshirekow 是的 - canonical 没有信守承诺......我会更新这个 您需要请求 opengl 3.3 核心配置文件才能获得它。它不是默认的,因为 3.3 不向后兼容。您可以尝试覆盖报告的版本,并通过设置环境变量来查看会发生什么,例如MESA_GL_VERSION_OVERRIDE=3.3 MESA_GLSL_VERSION_OVERRIDE=330 ./my_program【参考方案2】:

所以我看到了很多关于这个的话题,我认为这里是一个回复的好地方。我用英特尔 ivybridge 运行 Ubuntu 15.04。在使用“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);

最后在 glewInit() 之前将 glewExperimental 设置为 true:

glewExperimental = GL_TRUE;

编辑:

我忘记提及的似乎与大多数使用 freeglut 的 *nix 用户相关的东西是关于深度测试,即从特定角度应该绘制(以及不应该绘制)网格的内容:

要在 Linux 上使用深度测试,您不仅需要通过以下方式启用深度测试

(glEnable(GL_DEPTH_TEST);

但您还需要创建 glut 上下文以具有深度缓冲区(Windows 似乎通常默认具有深度缓冲区,而 Linux 没有)。

使用 freeglut 意味着您需要在 glutInitDisplayMode 中包含 GLUT_DEPTH 以便它创建上下文以具有深度缓冲区,例如

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

p.s.我一直在使用 freeglut,因为我使用的大学模块为我们提供了使用它运行的演示代码。从那时起,我肯定会建议改用glfw。我的答案的第一部分仍然非常适用,只是使用 glfw 方法。

【讨论】:

【参考方案3】:

不幸的是,目前看来这是不可能的,因为英特尔提供的开源驱动程序是唯一可用的。有一个比您的版本更新的版本(Mesa 9.0.1),但它仍然支持 OpenGL 3.0 和 GLSL 1.30,您可以在 Intel Open Source website 的发行说明中阅读。

问题是开源驱动卡在 Mesa 上,目前只支持 GLSL 1.40,你可以在这里看到:http://www.mesa3d.org/shading.html#support

恐怕如果您需要使用 OpenGL 3.3 环境,您将需要获得具有可用二进制驱动程序(nvidia 或 ati 卡)的专用 GPU。

【讨论】:

以上是关于Ubuntu 12.04 下 HD Graphics 4000 上的 OpenGL 和 GLSL 3.3的主要内容,如果未能解决你的问题,请参考以下文章

Hortonworks Data Platform (Hadoop) 在 Ubuntu 12.04 64bit 上安装单节点集群

Ubuntu12.04下配置Eclipse+PyDev

ubuntu 12.04下无法安装MySQL-python

ubuntu12.04下安装搜狗拼音

Ubuntu 12.04下搭建Xilinx交叉编译环境

Ubuntu 12.04下搭建Xilinx交叉编译环境