2015-04-02 57 views
0

我嘗試使用以下代碼將OpenGL上下文設置爲v3.3,它創建了4.1上下文。在Mac上設置OpenGL上下文3.3與SDL2,不起作用

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG); 

我做錯了什麼或它是一個mac問題?

+1

您不需要'SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG',這是一個用於OpenGL 3.0和3.1的廢棄標誌,它在3.2及以後版本中是不相關的,並且它在3.0之前不存在。 – 2015-04-02 20:36:45

+1

另請注意,GLEW在覈心上下文中存在一些相當不好的問題,但在OS X上也沒有必要使用GLEW,因爲OS X使用弱連接 - 您可以將#include 和任何函數如果你使用了GLEW,那麼不支持的在運行時就是NULL。 GLEW無法檢查覈心上下文中是否存在擴展,因此,在OS X上使用它*沒有意義,除非它恰好使您的跨平臺生活更輕鬆。 – 2015-04-02 20:40:18

回答

2

OpenGL不提供任何保證,當您要求OpenGL X.Y上下文時,您得到的是正好是的OpenGL X.Y上下文。這取決於你使用的驅動程序。

  • 在OS X上,如果您要求提供核心上下文,則會獲得硬件和操作系統組合支持的最高版本。如果你要求兼容性上下文,你會得到2.1。

  • 在我的Linux/Mesa系統上,我總是獲得3.0兼容性上下文和3.3核心上下文。

  • 在我的Windows/AMD系統上,我得到了我要求的版本。

如果您的代碼假設上下文爲3.3,4.1上下文應該可以正常工作。只需檢查GL版本是否爲您需要的版本,並在需要時檢查是否有兼容性上下文。

+0

在發表評論之前,我仔細閱讀了所有相關規範,不要發佈錯誤;好像我混合了PDF查看器窗口。 mea culpa;刪除了我的評論 – datenwolf 2015-04-02 22:46:32