added new GLUT features
[mesa.git] / docs / RELNOTES-4.1
1
2 Mesa 4.1 release notes
3
4 <month>, <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
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
78
79 Device Driver Status
80 --------------------
81
82 A number of Mesa's software drivers haven't been actively maintained for
83 some time. We rely on volunteers to maintain many of these drivers.
84 Here's the current status of all included drivers:
85
86
87 Driver Status
88 ---------------------- ---------------------
89 XMesa (Xlib) implements OpenGL 1.3
90 OSMesa (off-screen) implements OpenGL 1.3
91 FX (3dfx Voodoo1/2) implements OpenGL 1.3
92 SVGA implements OpenGL 1.3
93 Wind River UGL implements OpenGL 1.3
94 Windows/Win32 implements OpenGL 1.3
95 DOS/DJGPP implements OpenGL 1.3
96 GGI implements OpenGL 1.3
97 BeOS needs updating (underway)
98 Allegro needs updating
99 D3D needs updating
100 DOS needs updating
101
102
103
104 New features in GLUT
105 --------------------
106
107 1. Frames per second printing
108
109 GLUT now looks for an environment variable called "GLUT_FPS". If it's
110 set, GLUT will print out a frames/second statistic to stderr when
111 glutSwapBuffers() is called. By default, frames/second is computed
112 and displayed once every 5 seconds. You can specify a different
113 interval (in milliseconds) when you set the env var. For example
114 'export GLUT_FPS=1000' or 'setenv GLUT_FPS 1000' will set the interval
115 to one second.
116
117 NOTE: the demo or application must call the glutInit() function for
118 this to work. Otherwise, the env var will be ignored.
119
120 Finally, this feature may not be reliable in multi-window programs.
121
122
123 2. glutGetProcAddress() function
124
125 The new function:
126
127 void *glutGetProcAddress(const char *procName)
128
129 is a wrapper for glXGetProcAddressARB() and wglGetProcAddress(). It
130 lets you dynamically get the address of an OpenGL function at runtime.
131 The GLUT_API_VERSION has been bumped to 5, but I haven't bumped the
132 GLUT version number from 3.7 since that's probably Mark Kilgard's role.
133
134 This function should probably also be able to return the address of
135 GLUT functions themselves, but it doesn't do that yet.
136
137
138
139 XXX Things To Do Yet XXXX
140 -------------------------
141
142 Verify x86 code for normal transformation works with new 4-element normal
143 vector arrays. Pretty sure the SSE code is wrong.
144
145 Allow multiple points to be rendered into one sw_span.
146
147 improve point/line rendering speed.
148
149 glVertexAttrib*NV(index>15) should cause an error.
150
151 isosurf with vertex program exhibits some missing triangles (probably
152 when recycling the vertex buffer for long prims).
153
154
155
156 Porting Info
157 ------------
158
159 If you're porting a DRI or other driver from Mesa 4.0.x to Mesa 4.1 here
160 are some things to change:
161
162 1. ctx->Texture._ReallyEnabled is obsolete.
163
164 Since there are now 5 texture targets (1D, 2D, 3D, cube and rect) that
165 left room for only 6 units (6*5 < 32) in this field.
166 This field is being replaced by ctx->Texture._EnabledUnits which has one
167 bit per texture unit. If the bit k of _EnabledUnits is set, that means
168 ctx->Texture.Unit[k]._ReallyEnabled is non-zero. You'll have to look at
169 ctx->Texture.Unit[k]._ReallyEnabled to learn if the 1D, 2D, 3D, cube or
170 rect texture is enabled for unit k.
171
172 This also means that the constants TEXTURE1_*, TEXTURE2_*, etc are
173 obsolete.
174
175 The tokens TEXTURE0_* have been replaced as well (since there's no
176 significance to the "0" part:
177
178 old token new token
179 TEXTURE0_1D TEXTURE_1D_BIT
180 TEXTURE0_2D TEXTURE_2D_BIT
181 TEXTURE0_3D TEXTURE_3D_BIT
182 TEXTURE0_CUBE TEXTURE_CUBE_BIT
183 <none> TEXTURE_RECT_BIT
184
185 These tokens are only used for the ctx->Texture.Unit[i].Enabled and
186 ctx->Texture.Unit[i]._ReallyEnabled fields. Exactly 0 or 1 bits will
187 be set in _ReallyEnabled at any time!
188
189 Q: "What's the purpose of Unit[i].Enabled vs Unit[i]._ReallyEnabled?"
190 A: The user can enable GL_TEXTURE_1D, GL_TEXTURE_2D, etc for any
191 texure unit all at once (an unusual thing to do).
192 OpenGL defines priorities that basically say GL_TEXTURE_2D has
193 higher priority than GL_TEXTURE_1D, etc. Also, just because a
194 texture target is enabled by the user doesn't mean we'll actually
195 use that texture! If a texture object is incomplete (missing mip-
196 map levels, etc) it's as if texturing is disabled for that target.
197 The _ReallyEnabled field will have a bit set ONLY if the texture
198 target is enabled and complete. This spares the driver writer from
199 examining a _lot_ of GL state to determine which texture target is
200 to be used.
201
202
203 2. Tnl tokens changes
204
205 During the implementation of GL_NV_vertex_program some of the vertex
206 buffer code was changed. Specifically, the VERT_* bits defined in
207 tnl/t_context.h have been renamed to better match the conventions of
208 GL_NV_vertex_program. The old names are still present but obsolete.
209 Drivers should use the newer names.
210
211 For example: VERT_RGBA is now VERT_BIT_COLOR0 and
212 VERT_SPEC_RGB is now VERT_BIT_COLOR1.
213
214
215
216 3. Read/Draw Buffer changes
217
218 The business of setting the current read/draw buffers in Mesa 4.0.x
219 was complicated. It's much simpler now in Mesa 4.1.
220
221 Here are the changes:
222
223 - Rename ctx->Color.DrawDestMask to ctx->Color._DrawDestMask
224 - Rename ctx->Color.DriverDrawBuffer to ctx->Color._DriverDrawBuffer
225 - Rename ctx->Pixel.DriverReadBuffer to ctx->Pixel._DriverReadBuffer
226 - Removed ctx->Color.MultiDrawBuffer
227 - Removed ctx->Driver.SetDrawBuffer
228 - Added ctx->Driver.DrawBuffer and ctx->Driver.ReadBuffer. These functions
229 exactly correspond to glDrawBuffer and glReadBuffer calls.
230 Many drivers will set ctx->Driver.DrawBuffer = _swrast_DrawBuffer and
231 leave ctx->Draw.ReadBuffer NULL.
232 DRI drivers should implement their own function for ctx->Driver.DrawBuffer
233 and use it to set the current hardware drawing buffer. You'll probably
234 also want to check for GL_FRONT_AND_BACK mode and fall back to software.
235 Call _swrast_DrawBuffer() too, to update the swrast state.
236 - Removed swrast->Driver.SetReadBuffer
237 - Added swrast->Driver.SetBuffer. This function should be implemented by
238 _all_ device drivers. Mesa will call it to specify the buffer to use
239 for span reading AND writing and point/line/triangle rendering. There
240 should be no confusion between current read or draw buffer anymore.
241
242
243 4. _mesa_create_context() changes. This function now takes a pointer to
244 a __GLimports object. The __GLimports structure contains function
245 pointers to system functions like fprintf(), malloc(), etc.
246 The _mesa_init_default_imports() function can be used to initialize
247 a __GLimports object. Most device drivers (like the DRI drivers)
248 should use this.
249
250
251
252 ----------------------------------------------------------------------
253 $Id: RELNOTES-4.1,v 1.15 2002/08/17 00:23:19 brianp Exp $