带有 SDL2 的 OpenGL 未返回正确的版本

OpenGL with SDL2 doesn't return the right version

本文关键字:返回 版本 SDL2 OpenGL 带有      更新时间:2023-10-16

我有一个SDL2应用程序,我想在其中创建一个OpenGL 3.2上下文。我在谷歌上搜索了一下,并开始遵循这个教程:http://open.gl/context#SDL

除了最后一步,一切似乎都很顺利。当我必须实现这段代码时:

GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
printf("%un", 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: %sn", SDL_GetError() );
}
//Initialize GLEW
glewExperimental = GL_TRUE; 
GLenum glewError = glewInit();
if( glewError != GLEW_OK )
{
    printf( "Error initializing GLEW! %sn", glewGetErrorString( glewError ) );
}
printf((char*)glGetString(GL_VERSION));

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

为了使glGetString()工作,我必须做的一件事是包含GLfreeglut.h。我真的不知道为什么,因为我遵循的教程中没有这么说。

我找到问题了。我忘了说我正在使用MSTSC从我的台式机远程到我的笔记本电脑(这更容易工作),显然这改变了图形设备。

我试着从实际的笔记本电脑上打开我的应用程序,突然它工作了,提供正确的OpenGL版本和一切。

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