FreeGlut OpenGL 上下文版本
Posted
技术标签:
【中文标题】FreeGlut OpenGL 上下文版本【英文标题】:FreeGlut OpenGL Context Version 【发布时间】:2014-12-20 05:40:49 【问题描述】:在尝试使用 Freeglut 创建 OpenGL 4.1 上下文时,我发现了一些不一致之处:
我正在使用带有最新驱动程序的 AMD 显卡。在 AMD 网站上它说
OpenGL 4.2 支持
当我正常运行我的应用程序(由控制台窗口和 glut-gui 组成)(参见下面的源代码)时,我在控制台中得到以下输出:freeglut (C:\Users\(Username)\Documents\Visual Studio 2012\Projects\Tests\OGLTest\Debug\OGLTest.exe): OpenGL >2.1 context requested but wglCreateContextAttribsARB is not available! Falling back to legacy context creation
。
我假设使用了我的内部图形芯片并将我的计算机设置为将 AMD 卡用于我的程序。之后,上面的错误消失了,但 glew 创建的另一个控制台输出仍然显示Error: Missing GL version
。
那么为什么会这样,我可以肯定的是,选择加入 4.1 上下文是有效的吗?
来源:
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (GLEW_OK != err)
std::cerr<<"Error: "<<glewGetErrorString(err)<<std::endl;
else
if (GLEW_VERSION_4_1)
std::cout<<"Driver supports OpenGL 4.1\nDetails:"<<std::endl;
glutInit(&__argc,__argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitContextVersion(4,1);
glutInitWindowSize(500,500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Test");
glutDisplayFunc(display);
glutMainLoop();
【问题讨论】:
我使用的是 32 位版本的 freeglut 和 glew,版本:glew-1.11.0; freeglut-2.8.1 【参考方案1】:我自己修复了它:只有我的代码顺序是错误的。在调用glutCreateWindow("Window Title")
之后,实际选择加入OpenGL 4(或在这种特殊情况下为4.1)发生,令人惊讶的是,不是在glutInitContextVersion(major, minor)
之后。但是把代码:
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (GLEW_OK != err)
std::cerr<<"Error: "<<glewGetErrorString(err)<<std::endl;
else
if (GLEW_VERSION_4_1)
std::cout<<"Driver supports OpenGL 4.1\nDetails:"<<std::endl;
在glutCreateWindow("OpenGL Test");
后面使整个工作正常并创建“驱动程序支持 OpenGL 4.1”作为输出。
【讨论】:
这一点也不奇怪,因为 GLEW 需要一个有效且活跃的 OpenGL 上下文才能工作。然而,OpenGL 上下文是通过调用 glutCreateWindow 创建的,因此只有在那之后才可用。坦率地说,如果你真的阅读过 FreeGLUT(或者只是 GLUT)的精美手册 (RTFM),你就会知道这一点。以上是关于FreeGlut OpenGL 上下文版本的主要内容,如果未能解决你的问题,请参考以下文章
freeglut窗口初始化+ glew 3.0上下文创建不起作用[关闭]
OPENGL中gladglewglfwFreeglut的区别
在 OS X 上的 OpenGL 上下文之间共享数据(不同的版本/配置文件)