【问题标题】:OpenGL with SDL2 doesn't return the right version带有 SDL2 的 OpenGL 不返回正确的版本
【发布时间】:2014-08-10 12:48:03
【问题描述】:

我有一个 SDL2 应用程序,我想在其中创建一个 OpenGL 3.2 上下文。我搜索了一下并开始学习本教程: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.1.0 版本向我建议你在 Windows 上运行它,并且不知何故得到了微软的 opengl 渲染器,而不是 AMD 的渲染器。
  • 我运行的是 Windows 8.1,我从 HP 支持网站为我的笔记本电脑下载了 AMD 驱动程序。我在一分钟前尝试了一个名为 OpenGl Extension Viewer 的程序,几天前我正在运行 1.1.0,所以它可能不是代码
  • 不确定这是否有帮助,但当您选择第 1 步:笔记本显卡、第 2 步:Mobility FirePro 系列时,请检查您的卡/笔记本电脑是否列出here,它可能是较新的驱动程序(您在安装此驱动程序之前可能应该完全卸载以前的驱动程序)。也就是说,即使驱动程序已经过时,只给你古老的 OpenGL 1.1 而不是至少像 1.5/2.x 这样的东西仍然很奇怪......这可能表明 Windows 实际上并没有使用它并且你正在运行在某种默认的后备驱动程序上。
  • 也许您的笔记本电脑使用集成显卡来执行您的程序(例如 Intel)。而且这个集成显卡只支持1.1版本。
  • 它没有被列出。我必须去惠普网站下载驱动程序。 Unick:那么我如何才能让我的硬件能够通过我的 Visual Studio 构建的应用程序使用?

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多