我运行的配置:
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)。 如果我很容易与发展问题,我失去了在硬件和驱动程序,所以不会有人知道的方式来实现,与我的配置?
Unfortunally在这一刻看起来这是不可能的,因为由英特尔提供的开源驱动是唯一可用的。 有一个版本比你(梅萨9.0.1)新的,但它仍然支持OpenGL 3.0和GLSL 1.30,你可以在该发行说明阅读英特尔开放源代码的网站 。
问题是,开源驱动被卡住梅萨,在这个时刻只支持GLSL 1.40,你可以在这里看到: http://www.mesa3d.org/shading.html#support
我怕,如果你需要使用一个OpenGL 3.3的环境中,你需要获得一个专用的GPU与二进制驱动可用(NVIDIA或ATI显卡)。
好消息!!!
梅萨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
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/
所以我见过很多围绕这一主题的,我想在这里将是应对的好地方。 进出口运行的Ubuntu 15.04采用英特尔IvyBridge的。 使用“英特尔图形安装程序的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因此如果你希望你的代码,你需要指定一个OpenGL核心配置文件和GLSL核心配置 3.3运行。 应按以下步骤,如果你使用的freeglut和GLEW工作:
- 在GLSL的#Version应指定所需的核心配置文件:
#version 330 core
glutInitContextVersion (3, 3);
- 最后设置glewExperimental真glewInit()之前:
glewExperimental = GL_TRUE;
编辑:
从特定角度的网状的东西,我忘了提及这似乎是有关使用freeglut大多数* nix用户是关于深度测试,I,E应该怎样画(什么不应该):
要使用Linux上的深度测试,你不仅需要通过启用深度测试
(glEnable(GL_DEPTH_TEST);
但你也需要创建过剩背景下的深度缓冲(窗口似乎通常默认的深度缓冲,Linux没有)。
使用freeglut这意味着你需要包括GLUT_DEPTH
在glutInitDisplayMode所以它创建的上下文有一个深度缓冲,如
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
PS我只用freeglut因为高校模块我把给我们演示代码使用它来运行。 从那时起,我肯定会推荐切换到GLFW代替。 我回答问题的第一部分还是非常适用,只是GLFW方法,而不是。