Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4358 | Serge | 1 | |
2 | |||
3 | |||
4 | |||
5 |
|
||
6 | |||
7 | |||
8 | |||
9 | |||
10 | |||
11 |
|
||
12 | |||
13 | |||
14 | |||
15 | |||
16 | |||
17 |
|
||
18 | |||
19 | |||
20 |
|
||
21 | |||
22 | |||
23 | To add a new GL extension to Mesa you have to do at least the following. |
||
24 | |||
25 | |||
26 | |||
27 | If glext.h doesn't define the extension, edit include/GL/gl.h and add |
||
28 | code like this: |
||
29 | |||
30 | #ifndef GL_EXT_the_extension_name |
||
31 | #define GL_EXT_the_extension_name 1 |
||
32 | /* declare the new enum tokens */ |
||
33 | /* prototype the new functions */ |
||
34 | /* TYPEDEFS for the new functions */ |
||
35 | #endif |
||
36 | |||
37 | |||
38 | |||
39 | In the src/mesa/glapi/ directory, add the new extension functions and |
||
40 | enums to the gl_API.xml file. |
||
41 | Then, a bunch of source files must be regenerated by executing the |
||
42 | corresponding Python scripts. |
||
43 | |||
44 | |||
45 | Add a new entry to the |
||
46 | |||
47 | |||
48 | Update the |
||
49 | |||
50 | |||
51 | From this point, the best way to proceed is to find another extension, |
||
52 | similar to the new one, that's already implemented in Mesa and use it |
||
53 | as an example. |
||
54 | |||
55 | |||
56 | If the new extension adds new GL state, the functions in get.c, enable.c |
||
57 | and attrib.c will most likely require new code. |
||
58 | |||
59 | |||
60 | |||
61 | |||
62 | |||
63 |
|
||
64 | |||
65 | |||
66 | Mesa's code style has changed over the years. Here's the latest. |
||
67 | |||
68 | |||
69 | |||
70 | Comment your code! It's extremely important that open-source code be |
||
71 | well documented. Also, strive to write clean, easily understandable code. |
||
72 | |||
73 | |||
74 | |||
75 | 3-space indentation |
||
76 | |||
77 | |||
78 | |||
79 | If you use tabs, set them to 8 columns |
||
80 | |||
81 | |||
82 | |||
83 | Line width: the preferred width to fill comments and code in Mesa is 78 |
||
84 | columns. Exceptions are sometimes made for clarity (e.g. tabular data is |
||
85 | sometimes filled to a much larger width so that extraneous carriage returns |
||
86 | don't obscure the table). |
||
87 | |||
88 | |||
89 | |||
90 | Brace example: |
||
91 | |||
92 | |||
93 | if (condition) { |
||
94 | foo; |
||
95 | } |
||
96 | else { |
||
97 | bar; |
||
98 | } |
||
99 | |||
100 | switch (condition) { |
||
101 | case 0: |
||
102 | foo(); |
||
103 | break; |
||
104 | |||
105 | case 1: { |
||
106 | ... |
||
107 | break; |
||
108 | } |
||
109 | |||
110 | default: |
||
111 | ... |
||
112 | break; |
||
113 | } |
||
114 | |||
115 | |||
116 | |||
117 | Here's the GNU indent command which will best approximate my preferred style: |
||
118 | (Note that it won't format switch statements in the preferred way) |
||
119 | |||
120 | |||
121 | indent -br -i3 -npcs --no-tabs infile.c -o outfile.c |
||
122 | |||
123 | |||
124 | |||
125 | |||
126 | Local variable name example: localVarName (no underscores) |
||
127 | |||
128 | |||
129 | |||
130 | Constants and macros are ALL_UPPERCASE, with _ between words |
||
131 | |||
132 | |||
133 | |||
134 | Global variables are not allowed. |
||
135 | |||
136 | |||
137 | |||
138 | Function name examples: |
||
139 | |||
140 | |||
141 | glFooBar() - a public GL entry point (in glapi_dispatch.c) |
||
142 | _mesa_FooBar() - the internal immediate mode function |
||
143 | save_FooBar() - retained mode (display list) function in dlist.c |
||
144 | foo_bar() - a static (private) function |
||
145 | _mesa_foo_bar() - an internal non-static Mesa function |
||
146 | |||
147 | |||
148 | |||
149 | Places that are not directly visible to the GL API should prefer the use |
||
150 | of bool, true, and |
||
151 | false over GLboolean, GL_TRUE, and |
||
152 | GL_FALSE. In C code, this may mean that |
||
153 | #include <stdbool.h> needs to be added. The |
||
154 | try_emit_* methods in src/mesa/program/ir_to_mesa.cpp and |
||
155 | src/mesa/state_tracker/st_glsl_to_tgsi.cpp can serve as examples. |
||
156 | |||
157 | |||
158 | |||
159 |
|
||
160 | |||
161 | |||
162 | If you want a commit to be applied to a stable branch, |
||
163 | you should add an appropriate note to the commit message. |
||
164 | |||
165 | |||
166 | |||
167 | Here are some examples of such a note: |
||
168 | |||
169 | |||
170 | |||
171 | |||
172 | |||
173 | |||
174 | |||
175 | |||
176 |
|
||
177 | |||
178 | |||
179 | Please use |
||
180 | from master to a stable branch. |
||
181 | |||
182 | |||
183 |
|
||
184 | |||
185 | |||
186 | These are the instructions for making a new Mesa release. |
||
187 | |||
188 | |||
189 |
|
||
190 | |||
191 | Use git to get the latest Mesa files from the git repository, from whatever |
||
192 | branch is relevant. |
||
193 | |||
194 | |||
195 | |||
196 |
|
||
197 | |||
198 | |||
199 | |||
200 | |||
201 | |||
202 | |||
203 | |||
204 | |||
205 | |||
206 | |||
207 | Create a docs/relnotes/x.y.z.html file. |
||
208 | The bin/bugzilla_mesa.sh and bin/shortlog_mesa.sh scripts can be used to |
||
209 | create the HTML-formatted lists of bugfixes and changes to include in the file. |
||
210 | Link the new docs/relnotes/x.y.z.html file into the main relnotes.html file. |
||
211 | |||
212 | |||
213 | |||
214 | Update docs/index.html. |
||
215 | |||
216 | |||
217 | |||
218 | Tag the files with the release name (in the form mesa-x.y) |
||
219 | with: |
||
220 | Then: |
||
221 | |||
222 | |||
223 | |||
224 |
|
||
225 | |||
226 | Make the distribution files. From inside the Mesa directory: |
||
227 | |||
228 | ./autogen.sh |
||
229 | make tarballs |
||
230 | |||
231 | |||
232 | |||
233 | After the tarballs are created, the md5 checksums for the files will |
||
234 | be computed. |
||
235 | Add them to the docs/relnotes/x.y.html file. |
||
236 | |||
237 | |||
238 | |||
239 | Copy the distribution files to a temporary directory, unpack them, |
||
240 | compile everything, and run some demos to be sure everything works. |
||
241 | |||
242 | |||
243 |
|
||
244 | |||
245 | Make a new directory for the release on annarchy.freedesktop.org with: |
||
246 | |||
247 |
|
||
248 | mkdir /srv/ftp.freedesktop.org/pub/mesa/x.y |
||
249 | |||
250 | |||
251 | |||
252 | |||
253 | Basically, to upload the tarball files with: |
||
254 | |||
255 |
|
||
256 | rsync -avP -e ssh MesaLib-x.y.* USERNAME@annarchy.freedesktop.org:/srv/ftp.freedesktop.org/pub/mesa/x.y/ |
||
257 | |||
258 | |||
259 | |||
260 | |||
261 | Update the web site by copying the docs/ directory's files to |
||
262 | /home/users/b/br/brianp/mesa-www/htdocs/ with: |
||
263 | |||
264 |
|
||
265 | sftp USERNAME,mesa3d@web.sourceforge.net |
||
266 | |||
267 | |||
268 | |||
269 | |||
270 | Make an announcement on the mailing lists: |
||
271 | |||
272 | mesa-dev@lists.freedesktop.org, |
||
273 | mesa-users@lists.freedesktop.org |
||
274 | and |
||
275 | mesa-announce@lists.freedesktop.org |
||
276 | |||
277 | |||
278 | |||
279 | |||
280 | !DOCTYPE> |