devinfo.html revision 0b27aceae2464db3dd149cf4fd667e353a655c5e
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 strings in src/get.c and src/X/fakeglx.c to return 132the new Mesa version number. 133</p> 134 135<p> 136Create/edit the docs/RELNOTES-X-Y file to document what's new in the release. 137Edit the docs/VERSIONS file too. 138Update the docs/IAFA-PACKAGE file. 139</p> 140 141<p> 142Edit Make-config and change the MESA_MAJOR and/or MESA_MINOR versions. 143</p> 144 145<p> 146Edit the GNU configure stuff to change versions numbers as needed: 147Update the version string (second argument) in the line 148"AM_INIT_AUTOMAKE(Mesa, 3.3)" in the configure.in file. 149</p> 150 151<p> 152Remove the leading `dnl' from the line "dnl AM_MAINTAINER_MODE". 153</p> 154 155<p> 156Verify the version numbers near the top of configure.in 157</p> 158 159<p> 160Run "fixam -f" to disable automatic dependency tracking. 161</p> 162 163<p> 164Run the bootstrap script to generate the configure script. 165</p> 166 167<p> 168Edit Makefile.X11 and verify DIRECTORY is set correctly. The Mesa 169sources must be in that directory (or there must be a symbolic link). 170</p> 171 172<p> 173Edit Makefile.X11 and verify that LIB_NAME and DEMO_NAME are correct. 174If it's a beta release, be sure the bump up the beta release number. 175</p> 176 177<p> 178cp Makefile.X11 to Makefile so that the old-style Mesa makefiles 179still work. /configure will overwrite it if that's what the user runs. 180</p> 181 182<p> 183Make a symbolic link from $(DIRECTORY) to Mesa. For example, 184ln -s Mesa Mesa-3.3 This is needed in order to make a correct 185tar file in the next step. 186</p> 187 188<p> 189Make the distribution files. From inside the Mesa directory: 190<pre> 191 make -f Makefile.X11 lib_tar 192 make -f Makefile.X11 demo_tar 193 make -f Makefile.X11 lib_zip 194 make -f Makefile.X11 demo_zip 195</pre> 196 197<p> 198Copy the distribution files to a temporary directory, unpack them, 199compile everything, and run some demos to be sure everything works. 200</p> 201 202<p> 203Upload the *.tar.gz and *.zip files to ftp.mesa3d.org 204</p> 205 206<p> 207Update the web site. CJ Beyer (cj@styx.phy.vanderbilt.edu) can 208help with this and uploading to the ftp site. 209</p> 210 211<p> 212Make the announcement to the SourceForge.net sites: mesa3d-dev@lists.sf.net, 213mesa3d-users@lists.sf.net and mesa3d-announce@lists.sf.net 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