2014-12-20 112 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