1 2 Mesa 4.1 release notes 3 4 October 29, 2002 5 6 PLEASE READ!!!! 7 8 9 10 Introduction 11 ------------ 12 13 Mesa uses an even/odd version number scheme like the Linux kernel. 14 Even numbered versions (such as 4.0) designate stable releases. 15 Odd numbered versions (such as 4.1) designate new developmental releases. 16 17 18 New Features in Mesa 4.1 19 ------------------------ 20 21 New extensions. Docs at http://oss.sgi.com/projects/ogl-sample/registry/ 22 23 GL_NV_vertex_program 24 25 NVIDIA's vertex programming extension 26 27 GL_NV_vertex_program1_1 28 29 A few features built on top of GL_NV_vertex_program 30 31 GL_ARB_window_pos 32 33 This is the ARB-approved version of GL_MESA_window_pos 34 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 42 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. 50 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 56 GL_ARB_point_parameters 57 58 This is basically the same as GL_EXT_point_parameters. 59 60 GL_ARB_texture_env_crossbar 61 62 Allows any texture combine stage to reference any texture source unit. 63 64 GL_NV_point_sprite 65 66 For rendering points as textured quads. Useful for particle effects. 67 68 GL_NV_texture_rectangle (new in 4.0.4 actually) 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 73 GL_EXT_multi_draw_arrays 74 75 Allows arrays of vertex arrays to be rendered with one call. 76 77 GL_EXT_stencil_two_side 78 79 Separate stencil modes for front and back-facing polygons. 80 81 GLX_SGIX_fbconfig & GLX_SGIX_pbuffer 82 83 Off-screen rendering support. 84 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 90 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 108 DOS/DJGPP implements OpenGL 1.3 109 GGI implements OpenGL 1.3 110 BeOS needs updating (underway) 111 Allegro needs updating 112 D3D needs updating 113 DOS needs updating 114 115 116 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 152 XXX Things To Do Yet XXXX 153 ------------------------- 154 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 190 ctx->Texture.Unit[i]._ReallyEnabled fields. Exactly 0 or 1 bits will 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 219 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 227 - Renamed ctx->Color.DrawDestMask to ctx->Color._DrawDestMask 228 - Removed ctx->Color.DriverDrawBuffer 229 - Removed ctx->Pixel.DriverReadBuffer 230 - Removed ctx->Color.MultiDrawBuffer 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. 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. 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(). 253 254 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 262 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 277 278 7. Removed ctx->Polygon._OffsetAny. Removed ctx->Polygon.OffsetMRD. 279 280 281 8. GLfloat / GLchan changes: 282 283 - Changed ctx->Driver.ClearColor() to take GLfloat[4] instead of GLchan[4]. 284 ctx->Color.ClearColor is now GLfloat[4] too. 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]. 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 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 307 ---------------------------------------------------------------------- 308