2014-10-17 64 views
3

我正在運行Mac OSX Yosemite 10.10版和最新版本的SDL(2.0.3)。SDL無法通過2.1 Mac OSX加載OpenGL上下文優勝美地

我想使用至少OpenGL版本3+。沒有做任何事情,我的OpenGL版本返回2.1 INTEL-10.0.86

OpenGL命令可以工作,但這顯然不是我需要的版本。

因此,在做了一些研究之後,我發現用SDL更改版本的方法是在初始化SDL之後但在定義上下文之前通過SDL_GL_SetAttribute(SDL_GLattr attr, int value)函數。因此,這裏是我的代碼:

if (SDL_Init(SDL_INIT_EVERYTHING) < 0) 
{ 
    printf("Failed to initialize SDL. Error (SDL): %s.\n", SDL_GetError()); 
    return false; 
} 

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help 

window = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, (SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN)); 

if (!window) 
{ 
    printf("Failed to create the window. Error (SDL): %s.\n", SDL_GetError()); 
    return false; 
} 

context = SDL_GL_CreateContext(window); 

使用此代碼,OpenGL的版本報告4.1 INTEL-10.0.86。這樣可以很好地工作,但是我的OpenGL調用都不再工作,所以我在調用函數後檢查了OpenGL錯誤,並返回1282

奇怪的是,當我更改代碼以這種

... 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
//SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help 
... 

它給出了相同的輸出4.1 INTEL-10.0.86,並返回OpenGL函數相同的工作的OpenGL錯誤(1282),沒有。

而且我的最後一次嘗試失敗了,結果不同。這裏是我的代碼:

... 
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help 
... 

返回的新的OpenGL版本是null但如果我改變major_version爲2,minor_version 1返回到我原來的版本2.1 INTEL-10.0.86

有沒有人知道這個問題的解決方案?

- 編輯 -

做一些額外的研究後,如果以後每調用上下文不正確初始化的OpenGL返回1282。這使我相信這可能是SDL沒有正確創建上下文的錯誤? (我真的不知道那麼多,所以我正在肢體上)。我會向SDL提交一個錯誤,看看是否有幫助。

+1

您確定您的硬件和驅動程序支持版本3嗎? 「英特爾」讓我懷疑他們沒有。 – molbdnilo 2014-10-17 08:57:29

+0

@molbdnilo使用https://developer.apple.com/opengl/capabilities/,它表示它支持4.1。我正在使用HD Graphics 4000。此外,在這裏http://support.apple.com/kb/HT5942搜索英特爾高清顯卡4000。 – TrevorPeyton 2014-10-17 16:15:19

+0

此外,評論將有助於投票,以瞭解如何改善我的問題或錯誤。 – TrevorPeyton 2014-10-17 16:21:43

回答

3

SDL_GL_CONTEXT_PROFILE_CORE

...

...沒有我的OpenGL調用[glMatrixMode,glLoadIdentity,glLoadIdentity,在glBegin]工作了......

這些都不推薦使用,並且不能在Core上下文中使用。

如果要繼續使用Core上下文,則必須重新編寫程序以不使用已棄用的功能。

+0

我不知道那些已被棄用。我會嘗試一些OpenGL 4命令。 – TrevorPeyton 2014-10-17 22:31:47

+0

我不敢相信那很簡單。即使這是一個愚蠢的錯誤,但你不知道我經歷過的困難。謝謝你! :) – TrevorPeyton 2014-10-17 23:14:54

+0

@TrevorPeyton:沒問題!下次雖然確保發佈[SSCCE](http://sscce.org/),那麼核心上下文/傳統GL命令斷開連接將立即可識別。 – genpfault 2014-10-18 00:49:09