Mesa 4.1 release notes , , 2002 PLEASE READ!!!! Introduction ------------ Mesa uses an even/odd version number scheme like the Linux kernel. Even numbered versions (such as 4.0) designate stable releases. Odd numbered versions (such as 4.1) designate new developmental releases. New Features in Mesa 4.1 ------------------------ New extensions. Docs at http://oss.sgi.com/projects/ogl-sample/registry/ GL_NV_vertex_program NVIDIA's vertex programming extension GL_NV_vertex_program1_1 A few features built on top of GL_NV_vertex_program GL_ARB_window_pos This is the ARB-approved version of GL_MESA_window_pos GL_ARB_depth_texture This is the ARB-approved version of GL_SGIX_depth_texture. It allows depth (Z buffer) data to be stored in textures. This is used by GL_ARB_shadow GL_ARB_shadow Shadow mapping with depth textures. This is the ARB-approved version of GL_SGIX_shadow. GL_ARB_shadow_ambient Allows one to specify the luminance of shadowed pixels. This is the ARB-approved version of GL_SGIX_shadow_ambient. GL_EXT_shadow_funcs Extends the set of GL_ARB_shadow texture comparision functions to include all eight of standard OpenGL dept-test functions. GL_ARB_point_parameters This is basically the same as GL_EXT_point_parameters. GL_ARB_texture_env_crossbar Allows any texture combine stage to reference any texture source unit. GL_NV_point_sprite For rendering points as textured quads. Useful for particle effects. GL_NV_texture_rectangle Allows one to use textures with sizes that are not powers of two. Note that mipmapping and several texture wrap modes are not allowed. GL_EXT_multi_draw_arrays Allows arrays of vertex arrays to be rendered with one call. Device Driver Status -------------------- A number of Mesa's software drivers haven't been actively maintained for some time. We rely on volunteers to maintain many of these drivers. Here's the current status of all included drivers: Driver Status ---------------------- --------------------- XMesa (Xlib) implements OpenGL 1.3 OSMesa (off-screen) implements OpenGL 1.3 FX (3dfx Voodoo1/2) implements OpenGL 1.3 SVGA implements OpenGL 1.3 Wind River UGL implements OpenGL 1.3 Windows/Win32 implements OpenGL 1.3 DOS/DJGPP implements OpenGL 1.3 GGI implements OpenGL 1.3 BeOS needs updating (underway) Allegro needs updating D3D needs updating DOS needs updating XXX Things To Do Yet XXXX ------------------------- Verify x86 code for normal transformation works with new 4-element normal vector arrays. Pretty sure the SSE code is wrong. Allow multiple points to be rendered into one sw_span. improve point/line rendering speed. glVertexAttrib*NV(index>15) should cause an error. isosurf with vertex program exhibits some missing triangles (probably when recycling the vertex buffer for long prims). Porting Info ------------ If you're porting a DRI or other driver from Mesa 4.0.x to Mesa 4.1 here are some things to change: 1. ctx->Texture._ReallyEnabled is obsolete. Since there are now 5 texture targets (1D, 2D, 3D, cube and rect) that left room for only 6 units (6*5 < 32) in this field. This field is being replaced by ctx->Texture._EnabledUnits which has one bit per texture unit. If the bit k of _EnabledUnits is set, that means ctx->Texture.Unit[k]._ReallyEnabled is non-zero. You'll have to look at ctx->Texture.Unit[k]._ReallyEnabled to learn if the 1D, 2D, 3D, cube or rect texture is enabled for unit k. This also means that the constants TEXTURE1_*, TEXTURE2_*, etc are obsolete. The tokens TEXTURE0_* have been replaced as well (since there's no significance to the "0" part: old token new token TEXTURE0_1D TEXTURE_1D_BIT TEXTURE0_2D TEXTURE_2D_BIT TEXTURE0_3D TEXTURE_3D_BIT TEXTURE0_CUBE TEXTURE_CUBE_BIT TEXTURE_RECT_BIT These tokens are only used for the ctx->Texture.Unit[i].Enabled and ctx->Texture.Unit[i]._ReallyEnabled fields. Exactly 0 or 1 bits will be set in _ReallyEnabled at any time! Q: "What's the purpose of Unit[i].Enabled vs Unit[i]._ReallyEnabled?" A: The user can enable GL_TEXTURE_1D, GL_TEXTURE_2D, etc for any texure unit all at once (an unusual thing to do). OpenGL defines priorities that basically say GL_TEXTURE_2D has higher priority than GL_TEXTURE_1D, etc. Also, just because a texture target is enabled by the user doesn't mean we'll actually use that texture! If a texture object is incomplete (missing mip- map levels, etc) it's as if texturing is disabled for that target. The _ReallyEnabled field will have a bit set ONLY if the texture target is enabled and complete. This spares the driver writer from examining a _lot_ of GL state to determine which texture target is to be used. 2. Tnl tokens changes During the implementation of GL_NV_vertex_program some of the vertex buffer code was changed. Specifically, the VERT_* bits defined in tnl/t_context.h have been renamed to better match the conventions of GL_NV_vertex_program. The old names are still present but obsolete. Drivers should use the newer names. For example: VERT_RGBA is now VERT_BIT_COLOR0 and VERT_SPEC_RGB is now VERT_BIT_COLOR1. 3. Read/Draw Buffer changes The business of setting the current read/draw buffers in Mesa 4.0.x was complicated. It's much simpler now in Mesa 4.1. Here are the changes: - Rename ctx->Color.DrawDestMask to ctx->Color._DrawDestMask - Rename ctx->Color.DriverDrawBuffer to ctx->Color._DriverDrawBuffer - Rename ctx->Pixel.DriverReadBuffer to ctx->Pixel._DriverReadBuffer - Removed ctx->Color.MultiDrawBuffer - Removed ctx->Driver.SetDrawBuffer - Added ctx->Driver.DrawBuffer and ctx->Driver.ReadBuffer. These functions exactly correspond to glDrawBuffer and glReadBuffer calls. Many drivers will set ctx->Driver.DrawBuffer = _swrast_DrawBuffer and leave ctx->Draw.ReadBuffer NULL. DRI drivers should implement their own function for ctx->Driver.DrawBuffer and use it to set the current hardware drawing buffer. You'll probably also want to check for GL_FRONT_AND_BACK mode and fall back to software. Call _swrast_DrawBuffer() too, to update the swrast state. - Removed swrast->Driver.SetReadBuffer - Added swrast->Driver.SetBuffer. This function should be implemented by _all_ device drivers. Mesa will call it to specify the buffer to use for span reading AND writing and point/line/triangle rendering. There should be no confusion between current read or draw buffer anymore. 4. _mesa_create_context() changes. This function now takes a pointer to a __GLimports object. The __GLimports structure contains function pointers to system functions like fprintf(), malloc(), etc. The _mesa_init_default_imports() function can be used to initialize a __GLimports object. Most device drivers (like the DRI drivers) should use this. ---------------------------------------------------------------------- $Id: RELNOTES-4.1,v 1.14 2002/08/01 15:16:46 brianp Exp $