36

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:

#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)); } 

...then the result is null. Why doesn't this code get the GL_VERSION?

2

2 Answers 2

53

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

glutCreateWindow() creates an OpenGL context and leaves it current:

Each created window has a unique associated OpenGL context. State changes to a window's associated OpenGL context can be done immediately after the window is created.

...so call that before attempting glewInit():

#include <GL/glew.h> #include <GL/glut.h> #include <cstdio> int main(int argc, char **argv) { glutInit(&argc, argv); glutCreateWindow("GLUT"); glewInit(); printf("GL_VERSION: %s\n", glGetString(GL_VERSION)); } 
Sign up to request clarification or add additional context in comments.

Comments

2

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

Include these 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)); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.