我正在练习一些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
答案 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。