| |
| Mesa 4.1 release notes |
| |
| October 29, 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 (new in 4.0.4 actually) |
| |
| 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. |
| |
| GL_EXT_stencil_two_side |
| |
| Separate stencil modes for front and back-facing polygons. |
| |
| GLX_SGIX_fbconfig & GLX_SGIX_pbuffer |
| |
| Off-screen rendering support. |
| |
| GL_ATI_texture_mirror_once |
| |
| Adds two new texture wrap modes: GL_MIRROR_CLAMP_ATI and |
| GL_MIRROR_CLAMP_TO_EDGE_ATI. |
| |
| |
| |
| 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 |
| |
| |
| |
| New features in GLUT |
| -------------------- |
| |
| 1. Frames per second printing |
| |
| GLUT now looks for an environment variable called "GLUT_FPS". If it's |
| set, GLUT will print out a frames/second statistic to stderr when |
| glutSwapBuffers() is called. By default, frames/second is computed |
| and displayed once every 5 seconds. You can specify a different |
| interval (in milliseconds) when you set the env var. For example |
| 'export GLUT_FPS=1000' or 'setenv GLUT_FPS 1000' will set the interval |
| to one second. |
| |
| NOTE: the demo or application must call the glutInit() function for |
| this to work. Otherwise, the env var will be ignored. |
| |
| Finally, this feature may not be reliable in multi-window programs. |
| |
| |
| 2. glutGetProcAddress() function |
| |
| The new function: |
| |
| void *glutGetProcAddress(const char *procName) |
| |
| is a wrapper for glXGetProcAddressARB() and wglGetProcAddress(). It |
| lets you dynamically get the address of an OpenGL function at runtime. |
| The GLUT_API_VERSION has been bumped to 5, but I haven't bumped the |
| GLUT version number from 3.7 since that's probably Mark Kilgard's role. |
| |
| This function should probably also be able to return the address of |
| GLUT functions themselves, but it doesn't do that yet. |
| |
| |
| |
| XXX Things To Do Yet XXXX |
| ------------------------- |
| |
| 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 |
| <none> 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: |
| |
| - Renamed ctx->Color.DrawDestMask to ctx->Color._DrawDestMask |
| - Removed ctx->Color.DriverDrawBuffer |
| - Removed ctx->Pixel.DriverReadBuffer |
| - Removed ctx->Color.MultiDrawBuffer |
| - Removed ctx->Driver.SetDrawBuffer() |
| - Removed swrast->Driver.SetReadBuffer(). |
| - Added ctx->Color._DrawDestMask - a bitmask of FRONT/BACK_LEFT/RIGHT_BIT |
| values to indicate the current draw buffers. |
| - Added ctx->Pixel._ReadSrcMask to indicate the source for pixel reading. |
| The value is _one_ of the FRONT/BACK_LEFT/RIGHT_BIT values. |
| - 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. |
| - Added swrast->Driver.SetBuffer(). |
| This function should be implemented by all device drivers that use swrast. |
| 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. |
| - Added swrast->CurrentBuffer to indicate which color buffer to read/draw. |
| Will be FRONT_LEFT_BIT, BACK_LEFT_BIT, FRONT_RIGHT_BIT or BACK_RIGHT_BIT. |
| This value is usually passed to swrast->Driver.SetBuffer(). |
| |
| |
| 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. |
| |
| |
| 5. In tnl's struct vertex_buffer, the field "ProjectedClipCoords" |
| has been replaced by "NdcPtr" to better match the OpenGL spec's |
| terminology. |
| |
| |
| 6. Since GL_EXT_stencil_two_side has been implemented, many of the |
| ctx->Stencil fields are now 2-element arrays. For example, |
| "GLenum Ref" is now "GLenum Ref[2]" The [0] elements are the front-face |
| values and the [1] elements are the back-face values. |
| ctx->Stencil.ActiveFace is 0 or 1 to indicate the current face for |
| the glStencilOp/Func/Mask() functions. |
| ctx->Stencil.TestTwoSide controls whether or not 1 or 2-sided stenciling |
| is enabled. |
| |
| |
| 7. Removed ctx->Polygon._OffsetAny. Removed ctx->Polygon.OffsetMRD. |
| |
| |
| 8. GLfloat / GLchan changes: |
| |
| - Changed ctx->Driver.ClearColor() to take GLfloat[4] instead of GLchan[4]. |
| ctx->Color.ClearColor is now GLfloat[4] too. |
| - Changed ctx->Driver.AlphaRef() to take GLfloat instead of GLchan. |
| - ctx->Color.AlphaRef is now GLfloat. |
| - texObj->BorderColor is now GLfloat[4]. texObj->_BorderChan is GLchan[4]. |
| |
| This is part of an effort to remove all GLchan types from core Mesa so |
| that someday we can support 8, 16 and 32-bit color channels dynamically |
| at runtime, instead of at compile-time. |
| |
| |
| 9. GLboolean ctx->Tranform.ClipEnabled[MAX_CLIP_PLANES] has been replaced |
| by GLuint ctx->Transform.ClipPlanesEnabled. The later is a bitfield. |
| |
| |
| 10. There's a new matrix_stack type in mtypes.h used for the Modelview, |
| Projection, Color and Texcoord matrix stacks. |
| |
| |
| 11. The ctx->Current.* fields have changed a lot. Now, there's a |
| ctx->Current.Attrib[] array for all vertex attributes which matches |
| the NV vertex program conventions. |
| |
| |
| ---------------------------------------------------------------------- |