Why does glGetString(GL_VERSION) return null / zero instead of the OpenGL version?
Asked Answered
S

2

31

I'm on Linux Mint 13 XFCE. My problem is that when I run in terminal the command:

glxinfo | grep "OpenGL version"

I get the following output:

OpenGL version string: 3.3.0 NVIDIA 295.40

But when I run the glGetString(GL_VERSION) in my application then the result is null. Why doesn't this code get the gl_version?

#include <stdio.h>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glext.h>

int main(int argc, char **argv) {

    glutInit(&argc, argv);
    glewInit();

    printf("OpenGL version supported by this platform (%s): \n",
        glGetString(GL_VERSION));
}
Sequent answered 29/8, 2012 at 18:43 Comment(3)
Qt Creator is an IDE and has very little to do with your problem btw. (Well, nothing really)Hyaline
You don't need to include gl.h or glu.h if you include glut.hHemispheroid
Same root cause as: #6594714Gore
R
48

glutInit() doesn't create a GL context or make one current. You need a current GL context for glewInit() and glGetString() to work.

Try this:

#include <GL/glew.h>
#include <GL/glut.h>
#include <cstdio>

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutCreateWindow("GLUT");

    glewInit();
    printf("OpenGL version supported by this platform (%s): \n", glGetString(GL_VERSION));
}
Rebutter answered 29/8, 2012 at 18:48 Comment(0)
K
2

You can also use glfw in order to create GL context and then query the version:

Include this files:

#include "GL/glew.h"
#include "GLFW/glfw3.h"

And then you can do:

    // Initialise GLFW
    glewExperimental = true; // Needed for core profile
    if (!glfwInit())
    {
        return "";
    }

    // We are rendering off-screen, but a window is still needed for the context
    // creation. There are hints that this is no longer needed in GL 3.3, but that
    // windows still wants it. So just in case.
    glfwWindowHint(GLFW_VISIBLE, GL_FALSE); //dont show the window

    // Open a window and create its OpenGL context
    GLFWwindow* window;
    window = glfwCreateWindow(100, 100, "Dummy window", NULL, NULL);
    if (window == NULL) {
        return "";
    }
    glfwMakeContextCurrent(window); // Initialize GLEW
    if (glewInit() != GLEW_OK)
    {
        return "";
    }

    std::string versionString = std::string((const char*)glGetString(GL_VERSION));
Koah answered 10/3, 2019 at 10:16 Comment(1)
GL and GLFW includes should be included with <>, not "".Windcheater

© 2022 - 2024 — McMap. All rights reserved.