1

我正在使用 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

4

1 回答 1

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 的更多详细信息,请参阅官方项目站点

于 2013-10-11T05:03:49.260 回答