【发布时间】: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 构建的应用程序使用?