added GLX_SGIX_fbconfig and GLX_SGIX_pbuffer
[mesa.git] / docs / RELNOTES-4.1
1
2 Mesa 4.1 release notes
3
4 October, <day>, 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
86
87 Device Driver Status
88 --------------------
89
90 A number of Mesa's software drivers haven't been actively maintained for
91 some time. We rely on volunteers to maintain many of these drivers.
92 Here's the current status of all included drivers:
93
94
95 Driver Status
96 ---------------------- ---------------------
97 XMesa (Xlib) implements OpenGL 1.3
98 OSMesa (off-screen) implements OpenGL 1.3
99 FX (3dfx Voodoo1/2) implements OpenGL 1.3
100 SVGA implements OpenGL 1.3
101 Wind River UGL implements OpenGL 1.3
102 Windows/Win32 implements OpenGL 1.3
103 DOS/DJGPP implements OpenGL 1.3
104 GGI implements OpenGL 1.3
105 BeOS needs updating (underway)
106 Allegro needs updating
107 D3D needs updating
108 DOS needs updating
109
110
111
112 New features in GLUT
113 --------------------
114
115 1. 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
131 2. 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
147 XXX Things To Do Yet XXXX
148 -------------------------
149
150 isosurf with vertex program exhibits some missing triangles (probably
151 when recycling the vertex buffer for long prims).
152
153
154
155 Porting Info
156 ------------
157
158 If you're porting a DRI or other driver from Mesa 4.0.x to Mesa 4.1 here
159 are some things to change:
160
161 1. 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
202 2. 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
215 3. 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 - Rename ctx->Color.DrawDestMask to ctx->Color._DrawDestMask
223 - Rename ctx->Color.DriverDrawBuffer to ctx->Color._DriverDrawBuffer
224 - Rename ctx->Pixel.DriverReadBuffer to ctx->Pixel._DriverReadBuffer
225 - Removed ctx->Color.MultiDrawBuffer
226 - Removed ctx->Driver.SetDrawBuffer
227 - Added ctx->Driver.DrawBuffer and ctx->Driver.ReadBuffer. These functions
228 exactly correspond to glDrawBuffer and glReadBuffer calls.
229 Many drivers will set ctx->Driver.DrawBuffer = _swrast_DrawBuffer and
230 leave ctx->Draw.ReadBuffer NULL.
231 DRI drivers should implement their own function for ctx->Driver.DrawBuffer
232 and use it to set the current hardware drawing buffer. You'll probably
233 also want to check for GL_FRONT_AND_BACK mode and fall back to software.
234 Call _swrast_DrawBuffer() too, to update the swrast state.
235 - Removed swrast->Driver.SetReadBuffer
236 - Added swrast->Driver.SetBuffer. This function should be implemented by
237 _all_ device drivers. Mesa will call it to specify the buffer to use
238 for span reading AND writing and point/line/triangle rendering. There
239 should be no confusion between current read or draw buffer anymore.
240
241
242 4. _mesa_create_context() changes. This function now takes a pointer to
243 a __GLimports object. The __GLimports structure contains function
244 pointers to system functions like fprintf(), malloc(), etc.
245 The _mesa_init_default_imports() function can be used to initialize
246 a __GLimports object. Most device drivers (like the DRI drivers)
247 should use this.
248
249
250 5. In tnl's struct vertex_buffer, the field "ProjectedClipCoords"
251 has been replaced by "NdcPtr" to better match the OpenGL spec's
252 terminology.
253
254
255 6. Since GL_EXT_stencil_two_side has been implemented, many of the
256 ctx->Stencil fields are now 2-element arrays. For example,
257 "GLenum Ref" is now "GLenum Ref[2]" The [0] elements are the front-face
258 values and the [1] elements are the back-face values.
259 ctx->Stencil.ActiveFace is 0 or 1 to indicate the current face for
260 the glStencilOp/Func/Mask() functions.
261 ctx->Stencil.TestTwoSide controls whether or not 1 or 2-sided stenciling
262 is enabled.
263
264
265 7. Removed ctx->Polygon._OffsetAny. Removed ctx->Polygon.OffsetMRD.
266
267
268 8. GLfloat / GLchan changes:
269
270 Changed ctx->Driver.ClearColor() to take GLfloat[4] instead of GLchan[4].
271 ctx->Color.ClearColor is now GLfloat[4] too.
272 Changed ctx->Driver.AlphaRef() to take GLfloat instead of GLchan.
273 ctx->Color.AlphaRef is now GLfloat.
274 texObj->BorderColor is now GLfloat[4]. texObj->_BorderChan is GLchan[4].
275
276 This is part of an effort to remove all GLchan types from core Mesa so
277 that someday we can support 8, 16 and 32-bit color channels dynamically
278 at runtime, instead of at compile-time.
279
280
281 ----------------------------------------------------------------------
282 $Id: RELNOTES-4.1,v 1.18 2002/10/05 18:32:38 brianp Exp $