2016-09-14 80 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上下文。如果你需要这些数字,你必须手动解析字符串。