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, editinclude/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 thegl_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 inmtypes.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
andattrib.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 insrc/mesa/main/extensions.h
. -
The dispatch tests
check_table.cpp
anddispatch_sanity.cpp
should be updated with details about the new extensions functions. These tests are run usingmeson test
.