misc updates
[mesa.git] / docs / devinfo.html
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>
13 To add a new GL extension to Mesa you have to do at least the following.
14
15 <ul>
16 <li>
17 If glext.h doesn't define the extension, edit include/GL/gl.h and add
18 code like this:
19 <pre>
20 #ifndef GL_EXT_the_extension_name
21 #define GL_EXT_the_extension_name 1
22 /* declare the new enum tokens */
23 /* prototype the new functions */
24 /* TYPEDEFS for the new functions */
25 #endif
26 </pre>
27 </li>
28 <li>
29 In the src/mesa/glapi/ directory, add the new extension functions and
30 enums to the gl_API.xml file.
31 Then, a bunch of source files must be regenerated by executing the
32 corresponding Python scripts.
33 </li>
34 <li>
35 Find an existing extension that's similar to the new one and search
36 the sources for code related to that extension.
37 Implement new code as needed.
38 In general, new state variables will be added to mtypes.h. If the
39 extension is rather large, try to implement it in a new source file.
40 </li>
41 <li>
42 If the new extension adds new GL state, the functions in get.c, enable.c
43 and attrib.c will most likely require new code.
44 </li>
45 </ul>
46
47
48
49 <H2>Coding Style</H2>
50
51 <p>
52 Mesa's code style has changed over the years. Here's the latest.
53 </p>
54
55 <p>
56 Comment your code! It's extremely important that open-source code be
57 well documented. Also, strive to write clean, easily understandable code.
58 </p>
59
60 <p>
61 3-space indentation
62 </p>
63
64 <p>
65 If you use tabs, set them to 8 columns
66 </p>
67
68 <p>
69 Brace example:
70 </p>
71 <pre>
72 if (condition) {
73 foo;
74 }
75 else {
76 bar;
77 }
78 </pre>
79
80 <p>
81 Here's the GNU indent command which will best approximate my preferred style:
82 </p>
83 <pre>
84 indent -br -i3 -npcs infile.c -o outfile.c
85 </pre>
86
87
88 <p>
89 Local variable name example: localVarName (no underscores)
90 </p>
91
92 <p>
93 Constants and macros are ALL_UPPERCASE, with _ between words
94 </p>
95
96 <p>
97 Global variables are not allowed.
98 </p>
99
100 <p>
101 Function name examples:
102 </p>
103 <pre>
104 glFooBar() - a public GL entry point (in dispatch.c)
105 _mesa_FooBar() - the internal immediate mode function
106 save_FooBar() - retained mode (display list) function in dlist.c
107 foo_bar() - a static (private) function
108 _mesa_foo_bar() - an internal non-static Mesa function
109 </pre>
110
111
112 <H2>Making a New Mesa Release</H2>
113
114 <p>
115 These are the instructions for making a new Mesa release.
116 </p>
117
118 <H3>Get latest source files</H3>
119 <p>
120 Use "cvs update -dAP " to get the latest Mesa files from CVS.
121 </p>
122
123
124 <H3>Verify and update version info</H3>
125 <p>
126 Create/edit the docs/RELNOTES-X.Y file to document what's new in the release.
127 Add the new RELNOTES-X.Y file to <a href="relnotes.html">relnotes.html</a>.
128 Update the docs/VERSIONS file too.
129 </p>
130
131 <p>
132 Edit configs/default and change the MESA_MAJOR, MESA_MINOR and MESA_TINY
133 version numbers.
134 </p>
135
136 <p>
137 Make sure the values in src/mesa/main/version.h is correct.
138 </p>
139
140 <p>
141 Edit the top-level Makefile and verify that DIRECTORY, LIB_NAME and
142 DEMO_NAME are correct.
143 </p>
144
145 <p>
146 Update the docs/news.html file and docs/contents.html files.
147 </p>
148
149 <p>
150 Check in all updates to CVS.
151 </p>
152
153 <p>
154 Tag the CVS files with the release name (in the form <b>mesa_X_Y</b>).
155 </p>
156
157
158 <H3>Make the tarballs</H3>
159 <p>
160 Make a symbolic link from $(DIRECTORY) to 'Mesa'. For example,
161 ln -s Mesa Mesa-6.3
162 This is needed in order to make a correct tar file in the next step.
163 </p>
164
165 <p>
166 Make the distribution files. From inside the Mesa directory:
167 <pre>
168 make tarballs
169 </pre>
170
171 <p>
172 After the tarballs are created, the md5 checksums for the files will
173 be computed.
174 Add them to the docs/news.html file.
175 </p>
176
177 <p>
178 Copy the distribution files to a temporary directory, unpack them,
179 compile everything, and run some demos to be sure everything works.
180 </p>
181
182 <H3>Update the website and announce the release</H3>
183 <p>
184 Follow the directions on SourceForge for creating a new "release" and
185 uploading the tarballs.
186 </p>
187
188 <p>
189 Update the web site by copying the docs/ directory's files to
190 /home/users/b/br/brianp/mesa-www/htdocs/
191 </p>
192
193 <p>
194 Make an announcement on the mailing lists:
195 <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>,
196 <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>
197 and
198 <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>
199 </p>
200
201
202
203 </body>
204 </html>