使用SDL + GLEW加载特定的OpenGL版本

时间:2014-09-27 11:38:56

标签: c++ opengl sdl glew

我正在尝试加载特定的OpenGL版本函数,但似乎GLEW加载了所有函数,无论我在创建GL上下文之前指定了什么。

我知道它没有加载我想要的指定版本的原因是因为它返回了函数指针,指向了更高版本的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;
}

P.S。这只是一些原型代码,我只是搞乱了OpenGL。

1 个答案:

答案 0 :(得分:1)

您观察到的行为完全符合规范(请参阅WGL_ARB_create_contextGLX_ARB_create_context):

  

如果请求的版本小于或等于3.0,则为上下文   return可以实现以下任何版本:

     
      
  • 任何不低于要求且不超过3.0的版本。
  •   
  • 版本3.1,如果GL_ARB_compatibility扩展名也是   实现。
  •   
  • 版本3.2或更高版本的兼容性配置文件。
  •   

您得到的是完全支持GL 2.1的上下文,因此为GL 2.1编写的任何代码都应该运行 - 但您可能会获得更多 - 您的供应商支持的最高GL版本的兼容性配置文件并不罕见。< / p>