FreeGlut OpenGL 上下文版本

FreeGlut OpenGL Context Version

本文关键字:版本 上下文 OpenGL FreeGlut      更新时间:2023-10-16

在尝试使用 Freeglut 创建 OpenGL 4.1 上下文时,我发现了一些不一致之处:

我使用的是带有最新驱动程序的 AMD 显卡。在AMD网站上,它说

支持 OpenGL 4.2

当我通常运行我的应用程序(由控制台窗口和 glut-gui 组成((请参阅下面的源代码(时,我在控制台中得到以下输出:freeglut (C:Users(Username)DocumentsVisual Studio 2012ProjectsTestsOGLTestDebugOGLTest.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.1nDetails:"<<std::endl;
    }
}
glutInit(&__argc,__argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitContextVersion(4,1);
glutInitWindowSize(500,500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Test");
glutDisplayFunc(display);
glutMainLoop();

我自己修复了它:只有我的代码顺序是错误的。实际选择加入OpenGL 4(或在此特殊情况下为4.1(发生在调用glutCreateWindow("Window Title")之后,令人惊讶的是不是在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.1nDetails:"<<std::endl;
    }
}

glutCreateWindow("OpenGL Test");背后使整个事情工作并创建"驱动程序支持 OpenGL 4.1"作为输出。