所以我看到了很多关于这个的线程,我认为这里是一个回应的好地方。我用英特尔 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
glutInitContextVersion (3, 3);
- 最后在 glewInit() 之前将 glewExperimental 设置为 true:
glewExperimental = GL_TRUE;
编辑:
我忘记提到的似乎与大多数使用 freeglut 的 *nix 用户相关的东西是关于深度测试的,即从特定角度应该绘制(以及不应该绘制)网格的内容:
要在 Linux 上使用深度测试,您不仅需要通过以下方式启用深度测试
(glEnable(GL_DEPTH_TEST);
但是您还需要创建 glut 上下文以具有深度缓冲区(默认情况下,Windows 似乎通常具有深度缓冲区,而 Linux 则没有)。
使用 freeglut 这意味着您需要包含GLUT_DEPTH
在glutInitDisplayMode中,以便它创建上下文以具有深度缓冲区,例如
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
ps我一直在使用 freeglut,因为我使用的大学模块为我们提供了使用它运行的演示代码。从那时起,我肯定会建议改用glfw。我的答案的第一部分仍然非常适用,只是使用 glfw 方法。