Skip to content

About

Simple OpenGL core profile loading, customized for Dear ImGui

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

151 Commits

Folders and files

Repository files navigation

gl3w: Simple OpenGL core profile loading

Introduction

This is a modified gl3w generator, used to create a minimal amalgamated OpenGL loader header file. It is specifically created for use within Dear ImGui project.

gl3w is the easiest way to get your hands on the functionality offered by the OpenGL core profile specification.

Its main part is a simple gl3w_gen.py Python script that downloads the Khronos supported glcorearb.h header and generates gl3w.h and gl3w.c from it. Those files can then be added and linked (statically or dynamically) into your project.

Requirements

gl3w_gen.py requires Python version 2.7 or newer. It is also compatible with Python 3.x.

Example

Header is generated by executing gl3w_gen.py --imgui-dir /path/to/dear/imgui. Specifying --imgui-dir is optional, however if specified, generator will scan Dear ImGui project for used OpenGL symbols and avoid including anything that is not used. It will also output generated header to backends/imgui_impl_opengl3_loader.h. Not specifying said parameter will generate resulting header in include/GL/imgui_impl_opengl3_loader.h including all available OpenGL APIs.

Here is a simple example of using gl3w with glut. Note that GL/gl3w.h must be included before any other OpenGL related headers:

#include <stdio.h>
#include <GL/gl3w.h>
#include <GL/glut.h>

// ...

int main(int argc, char **argv)
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
        glutInitWindowSize(width, height);
        glutCreateWindow("cookie");

        glutReshapeFunc(reshape);
        glutDisplayFunc(display);
        glutKeyboardFunc(keyboard);
        glutSpecialFunc(special);
        glutMouseFunc(mouse);
        glutMotionFunc(motion);

        if (imgl3wInit()) {
                fprintf(stderr, "failed to initialize OpenGL\n");
                return -1;
        }
        if (!imgl3wIsSupported(3, 2)) {
                fprintf(stderr, "OpenGL 3.2 not supported\n");
                return -1;
        }
        printf("OpenGL %s, GLSL %s\n", glGetString(GL_VERSION),
               glGetString(GL_SHADING_LANGUAGE_VERSION));

        // ...

        glutMainLoop();
        return 0;
}

API Reference

The gl3w API consists of just three functions:

int imgl3wInit(void)

Initializes the library. Should be called once after an OpenGL context has been created. Returns 0 when gl3w was initialized successfully, non-zero if there was an error.

int imgl3wIsSupported(int major, int minor)

Returns 1 when OpenGL core profile version major.minor is available and 0 otherwise.

GL3WglProc imgl3wGetProcAddress(const char *proc)

Returns the address of an OpenGL extension function. Generally, you won't need to use it since gl3w loads all functions defined in the OpenGL core profile on initialization. It allows you to load OpenGL extensions outside of the core profile.

Options

The generator script optionally takes the arguments:

--ext to include the GL Extensions in output header.

--root=outputdir to set the location for the output to something else than current working directory.

License

public-domain-mark.png

gl3w is in the public domain. See the file UNLICENSE for more information.

Credits

Slavomir Kaslev <slavomir.kaslev@gmail.com>
Initial implementation
Kelvin McDowell
Mac OS X support
Sjors Gielen
Mac OS X support
Travis Gesslein
Patches regarding glcorearb.h
Arthur Tombs
Port to Python 3
Daniel Cousens [https://github.com/dcousens]
Code contributions

Copyright

OpenGL is a registered trademark of SGI.

About

Simple OpenGL core profile loading, customized for Dear ImGui

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages