Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 1 | |
| 2 | Mesa 4.1 release notes |
| 3 | |
Brian Paul | fd06207 | 2002-10-29 15:06:37 +0000 | [diff] [blame] | 4 | October 29, 2002 |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 5 | |
Brian Paul | fd06207 | 2002-10-29 15:06:37 +0000 | [diff] [blame] | 6 | PLEASE READ!!!! |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 7 | |
| 8 | |
| 9 | |
| 10 | Introduction |
| 11 | ------------ |
| 12 | |
| 13 | Mesa uses an even/odd version number scheme like the Linux kernel. |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 14 | Even numbered versions (such as 4.0) designate stable releases. |
Brian Paul | 1d1635d | 2001-12-14 03:14:49 +0000 | [diff] [blame] | 15 | Odd numbered versions (such as 4.1) designate new developmental releases. |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 16 | |
| 17 | |
| 18 | New Features in Mesa 4.1 |
| 19 | ------------------------ |
| 20 | |
Brian Paul | 2161b8c | 2002-03-23 16:35:40 +0000 | [diff] [blame] | 21 | New extensions. Docs at http://oss.sgi.com/projects/ogl-sample/registry/ |
| 22 | |
Brian Paul | 530da27 | 2001-12-18 14:08:23 +0000 | [diff] [blame] | 23 | GL_NV_vertex_program |
| 24 | |
| 25 | NVIDIA's vertex programming extension |
| 26 | |
Brian Paul | 2161b8c | 2002-03-23 16:35:40 +0000 | [diff] [blame] | 27 | GL_NV_vertex_program1_1 |
| 28 | |
| 29 | A few features built on top of GL_NV_vertex_program |
| 30 | |
Brian Paul | 1d1635d | 2001-12-14 03:14:49 +0000 | [diff] [blame] | 31 | GL_ARB_window_pos |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 32 | |
Brian Paul | 1d1635d | 2001-12-14 03:14:49 +0000 | [diff] [blame] | 33 | This is the ARB-approved version of GL_MESA_window_pos |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 34 | |
Brian Paul | 1d1635d | 2001-12-14 03:14:49 +0000 | [diff] [blame] | 35 | GL_ARB_depth_texture |
| 36 | |
| 37 | This is the ARB-approved version of GL_SGIX_depth_texture. |
| 38 | It allows depth (Z buffer) data to be stored in textures. |
| 39 | This is used by GL_ARB_shadow |
| 40 | |
| 41 | GL_ARB_shadow |
Brian Paul | 2161b8c | 2002-03-23 16:35:40 +0000 | [diff] [blame] | 42 | |
Brian Paul | 1d1635d | 2001-12-14 03:14:49 +0000 | [diff] [blame] | 43 | Shadow mapping with depth textures. |
| 44 | This is the ARB-approved version of GL_SGIX_shadow. |
| 45 | |
| 46 | GL_ARB_shadow_ambient |
| 47 | |
| 48 | Allows one to specify the luminance of shadowed pixels. |
| 49 | This is the ARB-approved version of GL_SGIX_shadow_ambient. |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 50 | |
Brian Paul | 2161b8c | 2002-03-23 16:35:40 +0000 | [diff] [blame] | 51 | GL_EXT_shadow_funcs |
| 52 | |
| 53 | Extends the set of GL_ARB_shadow texture comparision functions to |
| 54 | include all eight of standard OpenGL dept-test functions. |
| 55 | |
Brian Paul | 9de4782 | 2002-04-02 16:19:21 +0000 | [diff] [blame] | 56 | GL_ARB_point_parameters |
| 57 | |
| 58 | This is basically the same as GL_EXT_point_parameters. |
| 59 | |
Brian Paul | bfa168e | 2002-06-15 03:03:58 +0000 | [diff] [blame] | 60 | GL_ARB_texture_env_crossbar |
| 61 | |
| 62 | Allows any texture combine stage to reference any texture source unit. |
| 63 | |
Brian Paul | 1c40d50 | 2002-05-27 17:05:51 +0000 | [diff] [blame] | 64 | GL_NV_point_sprite |
| 65 | |
| 66 | For rendering points as textured quads. Useful for particle effects. |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 67 | |
Brian Paul | 072edaf | 2002-10-04 19:10:27 +0000 | [diff] [blame] | 68 | GL_NV_texture_rectangle (new in 4.0.4 actually) |
Brian Paul | bfa168e | 2002-06-15 03:03:58 +0000 | [diff] [blame] | 69 | |
| 70 | Allows one to use textures with sizes that are not powers of two. |
| 71 | Note that mipmapping and several texture wrap modes are not allowed. |
| 72 | |
Brian Paul | 3c342eb | 2002-06-30 15:49:03 +0000 | [diff] [blame] | 73 | GL_EXT_multi_draw_arrays |
| 74 | |
| 75 | Allows arrays of vertex arrays to be rendered with one call. |
| 76 | |
Brian Paul | ca6647b | 2002-09-19 16:34:29 +0000 | [diff] [blame] | 77 | GL_EXT_stencil_two_side |
| 78 | |
| 79 | Separate stencil modes for front and back-facing polygons. |
| 80 | |
Brian Paul | 73029c5 | 2002-10-05 18:32:38 +0000 | [diff] [blame] | 81 | GLX_SGIX_fbconfig & GLX_SGIX_pbuffer |
| 82 | |
| 83 | Off-screen rendering support. |
| 84 | |
Brian Paul | 60b003e | 2002-10-21 15:53:06 +0000 | [diff] [blame] | 85 | GL_ATI_texture_mirror_once |
| 86 | |
| 87 | Adds two new texture wrap modes: GL_MIRROR_CLAMP_ATI and |
| 88 | GL_MIRROR_CLAMP_TO_EDGE_ATI. |
| 89 | |
Brian Paul | bfa168e | 2002-06-15 03:03:58 +0000 | [diff] [blame] | 90 | |
Brian Paul | 5e1a4fd | 2002-01-04 14:42:35 +0000 | [diff] [blame] | 91 | |
| 92 | Device Driver Status |
| 93 | -------------------- |
| 94 | |
| 95 | A number of Mesa's software drivers haven't been actively maintained for |
| 96 | some time. We rely on volunteers to maintain many of these drivers. |
| 97 | Here's the current status of all included drivers: |
| 98 | |
| 99 | |
| 100 | Driver Status |
| 101 | ---------------------- --------------------- |
| 102 | XMesa (Xlib) implements OpenGL 1.3 |
| 103 | OSMesa (off-screen) implements OpenGL 1.3 |
| 104 | FX (3dfx Voodoo1/2) implements OpenGL 1.3 |
| 105 | SVGA implements OpenGL 1.3 |
| 106 | Wind River UGL implements OpenGL 1.3 |
| 107 | Windows/Win32 implements OpenGL 1.3 |
Brian Paul | 2161b8c | 2002-03-23 16:35:40 +0000 | [diff] [blame] | 108 | DOS/DJGPP implements OpenGL 1.3 |
Brian Paul | e514cfe | 2002-06-15 03:15:16 +0000 | [diff] [blame] | 109 | GGI implements OpenGL 1.3 |
Brian Paul | bfa168e | 2002-06-15 03:03:58 +0000 | [diff] [blame] | 110 | BeOS needs updating (underway) |
Brian Paul | 5e1a4fd | 2002-01-04 14:42:35 +0000 | [diff] [blame] | 111 | Allegro needs updating |
| 112 | D3D needs updating |
| 113 | DOS needs updating |
| 114 | |
| 115 | |
| 116 | |
Brian Paul | af3265f | 2002-08-17 00:23:19 +0000 | [diff] [blame] | 117 | New features in GLUT |
| 118 | -------------------- |
| 119 | |
| 120 | 1. Frames per second printing |
| 121 | |
| 122 | GLUT now looks for an environment variable called "GLUT_FPS". If it's |
| 123 | set, GLUT will print out a frames/second statistic to stderr when |
| 124 | glutSwapBuffers() is called. By default, frames/second is computed |
| 125 | and displayed once every 5 seconds. You can specify a different |
| 126 | interval (in milliseconds) when you set the env var. For example |
| 127 | 'export GLUT_FPS=1000' or 'setenv GLUT_FPS 1000' will set the interval |
| 128 | to one second. |
| 129 | |
| 130 | NOTE: the demo or application must call the glutInit() function for |
| 131 | this to work. Otherwise, the env var will be ignored. |
| 132 | |
| 133 | Finally, this feature may not be reliable in multi-window programs. |
| 134 | |
| 135 | |
| 136 | 2. glutGetProcAddress() function |
| 137 | |
| 138 | The new function: |
| 139 | |
| 140 | void *glutGetProcAddress(const char *procName) |
| 141 | |
| 142 | is a wrapper for glXGetProcAddressARB() and wglGetProcAddress(). It |
| 143 | lets you dynamically get the address of an OpenGL function at runtime. |
| 144 | The GLUT_API_VERSION has been bumped to 5, but I haven't bumped the |
| 145 | GLUT version number from 3.7 since that's probably Mark Kilgard's role. |
| 146 | |
| 147 | This function should probably also be able to return the address of |
| 148 | GLUT functions themselves, but it doesn't do that yet. |
| 149 | |
| 150 | |
| 151 | |
Brian Paul | f55b303 | 2002-04-21 21:12:49 +0000 | [diff] [blame] | 152 | XXX Things To Do Yet XXXX |
| 153 | ------------------------- |
| 154 | |
Brian Paul | bfa168e | 2002-06-15 03:03:58 +0000 | [diff] [blame] | 155 | isosurf with vertex program exhibits some missing triangles (probably |
| 156 | when recycling the vertex buffer for long prims). |
| 157 | |
| 158 | |
| 159 | |
| 160 | Porting Info |
| 161 | ------------ |
| 162 | |
| 163 | If you're porting a DRI or other driver from Mesa 4.0.x to Mesa 4.1 here |
| 164 | are some things to change: |
| 165 | |
| 166 | 1. ctx->Texture._ReallyEnabled is obsolete. |
| 167 | |
| 168 | Since there are now 5 texture targets (1D, 2D, 3D, cube and rect) that |
| 169 | left room for only 6 units (6*5 < 32) in this field. |
| 170 | This field is being replaced by ctx->Texture._EnabledUnits which has one |
| 171 | bit per texture unit. If the bit k of _EnabledUnits is set, that means |
| 172 | ctx->Texture.Unit[k]._ReallyEnabled is non-zero. You'll have to look at |
| 173 | ctx->Texture.Unit[k]._ReallyEnabled to learn if the 1D, 2D, 3D, cube or |
| 174 | rect texture is enabled for unit k. |
| 175 | |
| 176 | This also means that the constants TEXTURE1_*, TEXTURE2_*, etc are |
| 177 | obsolete. |
| 178 | |
| 179 | The tokens TEXTURE0_* have been replaced as well (since there's no |
| 180 | significance to the "0" part: |
| 181 | |
| 182 | old token new token |
| 183 | TEXTURE0_1D TEXTURE_1D_BIT |
| 184 | TEXTURE0_2D TEXTURE_2D_BIT |
| 185 | TEXTURE0_3D TEXTURE_3D_BIT |
| 186 | TEXTURE0_CUBE TEXTURE_CUBE_BIT |
| 187 | <none> TEXTURE_RECT_BIT |
| 188 | |
| 189 | These tokens are only used for the ctx->Texture.Unit[i].Enabled and |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 190 | ctx->Texture.Unit[i]._ReallyEnabled fields. Exactly 0 or 1 bits will |
Brian Paul | bfa168e | 2002-06-15 03:03:58 +0000 | [diff] [blame] | 191 | be set in _ReallyEnabled at any time! |
| 192 | |
| 193 | Q: "What's the purpose of Unit[i].Enabled vs Unit[i]._ReallyEnabled?" |
| 194 | A: The user can enable GL_TEXTURE_1D, GL_TEXTURE_2D, etc for any |
| 195 | texure unit all at once (an unusual thing to do). |
| 196 | OpenGL defines priorities that basically say GL_TEXTURE_2D has |
| 197 | higher priority than GL_TEXTURE_1D, etc. Also, just because a |
| 198 | texture target is enabled by the user doesn't mean we'll actually |
| 199 | use that texture! If a texture object is incomplete (missing mip- |
| 200 | map levels, etc) it's as if texturing is disabled for that target. |
| 201 | The _ReallyEnabled field will have a bit set ONLY if the texture |
| 202 | target is enabled and complete. This spares the driver writer from |
| 203 | examining a _lot_ of GL state to determine which texture target is |
| 204 | to be used. |
| 205 | |
| 206 | |
| 207 | 2. Tnl tokens changes |
| 208 | |
| 209 | During the implementation of GL_NV_vertex_program some of the vertex |
| 210 | buffer code was changed. Specifically, the VERT_* bits defined in |
| 211 | tnl/t_context.h have been renamed to better match the conventions of |
| 212 | GL_NV_vertex_program. The old names are still present but obsolete. |
| 213 | Drivers should use the newer names. |
| 214 | |
| 215 | For example: VERT_RGBA is now VERT_BIT_COLOR0 and |
| 216 | VERT_SPEC_RGB is now VERT_BIT_COLOR1. |
| 217 | |
| 218 | |
Brian Paul | f55b303 | 2002-04-21 21:12:49 +0000 | [diff] [blame] | 219 | |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 220 | 3. Read/Draw Buffer changes |
| 221 | |
| 222 | The business of setting the current read/draw buffers in Mesa 4.0.x |
| 223 | was complicated. It's much simpler now in Mesa 4.1. |
| 224 | |
| 225 | Here are the changes: |
| 226 | |
Brian Paul | f58826d | 2002-10-11 17:42:48 +0000 | [diff] [blame] | 227 | - Renamed ctx->Color.DrawDestMask to ctx->Color._DrawDestMask |
| 228 | - Removed ctx->Color.DriverDrawBuffer |
| 229 | - Removed ctx->Pixel.DriverReadBuffer |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 230 | - Removed ctx->Color.MultiDrawBuffer |
Brian Paul | f58826d | 2002-10-11 17:42:48 +0000 | [diff] [blame] | 231 | - Removed ctx->Driver.SetDrawBuffer() |
| 232 | - Removed swrast->Driver.SetReadBuffer(). |
| 233 | - Added ctx->Color._DrawDestMask - a bitmask of FRONT/BACK_LEFT/RIGHT_BIT |
| 234 | values to indicate the current draw buffers. |
| 235 | - Added ctx->Pixel._ReadSrcMask to indicate the source for pixel reading. |
| 236 | The value is _one_ of the FRONT/BACK_LEFT/RIGHT_BIT values. |
| 237 | - Added ctx->Driver.DrawBuffer() and ctx->Driver.ReadBuffer(). |
| 238 | These functions exactly correspond to glDrawBuffer and glReadBuffer calls. |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 239 | Many drivers will set ctx->Driver.DrawBuffer = _swrast_DrawBuffer and |
| 240 | leave ctx->Draw.ReadBuffer NULL. |
| 241 | DRI drivers should implement their own function for ctx->Driver.DrawBuffer |
| 242 | and use it to set the current hardware drawing buffer. You'll probably |
| 243 | also want to check for GL_FRONT_AND_BACK mode and fall back to software. |
| 244 | Call _swrast_DrawBuffer() too, to update the swrast state. |
Brian Paul | f58826d | 2002-10-11 17:42:48 +0000 | [diff] [blame] | 245 | - Added swrast->Driver.SetBuffer(). |
| 246 | This function should be implemented by all device drivers that use swrast. |
| 247 | Mesa will call it to specify the buffer to use for span reading AND |
| 248 | writing and point/line/triangle rendering. |
| 249 | There should be no confusion between current read or draw buffer anymore. |
| 250 | - Added swrast->CurrentBuffer to indicate which color buffer to read/draw. |
| 251 | Will be FRONT_LEFT_BIT, BACK_LEFT_BIT, FRONT_RIGHT_BIT or BACK_RIGHT_BIT. |
| 252 | This value is usually passed to swrast->Driver.SetBuffer(). |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 253 | |
| 254 | |
Brian Paul | 971df9b | 2002-08-01 15:16:46 +0000 | [diff] [blame] | 255 | 4. _mesa_create_context() changes. This function now takes a pointer to |
| 256 | a __GLimports object. The __GLimports structure contains function |
| 257 | pointers to system functions like fprintf(), malloc(), etc. |
| 258 | The _mesa_init_default_imports() function can be used to initialize |
| 259 | a __GLimports object. Most device drivers (like the DRI drivers) |
| 260 | should use this. |
| 261 | |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 262 | |
Brian Paul | ca6647b | 2002-09-19 16:34:29 +0000 | [diff] [blame] | 263 | 5. In tnl's struct vertex_buffer, the field "ProjectedClipCoords" |
| 264 | has been replaced by "NdcPtr" to better match the OpenGL spec's |
| 265 | terminology. |
| 266 | |
| 267 | |
| 268 | 6. Since GL_EXT_stencil_two_side has been implemented, many of the |
| 269 | ctx->Stencil fields are now 2-element arrays. For example, |
| 270 | "GLenum Ref" is now "GLenum Ref[2]" The [0] elements are the front-face |
| 271 | values and the [1] elements are the back-face values. |
| 272 | ctx->Stencil.ActiveFace is 0 or 1 to indicate the current face for |
| 273 | the glStencilOp/Func/Mask() functions. |
| 274 | ctx->Stencil.TestTwoSide controls whether or not 1 or 2-sided stenciling |
| 275 | is enabled. |
| 276 | |
Brian Paul | 55c82c5 | 2002-07-09 01:28:03 +0000 | [diff] [blame] | 277 | |
Brian Paul | 072edaf | 2002-10-04 19:10:27 +0000 | [diff] [blame] | 278 | 7. Removed ctx->Polygon._OffsetAny. Removed ctx->Polygon.OffsetMRD. |
| 279 | |
| 280 | |
| 281 | 8. GLfloat / GLchan changes: |
| 282 | |
Brian Paul | 813c96f | 2002-10-10 23:49:02 +0000 | [diff] [blame] | 283 | - Changed ctx->Driver.ClearColor() to take GLfloat[4] instead of GLchan[4]. |
Brian Paul | 072edaf | 2002-10-04 19:10:27 +0000 | [diff] [blame] | 284 | ctx->Color.ClearColor is now GLfloat[4] too. |
Brian Paul | 813c96f | 2002-10-10 23:49:02 +0000 | [diff] [blame] | 285 | - Changed ctx->Driver.AlphaRef() to take GLfloat instead of GLchan. |
| 286 | - ctx->Color.AlphaRef is now GLfloat. |
| 287 | - texObj->BorderColor is now GLfloat[4]. texObj->_BorderChan is GLchan[4]. |
Brian Paul | 072edaf | 2002-10-04 19:10:27 +0000 | [diff] [blame] | 288 | |
| 289 | This is part of an effort to remove all GLchan types from core Mesa so |
| 290 | that someday we can support 8, 16 and 32-bit color channels dynamically |
| 291 | at runtime, instead of at compile-time. |
| 292 | |
| 293 | |
Brian Paul | 813c96f | 2002-10-10 23:49:02 +0000 | [diff] [blame] | 294 | 9. GLboolean ctx->Tranform.ClipEnabled[MAX_CLIP_PLANES] has been replaced |
| 295 | by GLuint ctx->Transform.ClipPlanesEnabled. The later is a bitfield. |
| 296 | |
| 297 | |
| 298 | 10. There's a new matrix_stack type in mtypes.h used for the Modelview, |
| 299 | Projection, Color and Texcoord matrix stacks. |
| 300 | |
| 301 | |
| 302 | 11. The ctx->Current.* fields have changed a lot. Now, there's a |
| 303 | ctx->Current.Attrib[] array for all vertex attributes which matches |
| 304 | the NV vertex program conventions. |
| 305 | |
| 306 | |
Brian Paul | 0878456 | 2001-10-22 22:57:23 +0000 | [diff] [blame] | 307 | ---------------------------------------------------------------------- |