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