2016-09-14 100 views
0

我故障排除在新計算機上的OpenGL應用程序時,我發現GLFW無法創建與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報告的數值是最終取決於你的驅動程序。你使用什麼操作系統和驅動程序版本? –

+0

我正在使用Linux 4.4.0-36,Ubuntu,我不確定驅動程序。然而,我的供應商是英特爾開源技術中心,我的渲染器是Mesa DRI,Ironlake Mobile。 –

回答

4

GL_MAJOR_VERSIONGL_MINOR_VERSION查詢在GL 3.0進行了介紹。在此之前,這隻會在glGetIntegerv調用期間產生一個GL_INVALID_ENUM錯誤,並且不會改變您的變量。

你必須使用glGetString(GL_VERSION)可靠地獲得verison數,如果你不能確保你是一個> = 3.0上下文。如果你需要這些數字,你必須手動解析字符串。