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