在Linux上为OpenGL 4.2设置开发环境(故障排除gl.h)

时间:2013-10-11 04:49:22

标签: c++ linux opengl

我使用GLFW和Netbeans在C ++中开发。我能用立即模式功能渲染没问题。但是,当我尝试使用核心配置文件函数时,我会收到如下错误:

error: ‘glCreateShader’ was not declared in this scope

我尝试了每个核心配置文件功能的其中一个错误。我做了一些研究,发现GLFW没有提供任何gl标题,只是#include我系统上的标题(在/ usr / include / GL /)。

据推测,这意味着此处找到的gl.h和相关文件仅包含旧式OpenGL API。我无法理解十六进制代码,但gl.h文件#define的GL_VERSION为0x1F02。

如果我在终端中执行此命令:glxinfo | grep -i opengl它确保我的OpenGL版本字符串是" 4.2.0 NVIDIA 304.88" - 虽然我认为这反映在驱动程序中,与gl.h文件无关。在我的应用程序中用C ++代码运行这一行产生相同的字符串:printf("%s\n", glGetString(GL_VERSION));出于同样的原因,毫无疑问。

我在哪里可以在Ubuntu 13.04 x64上为OpenGL 3+开发提供适当的OpenGL头文件?

我按照大多数教程的建议安装了这些软件包(无济于事):xorg-dev libglu1-mesa-dev

1 个答案:

答案 0 :(得分:5)

glCreateShader (...)是一个OpenGL 2.0函数。

缺少OS X,我想不出OpenGL 2.0附带的任何平台而不需要运行时扩展。在Microsoft Windows上,您可以获得OpenGL 1.1的完整功能集,除此之外的任何内容都需要调用wglGetProcAddress (...)来加载其余OpenGL API的函数入口点。 Linux上的情况是相同的,尽管定义“最小”功能集的内容更加困难。在任何情况下,要使用glCreateShader (...),您必须致电glXGetProcAddress (...)才能从驱动程序获取入口点。

像GLEW这样的库会为你的驱动程序支持的每个扩展和核心版本的OpenGL加载每个函数的入口点,让你的生活变得更轻松,在Ubuntu上甚至应该有一个包含GLEW的软件包。不过,有关实际使用GLEW的详细信息,请参阅official project site