glut库中缺少glutInitContextVersion()

时间:2014-02-26 23:09:24

标签: c++ macos opengl glut undeclared-identifier

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

  

使用未声明的标识符'glutInitContextVersion'

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

代码

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

using namespace std;

int  main ()
{

    glutInitContextVersion(3,2);

    return 1;
}

但我可以使用其他过剩功能,没有任何错误或警告信息

我使用OS X 10.9.1在Macbook air上运行Xcode 4.4.1

3 个答案:

答案 0 :(得分: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>之前添加<GLUT/glut.h> 以使用GL3及更高版本的功能。

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

答案 1 :(得分:5)

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

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

如果您坚持使用GLUT,则需要为OS X找到FreeGLUT的端口,而不是平台附带的Framework。这当然意味着追踪其他依赖关系,但我认为这不会是一件大事。请记住停止包含Xcode附带的GLUT标题。

答案 2 :(得分:0)

我有类似的问题,但我没有#include <GL/freeglut.h>。 “glutInitContextVersion()”是freeglut添加的新功能,因此除了过剩之外,还需要包含freeglut。