我在OSX上使用OpenGL 3.2和GLUT,并在命令行上进行编译,如下所示:
gcc test.c -framework OpenGL -framework GLUT
在我的源文件的顶部,我手动包含两个标题:
#include <OpenGL/OpenGL.h>
#include <GLUT/GLUT.h>
到目前为止,一切都很好,花花公子。但今天我注意到使用GL_PRIMITIVE_RESTART给了我一个未声明的标识符错误......
我需要包含其他标头还是其他框架?或者苹果公司在实施OpenGL 3.2时不支持GL_PRIMITIVE_RESTART吗?
答案 0 :(得分:1)
您不是直接包含任何OpenGL标头。 <OpenGL/OpenGL.h>
可能听起来像是OpenGL标题,但它实际上包含CGL的定义。
您间接获得OpenGL标头,因为<GLUT/GLUT.h>
包含<OpenGL/gl.h>
。不幸的是,这是GL3之前的头文件,这就是为什么你没有GL3级别定义。
您想要的标头是<OpenGL/gl3.h>
。您可以自己添加,但很可能会看到一些警告,因为<GLUT/glut.h>
仍然会包含旧标头,并且它会指出可能的冲突。我找到的最好的是使用这样的包含序列:
#include <OpenGL/gl3.h>
#define __gl_h_
#include <GLUT/glut.h>
#define
对应<OpenGL/gl.h>
中的标题保护,并阻止其被包含。
Apple正在弃用GLUT。您必须在OS X 10.9中禁用其他警告,以防止它抱怨使用GLUT。它也不支持创建比GL 3.2更新的上下文。