glut 库中缺少 glutInitContextVersion()
Posted
技术标签:
【中文标题】glut 库中缺少 glutInitContextVersion()【英文标题】:glutInitContextVersion() is missing from glut library 【发布时间】:2014-02-26 23:09:24 【问题描述】:我正在练习一些 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 函数而没有任何错误或警告消息
我在 Macbook air 和 OS X 10.9.1 上运行 Xcode 4.4.1
【问题讨论】:
【参考方案1】:您可以使用 OS X 10.9 的 Xcode 版本附带的 GLUT 创建 3.2+ 核心配置文件上下文。你只需要使用不同的界面。您需要将GLUT_3_2_CORE_PROFILE
标志添加到glutInitDisplayMode()
调用中,而不是调用glutInitContextVersion()
:
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。
【讨论】:
【参考方案2】:GLUT 开发在 许多 年前结束,这实际上是一个非标准扩展(在 FreeGLUT 中添加)。 OS X 附带了自己的标准 GLUT (3.x) 实现。尽管您在问题中提到了 OS X 10.9,但值得指出的是,如果您尝试使用它,编译器会生成各种烦人的弃用警告。
如果您想在 OS X 上使用随附的框架获得 3.2 核心上下文,则必须使用 CGL (C) 或 NSOpenGL (Objective C)。
如果您坚持使用 GLUT,您将需要为 OS X 找到 FreeGLUT 的端口,而不是平台随附的框架。这当然意味着追踪额外的依赖关系,但我认为这没什么大不了的。请记住不要包含 Xcode 附带的 GLUT 标头。
【讨论】:
我不熟悉 OSX API,因为我是 MAC 新手,我确实避免使用 glut,但是当我查询 OpenGL 版本时,它返回 2.1,而 Apple 声明 Macbook air 与 Intel HD Graphics 4000 支持 OpenGL 4.1 这就是我使用 glut 的原因,感谢您的回答 啊,在 OS X 上,您需要一个 core 配置文件上下文才能获得任何 OpenGL 3.2 或更高版本。 OS X / Xcode 附带的 GLUT 框架不允许您这样做,而 AGL 等一些较旧的接口也不会。您需要使用 CGL 或 NSOpenGL 本地获取 3.2+ 上下文,或使用 FreeGLUT、SDL、glfw3 等来隐藏低级内容。如果您刚开始使用 OS X,我建议您使用后来的解决方案之一。处理 Cocoa(OS X 的首选 Objective C 窗口管理框架)对于大多数从 OS X 开始的 C++ 开发人员来说都是一场噩梦。 我会尝试您建议的工具之一,谢谢您的帮助,我真的很感激。【参考方案3】:我有类似的问题,但我没有#include <GL/freeglut.h>
。 “glutInitContextVersion()”是freeglut新增的函数,所以需要在glut的基础上加入freeglut。
【讨论】:
包括 freeglut 而不是 glut。 你是对的。我删除了#include以上是关于glut 库中缺少 glutInitContextVersion()的主要内容,如果未能解决你的问题,请参考以下文章
Haskell GLUT 库中的 ($=)(美元等于)运算符有啥作用?