带有SDL2的OpenGL无法返回正确的版本

时间:2014-08-10 12:48:04

标签: c++ opengl sdl glew sdl-2

我有一个SDL2应用程序,我想在其中创建一个OpenGL 3.2上下文。我google了一下,开始学习本教程:http://open.gl/context#SDL

除了最后一步,一切似乎都有效。当我不得不实现这段代码时:

GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);

printf("%u\n", vertexBuffer);

我的应用程序似乎没有引用应该存在的仿函数。我知道这里有一些人有同样的问题,但我在那里找不到解决办法。当我输出GL_VERSION时它表示它的1.1.0虽然我说它应该是3.2.0。这是我的代码:

// START SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
    logSDLError(std::cout, "SDL_Init");
    return 1;
}

// SETUP OPENGL SETTINGS
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

// OPENING WINDOW
m_pWindow = SDL_CreateWindow("SDL/OpenGL Game Client - With Networking Library", 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL);
if (m_pWindow == nullptr)
{
    logSDLError(std::cout, "CreateWindow");
    return 2;
}

// CREATE AN OPENGL CONTEXT ASSOCIATED WITH THE WINDOW.
m_GlContext = SDL_GL_CreateContext(m_pWindow);
if( m_GlContext == NULL )
{
    printf( "OpenGL context could not be created! SDL Error: %s\n", SDL_GetError() );
}

//Initialize GLEW
glewExperimental = GL_TRUE; 
GLenum glewError = glewInit();
if( glewError != GLEW_OK )
{
    printf( "Error initializing GLEW! %s\n", glewGetErrorString( glewError ) );
}

printf((char*)glGetString(GL_VERSION));

我有一台能够运行OpenGL 4.0的FirePro显卡。我检查了我的驱动程序更新,一切都很好+我没有收到编译警告,说OpenGL或Glew或SDL可能有问题。

使glGetString()工作的一件事就是包含GL \ freeglut.h。我不知道为什么会这样,因为我在后面的教程中并没有这么说。

1 个答案:

答案 0 :(得分:1)

我发现了问题。我忘了提到我使用MSTSC远程从我的桌面到我的笔记本电脑(这更容易工作),显然这会改变图形设备。

我尝试从实际的笔记本电脑打开我的应用程序,然后它突然发挥作用,提供了正确的OpenGL版本和所有内容。

愚蠢的错误,我应该早点发现它。