blob: aa9484f5058cade77b328520eba53c0906854a6e [file] [log] [blame]
Brian Paule58a10a1998-02-14 17:45:13 +00001
2 Mesa 3.0 Unix/X11 Information
3
4
5
6Installation
7============
8
9To compile the library, first type 'make' alone to see the list of system
10configurations currently supported. If you see your configuration on the
11list, type 'make <config>'. Most popular Unix/X workstations are currently
12supported.
13
14The top-level makefile will execute the makefiles in a number of sub-
15directories. When finished, the Mesa libraries will be in the Mesa-2.6/lib/
16directory. A few GLUT demos in the demos/ directory should be ready to run.
17
18If you also downloaded and unpacked the demos there should be executables
19in the "xdemos/", "samples/", and "book/" directories for you to try out.
20If you only want to compile the contents of one subdirectory you can 'cd'
21to that directory and type 'make <config>' there.
22
23If your system configuration is not listed by 'make', you'll have to modify
24the top-level Makefile and Make-config files. There are instructions in
25each file.
26
27If you have compilation problems you should try to fix them and return the
28patches to the author.
29
30
Brian Paul0fed6a12000-01-25 17:18:52 +000031Notes on assembly language optimizations:
32
33 When using the old-style Makefiles, you can specify a configuration
34 that uses X86 assembly language optimizations (linux-3dnow for example).
35
36 The detection of MMX, 3DNow!, PIII/SSE, etc capability is done at
37 runtime. That means you can compile Mesa for 3DNow! optimizations
38 even if you don't have an AMD CPU.
39
40 However, your Linux binutils and assembler must understand the
41 special instructions in order to compile them. If you have
42 compilation problems, try upgrading your binutils.
43
44
Brian Paule58a10a1998-02-14 17:45:13 +000045Header and library files:
46 After you've compiled Mesa and tried the demos I recommend the following
47 procedure for "installing" Mesa.
48
49 Copy the Mesa include/GL directory to /usr/local/include:
50 cp -r include/GL /usr/local/include
51
52 Copy the Mesa library files to /usr/local/lib:
53 cp lib/* /usr/local/lib
54
55 (actually, use "cp -d" on Linux to preserve symbolic links)
56
Brian Paule58a10a1998-02-14 17:45:13 +000057
58Xt/Motif widgets:
59 If you want to use Mesa or OpenGL in your Xt/Motif program you can build
60 the widgets found in either the widgets-mesa or widgets-sgi directories.
61 The former were written for Mesa and the later are the original SGI
62 widgets. Look in those directories for more information.
63
64
65Notes:
66 HP users: a Mesa user reports that the HP-UX 10.01 C compiler has
67 a bug which effects glReadPixels. A patch for the compiler (PHSS_5743) is
68 available. Otherwise be sure your compiler is version 10.13 or later.
69
70 QNX users: if you have problems running the demos try setting the
71 stack size to 200K or larger with -N200K, for example.
72
73 SunOS 5.x users: The X shared memory extension may not work
74 correctly. If Mesa prints an error message to the effect of "Shared memory
75 error" then you'll have to append the following three lines to the end of
76 your /etc/system file then reboot:
77 set shmsys:shminfo_shmmax = 0x2000000
78 set shmsys:shminfo_shmmni = 0x1000
79 set shmsys:shminfo_shmseg = 0x100
80
81
82
83Using the library
84=================
85
86Configuration options:
87 The file src/config.h has many parameters which you can adjust such
88 as maximum number of lights, clipping planes, maximum texture size,
89 etc. In particular, you may want to change DEPTH_BITS from 16 to 32
90 if a 16-bit depth buffer isn't precise enough for your application.
91
92
93Shared libraries:
94 If you compile shared libraries you may have to set an environment
95 variable to specify where the Mesa libraries are located. On Linux and
96 Sun systems for example, set the LD_LIBRARY_PATH variable to include
97 /your-dir/Mesa-2.6/lib. Otherwise, when you try to run a demo it
98 may fail with a message saying that one or more libraries couldn't be
99 found.
100
101
102Remote display of OpenGL/GLX programs:
103 As of version 1.2.3, Mesa's header files use the same GLenum and GLUenum
104 values as SGI's (and most/all other vendor's) OpenGL headers. This means
105 you can freely mix object files compiled with OpenGL or Mesa headers.
106 In fact, on systems with dynamic runtime linkers it's possible to dynam-
107 ically link with Mesa or OpenGL shared libraries at runtime, without
108 recompiling or relinking anything!
109
110 Using IRIX 5.x as an example, you can run SGI's OpenGL demos with the
111 Mesa shared libraries as follows. Let's assume you're installing Mesa
112 in /usr/local/Mesa and using the C-shell:
113 % cd /usr/local/Mesa
114 % make irix5-dso
Brian Paule58a10a1998-02-14 17:45:13 +0000115 % setenv _RLD_LIST "/usr/local/Mesa/lib/libGL.so:DEFAULT"
116 % /usr/demos/bin/ideas_ogl // this is a test
117
118 You can now run OpenGL executables on almost any X display! There may
119 be some problems from the fact that Mesa supports many X visual types
120 that an OpenGL client may not expect (grayscale for example). In this
121 case the application may abort, print error messages, or just behave
122 strangely. You may have to experiment with the MESA_RGB_VISUAL envi-
123 ronment variable.
124
125
126Xt/Motif Widgets:
127 Two versions of the Xt/Motif OpenGL drawing area widgets are included:
128
129 widgets-sgi/ SGI's stock widgets
130 widgets-mesa/ Mesa-tuned widgets
131
132 Look in those directories for details
133
134
135Togl:
136 Togl is an OpenGL/Mesa widget for Tcl/Tk.
137 See http://www.ssec.wisc.edu/~brianp/Togl.html for more information.
138
139
140
141X Display Modes:
142 Mesa supports RGB(A) rendering into almost any X visual type and depth.
143
144 The glXChooseVisual function tries its best to pick an appropriate visual
145 for the given attribute list. However, if this doesn't suit your needs
146 you can force Mesa to use any X visual you want (any supported by your
147 X server that is) by setting the MESA_RGB_VISUAL and MESA_CI_VISUAL
148 environment variables. When an RGB visual is requested, glXChooseVisual
149 will first look if the MESA_RGB_VISUAL variable is defined. If so, it
150 will try to use the specified visual. Similarly, when a color index
151 visual is requested, glXChooseVisual will look for the MESA_CI_VISUAL
152 variable.
153
154 The format of accepted values is: <visual-class> <depth>
155 Here are some examples:
156
157 using the C-shell:
158 % setenv MESA_RGB_VISUAL "TrueColor 8" // 8-bit TrueColor
159 % setenv MESA_CI_VISUAL "PseudoColor 12" // 12-bit PseudoColor
160 % setenv MESA_RGB_VISUAL "PseudoColor 8" // 8-bit PseudoColor
161
162 using the KornShell:
163 $ export MESA_RGB_VISUAL="TrueColor 8"
164 $ export MESA_CI_VISUAL="PseudoColor 12"
165 $ export MESA_RGB_VISUAL="PseudoColor 8"
166
167
Brian Paul3867fa41998-10-03 12:48:50 +0000168Double buffering:
Brian Paule58a10a1998-02-14 17:45:13 +0000169 Mesa can use either an X Pixmap or XImage as the backbuffer when in
170 double buffer mode. Using GLX, the default is to use an XImage. The
171 MESA_BACK_BUFFER environment variable can override this. The valid
172 values for MESA_BACK_BUFFER are: Pixmap and XImage (only the first
173 letter is checked, case doesn't matter).
174
175 A pixmap is faster when drawing simple lines and polygons while an
176 XImage is faster when Mesa has to do pixel-by-pixel rendering. If you
177 need depth buffering the XImage will almost surely be faster. Exper-
178 iment with the MESA_BACK_BUFFER variable to see which is faster for
179 your application.
180
181
Brian Paul3867fa41998-10-03 12:48:50 +0000182Colormaps:
Brian Paule58a10a1998-02-14 17:45:13 +0000183 When using Mesa directly or with GLX, it's up to the application writer
184 to create a window with an appropriate colormap. The aux, tk, and GLUT
185 toolkits try to minimize colormap "flashing" by sharing colormaps when
186 possible. Specifically, if the visual and depth of the window matches
187 that of the root window, the root window's colormap will be shared by
188 the Mesa window. Otherwise, a new, private colormap will be allocated.
189
190 When sharing the root colormap, Mesa may be unable to allocate the colors
191 it needs, resulting in poor color quality. This can happen when a
192 large number of colorcells in the root colormap are already allocated.
193 To prevent colormap sharing in aux, tk and GLUT, define the environment
194 variable MESA_PRIVATE_CMAP. The value isn't significant.
195
196
Brian Paul3867fa41998-10-03 12:48:50 +0000197Gamma correction:
Brian Paule58a10a1998-02-14 17:45:13 +0000198 To compensate for the nonlinear relationship between pixel values
199 and displayed intensities, there is a gamma correction feature in
200 Mesa. Some systems, such as Silicon Graphics, support gamma
201 correction in hardware (man gamma) so you won't need to use Mesa's
202 gamma facility. Other systems, however, may need gamma adjustment
203 to produce images which look correct. If in the past you thought
204 Mesa's images were too dim, read on.
205
206 Gamma correction is controlled with the MESA_GAMMA environment
207 variable. Its value is of the form "Gr Gg Gb" or just "G" where
208 Gr is the red gamma value, Gg is the green gamma value, Gb is the
209 blue gamma value and G is one gamma value to use for all three
210 channels. Each value is a positive real number typically in the
211 range 1.0 to 2.5. The defaults are all 1.0, effectively disabling
212 gamma correction. Examples using csh:
213
214 % setenv MESA_GAMMA "2.3 2.2 2.4" // separate R,G,B values
215 % setenv MESA_GAMMA "2.0" // same gamma for R,G,B
216
217 The demos/gamma.c program may help you to determine reasonable gamma
218 value for your display. With correct gamma values, the color intensities
219 displayed in the top row (drawn by dithering) should nearly match those
220 in the bottom row (drawn as grays).
221
222 Alex De Bruyn reports that gamma values of 1.6, 1.6 and 1.9 work well
223 on HP displays using the HP-ColorRecovery technology.
224
225 Mesa implements gamma correction with a lookup table which translates
226 a "linear" pixel value to a gamma-corrected pixel value. There is a
227 small performance penalty. Gamma correction only works in RGB mode.
228 Also be aware that pixel values read back from the frame buffer will
229 not be "un-corrected" so glReadPixels may not return the same data
230 drawn with glDrawPixels.
231
232 For more information about gamma correction see:
233 http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html
234
235
Brian Paul3867fa41998-10-03 12:48:50 +0000236Overlay Planes
237
238 Overlay planes in the frame buffer are supported by Mesa but require
239 hardware and X server support. To determine if your X server has
240 overlay support you can test for the SERVER_OVERLAY_VISUALS property:
241
242 xprop -root | grep SERVER_OVERLAY_VISUALS
243
244
Brian Paule0a3ce21998-07-29 01:19:15 +0000245HPCR glClear(GL_COLOR_BUFFER_BIT) dithering
246
247 If you set the MESA_HPCR_CLEAR environment variable then dithering
248 will be used when clearing the color buffer. This is only applicable
249 to HP systems with the HPCR (Color Recovery) system.
250
Brian Paule58a10a1998-02-14 17:45:13 +0000251
252Extensions:
253 The following OpenGL GLX extensions are currently implemented:
254
255 GLX_EXT_visual_info - GLX visual and transparent pixel extension
256
257 For detailed information about the extensions see www.opengl.org
258
259 There are four Mesa-specific GL/GLX extensions at this time.
260
261 GLX_MESA_pixmap_colormap
262
263 This extension adds the GLX function:
264
265 GLXPixmap glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visual,
266 Pixmap pixmap, Colormap cmap )
267
268 It is an alternative to the standard glXCreateGLXPixmap() function.
269 Since Mesa supports RGB rendering into any X visual, not just True-
270 Color or DirectColor, Mesa needs colormap information to convert RGB
271 values into pixel values. An X window carries this information but a
272 pixmap does not. This function associates a colormap to a GLX pixmap.
273 See the xdemos/glxpixmap.c file for an example of how to use this
274 extension.
275
276 GLX_MESA_release_buffers
277
278 Mesa associates a set of ancillary (depth, accumulation, stencil and
279 alpha) buffers with each X window it draws into. These ancillary
280 buffers are allocated for each X window the first time the X window
281 is passed to glXMakeCurrent(). Mesa, however, can't detect when an
282 X window has been destroyed in order to free the ancillary buffers.
283
284 The best it can do is to check for recently destroyed windows whenever
285 the client calls the glXCreateContext() or glXDestroyContext()
286 functions. This may not be sufficient in all situations though.
287
288 The GLX_MESA_release_buffers extension allows a client to explicitly
289 deallocate the ancillary buffers by calling glxReleaseBuffersMESA()
290 just before an X window is destroyed. For example:
291
292 #ifdef GLX_MESA_release_buffers
293 glXReleaseBuffersMESA( dpy, window );
294 #endif
295 XDestroyWindow( dpy, window );
296
297 This extension is new in Mesa 2.0.
298
299 GLX_MESA_copy_sub_buffer
300
301 This extension adds the glXCopySubBufferMESA() function. It works
302 like glXSwapBuffers() but only copies a sub-region of the window
303 instead of the whole window.
304
305 This extension is new in Mesa version 2.6
306
307
308
309Summary of X-related environment variables:
310 MESA_RGB_VISUAL - specifies the X visual and depth for RGB mode (X only)
311 MESA_CI_VISUAL - specifies the X visual and depth for CI mode (X only)
312 MESA_BACK_BUFFER - specifies how to implement the back color buffer (X only)
313 MESA_PRIVATE_CMAP - force aux/tk libraries to use private colormaps (X only)
314 MESA_GAMMA - gamma correction coefficients (X only)
315
316
317----------------------------------------------------------------------
Brian Paul0fed6a12000-01-25 17:18:52 +0000318$Id: README.X11,v 3.4 2000/01/25 17:18:52 brianp Exp $