2014-02-26 117 views
5

我在練一些OpenGL的代碼,當我想怎麼過強制OpenGL上下文通過glutInitContextVersion()使用OpenGL的某個版本失敗的編譯過程,並給出了這樣的消息: -glutInitContextVersion()從glut庫缺少

使用未聲明的標識符「glutInitContextVersion」

的,我想解決這個問題,所以我保持我的代碼儘可能簡單

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

using namespace std; 

int main() 
{ 

    glutInitContextVersion(3,2); 

    return 1; 
} 

但是我能使用沒有任何錯誤等過剩的功能或警告消息

我在MacBook Air上使用OS X 10.9.1

運行的Xcode 4.4.1

回答

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的端口,而不是平臺附帶的框架。這當然意味着追查更多的依賴關係,但我認爲這不是什麼大問題。只記得停止包含Xcode附帶的GLUT頭文件。

+0

我不熟悉OSX API,因爲我是MAC新手,但是我真的避免使用過剩,但是當我查詢OpenGL版本時,它返回2.1,而Apple則表示MacBook Air與** Intel HD Graphics 4000 **支持OpenGL 4.1這就是爲什麼我使用過剩,謝謝你的回答 – BulBul

+1

啊,在OS X上,你需要*** ***核心配置文件上下文才能獲得OpenGL 3.2或更高版本。過剩框架附帶OS X/Xcode中不會讓你這樣做,有的像AGL的舊接口的也不會。您需要使用CGL或NSOpenGL獲得3.2+原生情境,或使用FreeGLUT,SDL,glfw3等向您隱藏低層次的東西。如果你剛開始使用OS X,我會推薦其中一種解決方案。與可可(OS X的首選*目的C *窗口管理框架)的交易是在OS X –

+0

開始了大多數C++開發人員,我會嘗試你的建議的工具之一是一場噩夢,感謝您的幫助,我真的很感激。 – BulBul

0

我有類似的問題,我沒有#include <GL/freeglut.h>。 「glutInitContextVersion()」是freeglut添加的新功能,因此除了glut外,還需要包含freeglut。

+1

包括freeglut *代替*過剩的。 – fintelia

+1

你說得對。我刪除了#include 。它仍然編譯並運行良好。 – barbiedude97

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