2014-01-19 83 views
0

我一直在嘗試使用OpenGL 4,第一個障礙實際上是加載GL4,而不是使用MS Windows自帶的令人厭惡的僅軟件GL 1.1。我嘗試了使用GLEW,然後再次更新我的驅動程序,並且GL仍然繼續將版本號設爲1.1.0。事實證明,這對於GLEW來說並不是問題(它似乎也不需要GLEW),也不是SDL在內部破壞某些東西(我認爲這是我用來創建上下文的東西)。 Andon M. Coleman提出了像素格式的問題,這是我一開始就完全忽略的問題。事實證明,我一直在使用紅色,綠色,藍色和阿爾法每個8位,再加上32位深度。我認爲這是一個很好的64位,其中32個是顏色,32個是距離。但是,由於SDL假定您也需要模板緩衝區(我現在認識到它實際上是需要的),實際上它使像素格式爲72位,這對於加速上下文來說是不允許的,因爲GPU通常最多處理64位。所以,Windows缺乏驅動程序的情況下,Windows提供的古老的GL 1.1支持是默認的,也使其僅用於軟件。OpenGL版本卡在1.1軟件

該代碼中有很多其他的東西,所以我已經把我正在嘗試做的一個基本示例放在一起。它是有效的C++並在MinGW上編譯,假設你正確鏈接它。

#include <gl\gl.h> 
#include <SDL2\SDL.h> 
#include <stdio.h> 
#define SDL_main main 
int main() 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE,8); 
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,8); 
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,8); 
    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,8); 

    /// What I *was* doing... 
    /* SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,32); */ 
    // And then I didn't even set SDL_STENCIL_SIZE at all. 
    // Results in the entire size for each pixel being more than 64. 

    /// What I *am* doing... 
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24); 
    SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8); 
    // Nice even 32 bits for this and 32 bits for the color is 64. 

    SDL_Window* window = SDL_CreateWindow(
     "Hay GPU y is u no taek pixelz ovar 64 bitz?", 
     SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED, 
     1024,768, 
     SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL 
    ); 
    SDL_GLContext context = SDL_GL_CreateContext(window); 
    printf("GL Version [%s]\n",glGetString(GL_VERSION)); 
    SDL_DestroyWindow(window); 
    SDL_GL_DeleteContext(context); 
    SDL_Quit(); 
    return 0; 
}; 

誰一直有一個類似的問題希望其他人可以從我的錯誤中學習,或者至少能夠把它劃掉的可能出現的問題的列表。

+0

也就是說,即使不*** ***接近到什麼是相關的。如果您獲得了OpenGL 1.1上下文,那麼在設置像素格式時使用的參數非常重要(如果選擇硬件不支持的參數,則會得到參考GDI實現),並且從您的問題中缺失。 –

+0

那麼,我應該尋找什麼可能導致這種情況呢? – rsethc

+0

您在創建渲染上下文時告訴SDL使用的參數,正如我在評論中提到的。如果你將這些信息包含在問題中,而不是斷定它是無關緊要的,並將代碼降低到現在的水平,那將會有很大的幫助。 –

回答

0

From SDL docs

SDL_GL_CONTEXT_PROFILE_MASK確定上下文的創建的類型, 同時兼具SDL_GL_CONTEXT_MAJOR_VERSION和 SDL_GL_CONTEXT_MINOR_VERSION確定哪個版本。所有三個 屬性必須在創建第一個窗口之前設置,而在 一般情況下,您無法先更改SDL_GL_CONTEXT_PROFILE_MASK 的值,而是首先銷燬使用先前的 設置創建的所有窗口。

嘗試設置SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_MAJOR_VERSION和SDL_GL_CONTEXT_MINOR_VERSION正確的價值觀,這可能會解決這個問題(如果您的驅動實際上支持OpenGL 4.x的上下文)

+0

我從來沒有去調整這些,似乎默認值就好。無論如何,我早先遇到的問題已經解決了。 – rsethc