最近我用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;
}
我的问题在哪里?
答案 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);