2014-09-27 74 views
0

我想加載特定的OpenGL版本函數,但似乎GLEW加載所有函數,無論我在創建GL上下文之前指定。加載特定的OpenGL版本與SDL + GLEW

我知道它沒有加載我想要的指定版本的原因是因爲它將函數指針返回到在更高版本的OpenGL中可用的函數。

glBlendFunci僅在> = 4.0中可用,而我想要的是2.1版本的OpenGL,但glBlendFunci無論如何都會被加載。

這是我想做什麼:

int main(int argc, char** args) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 

    window = SDL_CreateWindow("Game", 
     SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 
     width, height, 
     SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL); 

    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); 
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); 
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 

    SDL_GLContext glContext = SDL_GL_CreateContext(window); 


    glewInit(); 

    std::cout << glBlendFunci << std::endl; 

    //Initialize(); 

    SDL_GL_DeleteContext(glContext); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 

    return 0; 
} 

附:這只是一些原型代碼,我只是在討論OpenGL。

回答

1

你所觀察到的行爲以及規格之內(見WGL_ARB_create_contextGLX_ARB_create_context):

如果版本低於或等於3.0的要求, 返回的情況下可以實現以下任何版本的:

  • 任何版本不低於要求,不得大於3.0。
  • 版本3.1,如果GL_ARB_compatibility擴展也是 實施。
  • 版本3.2或更高版本的兼容性配置文件。

你得到的是它支持GL 2.1完全上下文,所以GL 2.1編寫任何代碼應該運行 - 但你可能會得到比這樣更多 - 最高GL版本的供應商支持相容性分佈並不少見。

+0

我不知道。謝謝 – Mirko 2014-09-28 11:28:09