views:

3365

answers:

4

I've been using OpenGL extensions on Windows the painful way. Is GLEW the easier way to go? How do I get started with it?

+7  A: 

Yes, the OpenGL Extension Wrangler Library (GLEW) is a painless way to use OpenGL extensions on Windows. Here's how to get started on it:

Identify the OpenGL extension and the extension APIs you wish to use. OpenGL extensions are listed in the OpenGL Extension Registry.

Check if your graphic card supports the extensions you wish to use. Download and install the latest drivers and SDKs for your graphics card.

Recent versions of NVIDIA OpenGL SDK ship with GLEW. If you're using this, then you don't need to do some of the following steps.

Download GLEW and unzip it.

Add the GLEW bin path to your Windows PATH environment variable. Alternatively, you can also place the glew32.dll in a directory where Windows picks up its DLLs.

Add the GLEW include path to your compiler's include directory list.

Add the GLEW lib path to your compiler's library directory list.

Instruct your compiler to use glew32.lib during linking. If you're using Visual C++ compilers then one way to do this is by adding the following line to your code:

#pragma comment(lib, "glew32.lib")

Add a #include <GL/glew.h> line to your code. Ensure that this is placed above the includes of other GL header files. (You may actually not need the GL header files includes if you include glew.h.)

Initialize GLEW using glewInit() after you've initialized GLUT or GL. If it fails, then something is wrong with your setup.

if (GLEW_OK != glewInit())
{
    // GLEW failed!
    exit(1);
}

Check if the extension(s) you wish to use are now available through GLEW. You do this by checking a boolean variable named GLEW_your_extension_name which is exposed by GLEW.

Example:

if (!GLEW_EXT_framebuffer_object)
{
    exit(1);
}

That's it! You can now use the OpenGL extension calls in your code just as if they existed naturally for Windows.

Ashwin
A: 

Man, can you stop turning this site into an OpenGL tutorial?

OJ
+3  A: 

Personally I wouldn't use an exit command.

I would throw an exception so you can clear any other initialisation up at the end of the function.

ie:

try
{
    // init opengl/directx
    // init directaudio
    // init directinput

    if (GLEW_OK != glewInit())
    {
     throw std::exception("glewInit failed");
    }
}
catch ( const std::exception& ex )
{
    // message to screen using ex.what()
    // clear up
}

And I agree with OJ - if you want to write tutorials for others, then this is really the wrong place for it. There are already a load of good places for opengl tutorials. Try this one for instance.

graham.reeds
A: 

Thank you SO MUCH for this. I was spending all this time trying fruitlessly to get some extensions to work and this makes it so simple!

You have seriously saved me, thank you so much

Cassie