OpenGL版本不等于支持的着色器版本

时间:2017-05-14 19:54:36

标签: c++ opengl sdl-2 glew

最近我用OpenGL和LWJGL 2(Java)创建了自己的游戏。之后我想提高我的编程技巧,并开始学习如何在C ++中使用OpenGL。

使用LWJGL我可以使用#version 330但是使用C ++和SDL2我只能使用#version 110,但glGetString(GL_VERSION)会返回3.0 Mesa 12.0.6

我像这样初始化我的窗口:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);

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);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);


m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);
m_glContext = SDL_GL_CreateContext(m_window);


GLenum status = glewInit();

if(status != GLEW_OK){
    std::cerr << "Glew failed!" << std::endl;
}

我的问题在哪里?

1 个答案:

答案 0 :(得分:0)

您需要申请OpenGL核心资料。

默认情况下,您将获得OpenGL兼容性配置文件。使用兼容性配置文件,如果在Mesa上运行,则将限制为3.0版;如果在macOS上运行,则限制为2.1。使用核心配置文件,您将能够访问更新的版本。

如果您在Linux或Windows上使用AMD或nVidia的驱动程序,则无需执行此操作。

在SDL中,您可以在创建窗口之前添加此行来请求核心文件:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);