John P
John P

Reputation: 1581

Why is OpenGL version 0.0?

I was troubleshooting an OpenGL application on a new computer when I discovered that GLFW could not create a window with the specified version of OpenGL. I created a minimal version of the application to test the version of OpenGL created, and no matter what version I hint, the version I get is 0.0. Do I simply not have OpenGL? This seems impossible, since glxgears runs and glxinfo suggests that I have version 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();
}

The output of the application is "Initialized with OpenGL 0.0". A window briefly opens and closes and the application terminates without errors.

Upvotes: 0

Views: 1255

Answers (1)

derhass
derhass

Reputation: 45342

The GL_MAJOR_VERSION and GL_MINOR_VERSION queries were introduced in GL 3.0. Prior to that, this will just generate an GL_INVALID_ENUM error during the glGetIntegerv call, and leave your variables untouched.

You have to use glGetString(GL_VERSION) to reliably get the verison number if you can't make sure that you are on a >= 3.0 context. If you need those as numbers, you'll have to manually parse the string.

Upvotes: 4

Related Questions