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 英特尔高清显卡 4000glxinfo
给我那个参数:
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.3
和 GLSL 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
glutInitContextVersion (3, 3);
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 上安装单节点集群