2013-02-26 72 views
8

我在Mac上工作,我已經編譯並安裝了FreeGlut,但我似乎無法獲得OpenGL 3.2上下文。但是,我可以在使用GLFW時沒有任何問題。 所以在GLFW,此代碼工作完全正常:GLFW打開OpenGL 3.2上下文,但Freeglut不能 - 爲什麼?

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW) 

但隨着FreeGlut,該代碼失敗(上glutCreateWindow):

glutInitContextVersion (3, 2); 
glutInitContextProfile(GLUT_CORE_PROFILE); 
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200); 
int window = glutCreateWindow (argv[0]); 

它失敗,錯誤是:

X Error of failed request: BadRequest (invalid request code or no such operation) 
    Major opcode of failed request: 34 (X_UngrabKey) 
    Serial number of failed request: 29 
    Current serial number in output stream: 29 

我正在使用Intel HD4000顯卡的MacOS X 10.8 Mountain Lion,已經將XQuartz安裝爲我的X11服務器,並且已經從源代碼編譯並安裝了FreeGlut 2.8。

有誰知道可能是什麼問題?

+0

確切的問題,但我使用XQuartz(opt/x11/lib opt/x11/include)中包含的FreeGlut。你解決了這個問題嗎? – Christoph 2013-09-29 14:26:29

+0

同樣的問題在這裏 - 你能解決這個問題嗎? – 2013-11-12 15:26:19

+0

你們有沒有解決過這個問題?我有同樣的問題。我使用XQuartz中包含的freeGlut – ammar26 2014-01-29 16:23:54

回答

1

在10.8和10.7中,如果您在設置GL上下文時顯式調用GL 3.2,則可以使用GL 3.2。 Apple將此稱爲「核心配置文件」,以區別於GL 2.1的「傳統配置文件」。

我在OSX上遇到了Wine問題,它不支持OpenGL 3.2。我的理解是,X11服務器(蘋果X11或XQuartz)目前不支持3.2,也沒有切換到某處來啓用它。這可能是兼容性問題,因爲3.2配置文件將使用GLFW打破一些existing GL applications

This post suggests(或者蘋果的GLUT.framework如果還有這樣的事)

This page解釋了OSX的GL堆棧和確認2.1問題與GLX。

+0

我很抱歉,但不明白這是如何與我的問題。正如我所表明的那樣 - 它能與GLFW一起工作,GLFW在我的系統上運行在XQuartz之上,所以它確實支持3.2上下文。 – gambiting 2013-02-26 22:34:58

+0

我很抱歉,但不明白這與我的問題有何關係。正如我所說 - OpenGL 3.2是否與GLFW一起工作,GLFW在我的系統上運行在XQuartz之上,所以它確實支持3.2上下文。 我唯一的問題是我想使用freeglut,純粹是因爲它更方便。但如果這是不可能的,那麼我將使用GLFW進行開發。但請不要告訴我不可能得到3.2的背景,因爲我已經有了一個。 – gambiting 2013-02-26 22:40:25

+1

glfw也有一個[可可和碳口](http://sourceforge.net/p/glfw/svn/1617/tree/trunk/lib/),你確定它在XQuartz之上運行嗎? – wally 2013-02-27 17:31:03

0

Freeglut是SGI GLUT工具包的一個擴展實現,並且(除了廢棄硬件之外的一些例外)實現相同的功能。

不幸的是,這包括許多功能,這些功能將在嚴格的CORE/FORWARD COMPATIBLE實現中打破。通常情況下,如果您在沒有指定版本或配置文件的情況下請求上下文,您將獲得驅動程序和GL工具包的組合可以提供的最佳效果,通常是兼容性配置文件,而不是核心配置文件。

請注意,您通過使用兼容性配置文件失去的唯一一件事是假定檢查已棄用的函數。所有新的核心功能都應該沒有問題。

這個問題與freeglut不限於蘋果,它也表現在Linux下使用一些Gallium驅動程序。目前還不清楚是否有任何短期意圖來糾正這種情況,所以如果您需要使用CORE/FORWARD COMPATIBLE,則應該切換到GLFW或SDL。

0

您需要包含該標誌。通常在版本下。它應該看起來像這樣:

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE); 
相關問題