18

我正在运行该配置:

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

4

3 回答 3

31

好消息!!!

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 着色器渲染三角形 :)

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/

于 2013-12-15T00:04:41.307 回答
5

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

现在从这里您可以看到核心配置文件和 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 这意味着您需要包含GLUT_DEPTHglutInitDisplayMode中,以便它创建上下文以具有深度缓冲区,例如

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

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

于 2015-10-02T11:30:13.037 回答
1

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

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

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

于 2013-02-11T07:40:24.657 回答