<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Development Notes</title> <link rel="stylesheet" type="text/css" href="mesa.css"> </head> <body> <div class="header"> The Mesa 3D Graphics Library </div> <iframe src="contents.html"></iframe> <div class="content"> <h1>Development Notes</h1> <ul> <li><a href="#extensions">Adding Extensions</a> </ul> <h2 id="extensions">Adding Extensions</h2> <p> To add a new GL extension to Mesa you have to do at least the following. </p> <ul> <li> If <code>glext.h</code> doesn't define the extension, edit <code>include/GL/gl.h</code> and add code like this: <pre> #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 </pre> </li> <li> In the <code>src/mapi/glapi/gen/</code> directory, add the new extension functions and enums to the <code>gl_API.xml</code> file. Then, a bunch of source files must be regenerated by executing the corresponding Python scripts. </li> <li> Add a new entry to the <code>gl_extensions</code> struct in <code>mtypes.h</code> if the extension requires driver capabilities not already exposed by another extension. </li> <li> Add a new entry to the <code>src/mesa/main/extensions_table.h</code> file. </li> <li> 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. </li> <li> If the new extension adds new GL state, the functions in <code>get.c</code>, <code>enable.c</code> and <code>attrib.c</code> will most likely require new code. </li> <li> To determine if the new extension is active in the current context, use the auto-generated <code>_mesa_has_##name_str()</code> function defined in <code>src/mesa/main/extensions.h</code>. </li> <li> The dispatch tests <code>check_table.cpp</code> and <code>dispatch_sanity.cpp</code> should be updated with details about the new extensions functions. These tests are run using <code>meson test</code>. </li> </ul> </div> </body> </html>