Brian Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 1 | |
| 2 | Mesa 3.0 Unix/X11 Information |
| 3 | |
| 4 | |
| 5 | |
| 6 | Installation |
| 7 | ============ |
| 8 | |
| 9 | To compile the library, first type 'make' alone to see the list of system |
| 10 | configurations currently supported. If you see your configuration on the |
| 11 | list, type 'make <config>'. Most popular Unix/X workstations are currently |
| 12 | supported. |
| 13 | |
| 14 | The top-level makefile will execute the makefiles in a number of sub- |
| 15 | directories. When finished, the Mesa libraries will be in the Mesa-2.6/lib/ |
| 16 | directory. A few GLUT demos in the demos/ directory should be ready to run. |
| 17 | |
| 18 | If you also downloaded and unpacked the demos there should be executables |
| 19 | in the "xdemos/", "samples/", and "book/" directories for you to try out. |
| 20 | If you only want to compile the contents of one subdirectory you can 'cd' |
| 21 | to that directory and type 'make <config>' there. |
| 22 | |
| 23 | If your system configuration is not listed by 'make', you'll have to modify |
| 24 | the top-level Makefile and Make-config files. There are instructions in |
| 25 | each file. |
| 26 | |
| 27 | If you have compilation problems you should try to fix them and return the |
| 28 | patches to the author. |
| 29 | |
| 30 | |
Brian Paul | 0fed6a1 | 2000-01-25 17:18:52 +0000 | [diff] [blame^] | 31 | Notes 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 Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 45 | Header 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 Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 57 | |
| 58 | Xt/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 | |
| 65 | Notes: |
| 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 | |
| 83 | Using the library |
| 84 | ================= |
| 85 | |
| 86 | Configuration 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 | |
| 93 | Shared 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 | |
| 102 | Remote 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 Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 115 | % 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 | |
| 126 | Xt/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 | |
| 135 | Togl: |
| 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 | |
| 141 | X 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 Paul | 3867fa4 | 1998-10-03 12:48:50 +0000 | [diff] [blame] | 168 | Double buffering: |
Brian Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 169 | 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 Paul | 3867fa4 | 1998-10-03 12:48:50 +0000 | [diff] [blame] | 182 | Colormaps: |
Brian Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 183 | 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 Paul | 3867fa4 | 1998-10-03 12:48:50 +0000 | [diff] [blame] | 197 | Gamma correction: |
Brian Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 198 | 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 Paul | 3867fa4 | 1998-10-03 12:48:50 +0000 | [diff] [blame] | 236 | Overlay 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 Paul | e0a3ce2 | 1998-07-29 01:19:15 +0000 | [diff] [blame] | 245 | HPCR 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 Paul | e58a10a | 1998-02-14 17:45:13 +0000 | [diff] [blame] | 251 | |
| 252 | Extensions: |
| 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 | |
| 309 | Summary 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 Paul | 0fed6a1 | 2000-01-25 17:18:52 +0000 | [diff] [blame^] | 318 | $Id: README.X11,v 3.4 2000/01/25 17:18:52 brianp Exp $ |