2014-12-20 82 views
2

试图创建一个的OpenGL 4.1上下文与Freeglut我发现了一些不一致的地方:FreeGlut OpenGL上下文版

我使用的是AMD显卡采用了最新的驱动程序。在AMD官方网站,它说

的OpenGL 4.2的支持

当我正常运行我的应用程序(见下文源代码)(控制台窗口和过剩贵的consits),我得到下面的输出中控制台: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(); 
+0

我使用的是Freeglut和glew的32位版本,版本: glew-1.11.0; freeglut-2.8.1 – ProgrammingMachine5000

回答

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”作为输出。

+0

这并不奇怪,因为GLEW需要有效的工作和活动的OpenGL上下文才能工作。然而,OpenGL上下文是通过调用glutCreateWindow创建的,因此仅在此之后才可用。坦率地说,如果你真的读过FreeGLUT的精细手册(RTFM)(或者仅仅是GLUT),那么你已经知道了。 – datenwolf