【问题标题】:Load specific OpenGL version with SDL + GLEW使用 SDL + GLEW 加载特定的 OpenGL 版本
【发布时间】:2014-09-27 11:38:56
【问题描述】:

我正在尝试加载特定的 OpenGL 版本函数,但无论我在创建 GL 上下文之前指定什么,似乎 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。

【问题讨论】:

    标签: c++ opengl sdl glew


    【解决方案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 版本的兼容性配置文件并不少见。

    【讨论】:

    • 我不知道。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多