Development Notes — The Mesa 3D Graphics Library latest documentation

# Development Notes

## Adding Extensions

To add a new GL extension to Mesa you have to do at least the following.

- If `glext.h` doesn’t define the extension, edit `include/GL/gl.h` and add code like this:

      #ifndef GL_EXT_the_extension_name
      #define GL_EXT_the_extension_name 1
      /* declare the new enum tokens */
      /* prototype the new functions */
      /* TYPEDEFS for the new functions */
      #endif

- In the `src/mapi/glapi/gen/` directory, add the new extension functions and enums to the `gl_API.xml` file. Then, a bunch of source files must be regenerated by executing the corresponding Python scripts.

- Add a new entry to the `gl_extensions` struct in `consts_exts.h` if the extension requires driver capabilities not already exposed by another extension.

- Add a new entry to the `src/mesa/main/extensions_table.h` file.

- From this point, the best way to proceed is to find another extension, similar to the new one, that’s already implemented in Mesa and use it as an example.

- If the new extension adds new GL state, the functions in `get.c`, `enable.c` and `attrib.c` will most likely require new code.

- To determine if the new extension is active in the current context, use the auto-generated `_mesa_has_##name_str()` function defined in `src/mesa/main/extensions.h`.

- The dispatch tests `check_table.cpp` and `dispatch_sanity.cpp` should be updated with details about the new extensions functions. These tests are run using `meson test`.