devinfo.html revision 68155873bd10b0ee6ab7fed31c4542297a819790
1<HTML> 2 3<TITLE>Development Notes</TITLE> 4 5<BODY text="#000000" bgcolor="#55bbff" link="#111188"> 6 7<H1>Development Notes</H1> 8 9 10<H2>Adding Extentions</H2> 11 12<p> 13To add a new GL extension to Mesa you have to do the following. 14<pre> 15 If glext.h doesn't define the extension, edit include/GL/gl.h and add: 16 - new enum tokens 17 - new API function entry points 18 - #define GL_EXT_the_extension_name 1 19 20 If adding a new API function (call it glNewFunctionEXT): 21 - insert glNewFunctionEXT()into src/apiext.h 22 - edit src/types.h and add NewFunction to the gl_api_table struct 23 - implement gl_NewFunction() in the appropriate src file 24 - hook gl_NewFunction() into pointers.c 25 - add display list support in dlist.c for save_NewFunction() 26 - add glNewFunctionEXT to gl_GetProcAddress() in extensions.c or 27 in the device driver's GetProcAddress() function if appropriate 28</pre> 29<p> 30If adding new GL state be sure to update get.c and enable.c 31</p> 32<p> 33In general, look for an extension similar to the new one that's already 34implemented in Mesa and follow it by example. 35</p> 36 37 38 39<H2>Coding Style</H2> 40 41<p> 42Mesa's code style has changed over the years. Here's the latest. 43</p> 44 45<p> 46Comment your code! It's extremely important that open-source code be 47well documented. Also, strive to write clean, easily understandable code. 48</p> 49 50<p> 513-space indentation 52</p> 53 54<p> 55If you use tabs, set them to 8 columns 56</p> 57 58<p> 59Brace example: 60</p> 61<pre> 62 if (condition) { 63 foo; 64 } 65 else { 66 bar; 67 } 68</pre> 69 70<p> 71Here's the GNU indent command which will best approximate my preferred style: 72</p> 73<pre> 74 indent -br -i3 -npcs infile.c -o outfile.c 75</pre> 76 77 78<p> 79Local variable name example: localVarName (no underscores) 80</p> 81 82<p> 83Constants and macros are ALL_UPPERCASE, with _ between words 84</p> 85 86<p> 87Global vars not allowed. 88</p> 89 90<p> 91Function name examples: 92</p> 93<pre> 94 glFooBar() - a public GL entry point (in dispatch.c) 95 _mesa_FooBar() - the internal immediate mode function 96 save_FooBar() - retained mode (display list) function in dlist.c 97 foo_bar() - a static (private) function 98 _mesa_foo_bar() - an internal non-static Mesa function 99</pre> 100 101 102<H2>Writing a Device Driver</H2> 103 104<p> 105XXX to do 106</p> 107 108 109 110<H2>Making a New Mesa Release</H2> 111 112<p> 113These are the instructions for making a new Mesa release. 114</p> 115 116<p> 117Prerequisites (later versions may work): 118</p> 119<ul> 120<li> autoconf 2.50 121<li> automake 1.4-p2 122<li> libtool 1.4 123</ul> 124 125<p> 126Be sure to do a "cvs update -d ." in the Mesa directory to 127get all the latest files. 128</p> 129 130<p> 131Update the version definitions in src/version.h 132</p> 133 134<p> 135Create/edit the docs/RELNOTES-X.Y file to document what's new in the release. 136Edit the docs/VERSIONS file too. 137</p> 138 139<p> 140Edit Make-config and change the MESA_MAJOR and/or MESA_MINOR versions. 141</p> 142 143<p> 144Edit the GNU configure stuff to change versions numbers as needed: 145Update the version string (second argument) in the line 146"AM_INIT_AUTOMAKE(Mesa, 3.3)" in the configure.in file. 147</p> 148 149<p> 150Remove the leading `dnl' from the line "dnl AM_MAINTAINER_MODE". 151</p> 152 153<p> 154Verify the version numbers near the top of configure.in 155</p> 156 157<p> 158Run "fixam -f" to disable automatic dependency tracking. 159</p> 160 161<p> 162Run the bootstrap script to generate the configure script. 163</p> 164 165<p> 166Edit Makefile.X11 and verify DIRECTORY is set correctly. The Mesa 167sources must be in that directory (or there must be a symbolic link). 168</p> 169 170<p> 171Edit Makefile.X11 and verify that LIB_NAME and DEMO_NAME are correct. 172If it's a beta release, be sure the bump up the beta release number. 173</p> 174 175<p> 176cp Makefile.X11 to Makefile so that the old-style Mesa makefiles 177still work. /configure will overwrite it if that's what the user runs. 178</p> 179 180<p> 181Make a symbolic link from $(DIRECTORY) to Mesa. For example, 182ln -s Mesa Mesa-3.3 This is needed in order to make a correct 183tar file in the next step. 184</p> 185 186<p> 187Make the distribution files. From inside the Mesa directory: 188<pre> 189 make -f Makefile.X11 lib_tar 190 make -f Makefile.X11 demo_tar 191 make -f Makefile.X11 lib_zip 192 make -f Makefile.X11 demo_zip 193</pre> 194 195<p> 196Copy the distribution files to a temporary directory, unpack them, 197compile everything, and run some demos to be sure everything works. 198</p> 199 200<p> 201Upload the *.tar.gz and *.zip files to ftp.mesa3d.org 202</p> 203 204<p> 205Update the web site. 206</p> 207 208<p> 209Make an announcement on the mailing lists: 210<em>m</em><em>e</em><em>s</em><em>a</em><em>3</em><em>d</em><em>-</em><em>d</em><em>e</em><em>v</em><em>@</em><em>l</em><em>i</em><em>s</em><em>t</em><em>s</em><em>.</em><em>s</em><em>f</em><em>.</em><em>n</em><em>e</em><em>t</em>, 211<em>m</em><em>e</em><em>s</em><em>a</em><em>3</em><em>d</em><em>-</em><em>u</em><em>s</em><em>e</em><em>r</em><em>s</em><em>@</em><em>l</em><em>i</em><em>s</em><em>t</em><em>s</em><em>.</em><em>s</em><em>f</em><em>.</em><em>n</em><em>e</em><em>t</em> 212and 213<em>m</em><em>e</em><em>s</em><em>a</em><em>3</em><em>d</em><em>-</em><em>a</em><em>n</em><em>n</em><em>o</em><em>u</em><em>n</em><em>c</em><em>e</em><em>@</em><em>l</em><em>i</em><em>s</em><em>t</em><em>s</em><em>.</em><em>s</em><em>f</em><em>.</em><em>n</em><em>e</em><em>t</em> 214</p> 215 216 217<H2>Autoconf info</H2> 218 219<p> 220In order to run the bootstrap script you'll need: 221<p> 222<pre> 223autoconf 2.50 224automake 1.4-p5 225libtool 1.4 226</pre> 227 228 229</body> 230</html> 231