7

我正在练习一些opengl代码,但是当我想通过glutInitContextVersion()强制opengl上下文使用某个版本的opengl时,它会导致编译过程失败并给出以下消息:-

使用未声明的标识符“glutInitContextVersion”

我想解决这个问题,所以我让我的代码尽可能简单

代码

#include "File.h"
#include <GLUT/GLUT.h>
#include <OpenGL/OpenGL.h>

using namespace std;

int  main ()
{

    glutInitContextVersion(3,2);

    return 1;
}

但是我能够使用其他 glut 函数而没有任何错误或警告消息

我在装有 OS X 10.9.1 的 Macbook air 上运行 Xcode 4.4.1

4

3 回答 3

6

您可以使用 OS X 10.9 的 Xcode 版本附带的 GLUT 创建 3.2+ 核心配置文件上下文。你只需要使用不同的界面。glutInitContextVersion()您需要将GLUT_3_2_CORE_PROFILE标志添加到调用中,而不是glutInitDisplayMode()调用:

glutInitDisplayMode(... | GLUT_3_2_CORE_PROFILE);

您还需要包含<OpenGL/gl3.h> before <GLUT/glut.h>才能使用 GL3 和更高版本的功能。

由于 GLUT 在 OS X 10.9 中被标记为已弃用,因此整个事情将产生一堆编译器警告。我对相关问题的回答包含有关如何禁用这些警告的说明:Glut deprecation in Mac OSX 10.9, IDE: QT Creator

于 2014-08-01T08:41:56.520 回答
5

GLUT 开发多年前就结束,这实际上是一个非标准扩展(在 FreeGLUT 中添加)。OS X 附带了自己的标准 GLUT (3.x) 实现。尽管您在问题中提到了 OS X 10.9,但值得指出的是,如果您尝试使用它,编译器会生成各种烦人的弃用警告。

如果您想使用随附的框架在 OS X 上获得 3.2 核心上下文,则必须使用 CGL (C) 或 NSOpenGL (Objective C)。

如果您坚持使用 GLUT,您将需要找到适用于 OS X 的 FreeGLUT 端口,而不是平台随附的 Framework。这当然意味着追踪额外的依赖关系,但我认为这没什么大不了的。只要记住停止包含 Xcode 附带的 GLUT 头文件。

于 2014-02-26T23:27:57.910 回答
4

I had a similar problem, and I didn't #include <GL/freeglut.h>. "glutInitContextVersion()" is a new function added by freeglut, so you need to include freeglut in addition to glut.

于 2014-08-01T06:51:13.650 回答