2016-09-14 5 views
0

GLFWが指定されたバージョンのOpenGLでウィンドウを作成できなかったことを発見したときに、新しいコンピュータでOpenGLアプリケーションをトラブルシューティングしていました。作成したOpenGLのバージョンをテストするための最小限のバージョンのアプリケーションを作成しました。どのバージョンのヒントであっても、取得できるバージョンは0.0です。私は単にOpenGLを持っていないのですか? glxgearsが動いてglxinfoがバージョン2.1を持っていることを示唆しているので、これは不可能なようです。なぜOpenGLバージョン0.0ですか?

#include <iostream> 
#include <GLFW/glfw3.h> 

int main(int argc, const char *argv[]) { 
    if(!glfwInit()) { 
     return 1; 
    } 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); 
    auto win = glfwCreateWindow(640, 480, "", NULL, NULL); 
    if(!win) { 
     return 1; 
    } 
    int major = 0, minor = 0; 
    glfwMakeContextCurrent(win); 
    glGetIntegerv(GL_MAJOR_VERSION, &major); 
    glGetIntegerv(GL_MINOR_VERSION, &minor); 
    std::cout << "Initialized with OpenGL " 
     << major << "." << minor << std::endl; 
    glfwDestroyWindow(win); 
    glfwTerminate(); 
} 

"OpenGL 0.0で初期化"されています。ウィンドウが短時間開閉し、アプリケーションはエラーなしで終了します。

+0

AFAIKの報告値は、最終的にはあなたの運転手に依存します。どのOSとドライバのバージョンを使用していますか? –

+0

私はLinux 4.4.0-36、Ubuntuを使用していますが、ドライバについてはわかりません。しかし、私のベンダーはIntel Open Source Technology Centerで、レンダラーはIronlake MobileのMesa DRIです。 –

答えて

4

GL_MAJOR_VERSIONおよびGL_MINOR_VERSIONクエリはGL 3.0で導入されました。それ以前には、glGetIntegervコール中にGL_INVALID_ENUMエラーが発生し、変数は変更されません。

> = 3.0のコンテキストになっていることを確認できない場合は、glGetString(GL_VERSION)を使用して確実にバージョン番号を取得する必要があります。それらを数値として必要とする場合は、手動で文字列を解析する必要があります。

関連する問題