C++ 为什么OpenGL版本是0.0?

C++ 为什么OpenGL版本是0.0?,c++,opengl,C++,Opengl,当我发现GLFW无法使用指定版本的OpenGL创建窗口时,我正在对新计算机上的OpenGL应用程序进行故障排除。我创建了应用程序的最低版本来测试OpenGL创建的版本,无论我提示哪个版本,我得到的版本都是0.0。我难道没有OpenGL吗?这似乎是不可能的,因为glxgears正在运行,glxinfo建议我使用2.1版 #include <iostream> #include <GLFW/glfw3.h> int main(int argc, const char *ar

当我发现GLFW无法使用指定版本的OpenGL创建窗口时,我正在对新计算机上的OpenGL应用程序进行故障排除。我创建了应用程序的最低版本来测试OpenGL创建的版本,无论我提示哪个版本,我得到的版本都是0.0。我难道没有OpenGL吗?这似乎是不可能的,因为glxgears正在运行,glxinfo建议我使用2.1版

#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();
}
#包括
#包括
int main(int argc,const char*argv[]{
如果(!glfwInit()){
返回1;
}
glfwWindowHint(GLFW_上下文_版本_专业,2);
glfwWindowHint(GLFW_上下文_版本_小调,1);
自动赢=glfwCreateWindow(640480,“,空,空);
如果(!赢){
返回1;
}
int主要=0,次要=0;
glfwMakeContextCurrent(win);
GLGEINTEGERV(德国劳埃德船级社主要版本和主要版本);
GLGEINTEGERV(GL_次要版本和次要版本);

std::coutGL3.0中引入了
GL_MAJOR_VERSION
GL_MINOR_VERSION
查询。在此之前,这只会在
glgetinteserv
调用期间生成一个
GL_INVALID_ENUM
错误,并保持变量不变


您必须使用
glGetString(GL\u版本)
如果您无法确保自己处于>=3.0的上下文中,则可以可靠地获取verison数字。如果您需要这些数字,则必须手动解析字符串。

GL 3.0中引入了
GL_主要版本
GL_次要版本
查询。在此之前,这只会生成一个
GL_无效枚举
调用
glGetIntegerv
时出错,保持变量不变


您必须使用
glGetString(GL\u版本)
如果您无法确保自己处于>=3.0的上下文中,则需要可靠地获取verison数字。如果您需要这些数字,则必须手动解析字符串。

AFAIK报告的值最终取决于您的驱动程序。您使用的是什么操作系统和驱动程序版本?我使用的是Linux 4.4.0-36、Ubuntu,我不确定驱动程序。但是我的供应商是Intel开源技术中心,我的渲染器是Intel开源技术中心,Ironlake Mobile。AFAIK报告的值最终取决于您的驱动程序。您使用的是什么操作系统和驱动程序版本?我使用的是Linux 4.4.0-36,Ubuntu,我不确定驱动程序。但是,我的供应商是Intel开源技术中心,我的渲染器是Mesa DRI,Ironlake Mobile。