1 /* $Id: types.h,v 1.50 1998/02/03 23:45:36 brianp Exp $ */
4 * Mesa 3-D graphics library
6 * Copyright (C) 1995-1997 Brian Paul
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the Free
20 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 * Revision 1.50 1998/02/03 23:45:36 brianp
27 * added space parameter to clip interpolation functions
29 * Revision 1.49 1998/01/06 02:40:52 brianp
30 * added DavidB's clipping interpolation optimization
32 * Revision 1.48 1997/12/31 06:10:03 brianp
33 * added Henk Kok's texture validation optimization (AnyDirty flag)
35 * Revision 1.47 1997/12/06 18:06:50 brianp
36 * moved several static display list vars into GLcontext
38 * Revision 1.46 1997/10/29 01:33:29 brianp
39 * added DriverMgrCtx field to gl_context struct
41 * Revision 1.45 1997/10/29 01:29:09 brianp
42 * added GL_EXT_point_parameters extension from Daniel Barrero
44 * Revision 1.44 1997/10/16 01:59:08 brianp
45 * added GL_EXT_shared_texture_palette extension
47 * Revision 1.43 1997/10/16 01:13:03 brianp
48 * removed teximage Dirty, DirtyPalette flags, mondello code
50 * Revision 1.42 1997/09/29 23:27:08 brianp
51 * added Dirty and DriverData fields for texturing
53 * Revision 1.41 1997/09/27 00:13:44 brianp
54 * added GL_EXT_paletted_texture extension
56 * Revision 1.40 1997/09/23 00:57:38 brianp
57 * now using hash table for texture objects
59 * Revision 1.39 1997/09/22 02:33:58 brianp
60 * display lists now implemented with hash table
62 * Revision 1.38 1997/08/13 01:30:55 brianp
63 * LightTwoSide is now a GLboolean
65 * Revision 1.37 1997/08/01 02:23:27 brianp
66 * removed unused gl_list_group struct
68 * Revision 1.36 1997/06/20 02:07:50 brianp
69 * replaced Current.IntColor with Current.ByteColor
70 * removed ColorShift field
72 * Revision 1.35 1997/06/20 02:02:37 brianp
73 * added Color4ubv API pointer
75 * Revision 1.34 1997/05/31 16:57:14 brianp
76 * added MESA_NO_RASTER env var support
78 * Revision 1.33 1997/05/28 04:06:03 brianp
79 * implemented projection near/far value stack for Driver.NearFar() function
81 * Revision 1.32 1997/05/26 21:15:13 brianp
82 * added Red/Green/Blue/AlphaBits to GLvisual struct
84 * Revision 1.31 1997/05/03 00:49:31 brianp
85 * added SampleFunc, Current, and Dirty to gl_texture_object
87 * Revision 1.30 1997/05/01 02:07:35 brianp
88 * added shared state variable NextFreeTextureName
90 * Revision 1.29 1997/04/24 01:50:53 brianp
91 * optimized glColor3f, glColor3fv, glColor4fv
93 * Revision 1.28 1997/04/21 01:20:41 brianp
94 * added MATRIX_2D_NO_ROT
96 * Revision 1.27 1997/04/20 16:18:15 brianp
97 * added glOrtho and glFrustum API pointers
99 * Revision 1.26 1997/04/16 23:55:33 brianp
100 * added optimized glTexCoord2f code
102 * Revision 1.25 1997/04/14 22:18:23 brianp
103 * added optimized glVertex3fv code
105 * Revision 1.24 1997/04/14 02:03:05 brianp
106 * added MinMagThresh to texture object
108 * Revision 1.23 1997/04/12 16:54:05 brianp
109 * new NEW_POLYGON state flag
111 * Revision 1.22 1997/04/12 12:26:39 brianp
112 * added quad_func and rect_func, removed polygon_func
114 * Revision 1.21 1997/04/07 02:57:13 brianp
115 * added API.Vertex[23] functions
117 * Revision 1.20 1997/04/01 04:19:37 brianp
118 * added API pointer for glLoadIdentity
119 * added matrix type constants and fields
121 * Revision 1.19 1997/03/13 03:05:54 brianp
122 * changed AlphaRefInt to AlphaRefUbyte
124 * Revision 1.18 1997/03/04 19:17:38 brianp
125 * added a few members to gl_texture_image struct
127 * Revision 1.17 1997/02/10 19:49:29 brianp
128 * added glResizeBuffersMESA() code
130 * Revision 1.16 1997/02/09 19:53:43 brianp
131 * now use TEXTURE_xD enable constants
133 * Revision 1.15 1997/02/09 18:42:41 brianp
134 * added GL_EXT_texture3D support
136 * Revision 1.14 1997/01/28 22:14:36 brianp
137 * now there's separate state for CI and RGBA logic op enabled
139 * Revision 1.13 1997/01/21 03:09:41 brianp
140 * added definition: union node;
142 * Revision 1.12 1997/01/09 21:26:23 brianp
143 * added RefCount to gl_image struct
145 * Revision 1.11 1996/12/18 20:01:39 brianp
146 * added material bitmask constants and ColorMaterialBitmask
148 * Revision 1.10 1996/12/11 20:16:30 brianp
149 * changed GLaccum types to signed
151 * Revision 1.9 1996/11/08 02:21:04 brianp
152 * added NoRaster flag to context
154 * Revision 1.8 1996/11/07 04:11:34 brianp
155 * now pass gl_image struct pointer to glTexImage[12]D()
157 * Revision 1.7 1996/11/06 04:21:58 brianp
158 * added Format to struct gl_image
160 * Revision 1.6 1996/10/11 03:41:12 brianp
161 * removed OffsetBias field
163 * Revision 1.5 1996/10/11 00:23:04 brianp
164 * changed Polygon/Line/PointZoffset to GLfloat
166 * Revision 1.4 1996/09/25 03:22:53 brianp
167 * added NO_DRAW_BIT for glDrawBuffer(GL_NONE)
169 * Revision 1.3 1996/09/19 03:17:56 brianp
170 * removed Window field from struct gl_frame_buffer
172 * Revision 1.2 1996/09/15 14:20:54 brianp
173 * added GLframebuffer and GLvisual datatypes
175 * Revision 1.1 1996/09/13 01:38:16 brianp
193 * Accumulation buffer data type:
196 typedef GLbyte GLaccum
;
198 typedef GLshort GLaccum
;
200 illegal number of accumulation bits
205 * Stencil buffer data type:
208 typedef GLubyte GLstencil
;
210 illegal number of stencil bits
216 * Depth buffer data type:
218 typedef GLint GLdepth
;
226 typedef struct gl_visual GLvisual
;
228 typedef struct gl_context GLcontext
;
230 typedef struct gl_frame_buffer GLframebuffer
;
235 * Point, line, triangle, quadrilateral and rectangle rasterizer functions:
237 typedef void (*points_func
)( GLcontext
*ctx
, GLuint first
, GLuint last
);
239 typedef void (*line_func
)( GLcontext
*ctx
, GLuint v1
, GLuint v2
, GLuint pv
);
241 typedef void (*triangle_func
)( GLcontext
*ctx
,
242 GLuint v1
, GLuint v2
, GLuint v3
, GLuint pv
);
244 typedef void (*quad_func
)( GLcontext
*ctx
, GLuint v1
, GLuint v2
,
245 GLuint v3
, GLuint v4
, GLuint pv
);
247 typedef void (*rect_func
)( GLcontext
*ctx
, GLint x
, GLint y
,
248 GLint width
, GLint height
);
251 * The auxiliary interpolation function for clipping
253 typedef void (* interp_func
)(GLcontext
*, GLuint
, GLuint
, GLfloat
, GLuint
, GLuint
);
257 * For texture sampling:
259 struct gl_texture_object
;
261 typedef void (*TextureSampleFunc
)( const struct gl_texture_object
*tObj
,
263 const GLfloat s
[], const GLfloat t
[],
264 const GLfloat u
[], const GLfloat lambda
[],
265 GLubyte r
[], GLubyte g
[],
266 GLubyte b
[],GLubyte a
[] );
269 /* Generic internal image format */
273 GLint Components
; /* 1, 2, 3 or 4 */
274 GLenum Format
; /* GL_COLOR_INDEX, GL_RED, GL_RGB, etc */
275 GLenum Type
; /* GL_UNSIGNED_BYTE or GL_FLOAT or GL_BITMAP */
277 GLboolean Interleaved
; /* If TRUE and Format==GL_RGB, GL_RGBA or
278 * GL_LUMINANCE_ALPHA then each row is
279 * stored as RRR..RGGG..GBBB.B instead of
280 * RGBRGBRGBRGB..RGB. This is only used
288 /* Texture image record */
289 struct gl_texture_image
{
290 GLenum Format
; /* GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
291 * GL_INTENSITY, GL_RGB, GL_RGBA, or
294 GLenum IntFormat
; /* Internal format as given by the user */
295 GLuint Border
; /* 0 or 1 */
296 GLuint Width
; /* = 2^WidthLog2 + 2*Border */
297 GLuint Height
; /* = 2^HeightLog2 + 2*Border */
298 GLuint Width2
; /* = Width - 2*Border */
299 GLuint Height2
; /* = Height - 2*Border */
300 GLuint WidthLog2
; /* = log2(Width2) */
301 GLuint HeightLog2
; /* = log2(Height2) */
302 GLuint MaxLog2
; /* = MAX(WidthLog2, HeightLog2) */
303 GLubyte
*Data
; /* Image data as unsigned bytes */
305 /* For device driver: */
306 void *DriverData
; /* Arbitrary device driver data */
312 * All gl* API functions in api.c jump through pointers in this struct.
314 struct gl_api_table
{
315 void (*Accum
)( GLcontext
*, GLenum
, GLfloat
);
316 void (*AlphaFunc
)( GLcontext
*, GLenum
, GLclampf
);
317 GLboolean (*AreTexturesResident
)( GLcontext
*, GLsizei
,
318 const GLuint
*, GLboolean
* );
319 void (*ArrayElement
)( GLcontext
*, GLint
);
320 void (*Begin
)( GLcontext
*, GLenum
);
321 void (*BindTexture
)( GLcontext
*, GLenum
, GLuint
);
322 void (*Bitmap
)( GLcontext
*, GLsizei
, GLsizei
, GLfloat
, GLfloat
,
323 GLfloat
, GLfloat
, const struct gl_image
*bitmap
);
324 void (*BlendFunc
)( GLcontext
*, GLenum
, GLenum
);
325 void (*CallList
)( GLcontext
*, GLuint list
);
326 void (*CallLists
)( GLcontext
*, GLsizei
, GLenum
, const GLvoid
* );
327 void (*Clear
)( GLcontext
*, GLbitfield
);
328 void (*ClearAccum
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
329 void (*ClearColor
)( GLcontext
*, GLclampf
, GLclampf
, GLclampf
, GLclampf
);
330 void (*ClearDepth
)( GLcontext
*, GLclampd
);
331 void (*ClearIndex
)( GLcontext
*, GLfloat
);
332 void (*ClearStencil
)( GLcontext
*, GLint
);
333 void (*ClipPlane
)( GLcontext
*, GLenum
, const GLfloat
* );
334 void (*Color3f
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
);
335 void (*Color3fv
)( GLcontext
*, const GLfloat
* );
336 void (*Color4f
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
337 void (*Color4fv
)( GLcontext
*, const GLfloat
* );
338 void (*Color4ub
)( GLcontext
*, GLubyte
, GLubyte
, GLubyte
, GLubyte
);
339 void (*Color4ubv
)( GLcontext
*, const GLubyte
* );
340 void (*ColorMask
)( GLcontext
*,
341 GLboolean
, GLboolean
, GLboolean
, GLboolean
);
342 void (*ColorMaterial
)( GLcontext
*, GLenum
, GLenum
);
343 void (*ColorPointer
)( GLcontext
*, GLint
, GLenum
, GLsizei
, const GLvoid
* );
344 void (*ColorTable
)( GLcontext
*, GLenum
, GLenum
, struct gl_image
* );
345 void (*ColorSubTable
)( GLcontext
*, GLenum
, GLsizei
, struct gl_image
* );
346 void (*CopyPixels
)( GLcontext
*, GLint
, GLint
, GLsizei
, GLsizei
, GLenum
);
347 void (*CopyTexImage1D
)( GLcontext
*, GLenum
, GLint
, GLenum
,
348 GLint
, GLint
, GLsizei
, GLint
);
349 void (*CopyTexImage2D
)( GLcontext
*, GLenum
, GLint
, GLenum
,
350 GLint
, GLint
, GLsizei
, GLsizei
, GLint
);
351 void (*CopyTexSubImage1D
)( GLcontext
*, GLenum
, GLint
, GLint
,
352 GLint
, GLint
, GLsizei
);
353 void (*CopyTexSubImage2D
)( GLcontext
*, GLenum
, GLint
, GLint
, GLint
,
354 GLint
, GLint
, GLsizei
, GLsizei
);
355 void (*CullFace
)( GLcontext
*, GLenum
);
356 void (*DeleteLists
)( GLcontext
*, GLuint
, GLsizei
);
357 void (*DeleteTextures
)( GLcontext
*, GLsizei
, const GLuint
*);
358 void (*DepthFunc
)( GLcontext
*, GLenum
);
359 void (*DepthMask
)( GLcontext
*, GLboolean
);
360 void (*DepthRange
)( GLcontext
*, GLclampd
, GLclampd
);
361 void (*Disable
)( GLcontext
*, GLenum
);
362 void (*DisableClientState
)( GLcontext
*, GLenum
);
363 void (*DrawArrays
)( GLcontext
*, GLenum
, GLint
, GLsizei
);
364 void (*DrawBuffer
)( GLcontext
*, GLenum
);
365 void (*DrawElements
)( GLcontext
*, GLenum
, GLsizei
, GLenum
, const GLvoid
*);
366 void (*DrawPixels
)( GLcontext
*,
367 GLsizei
, GLsizei
, GLenum
, GLenum
, const GLvoid
* );
368 void (*EdgeFlag
)( GLcontext
*, GLboolean
);
369 void (*EdgeFlagPointer
)( GLcontext
*, GLsizei
, const GLboolean
* );
370 void (*Enable
)( GLcontext
*, GLenum
);
371 void (*EnableClientState
)( GLcontext
*, GLenum
);
372 void (*End
)( GLcontext
* );
373 void (*EndList
)( GLcontext
* );
374 void (*EvalCoord1f
)( GLcontext
*, GLfloat
);
375 void (*EvalCoord2f
)( GLcontext
*, GLfloat
, GLfloat
);
376 void (*EvalMesh1
)( GLcontext
*, GLenum
, GLint
, GLint
);
377 void (*EvalMesh2
)( GLcontext
*, GLenum
, GLint
, GLint
, GLint
, GLint
);
378 void (*EvalPoint1
)( GLcontext
*, GLint
);
379 void (*EvalPoint2
)( GLcontext
*, GLint
, GLint
);
380 void (*FeedbackBuffer
)( GLcontext
*, GLsizei
, GLenum
, GLfloat
* );
381 void (*Finish
)( GLcontext
* );
382 void (*Flush
)( GLcontext
* );
383 void (*Fogfv
)( GLcontext
*, GLenum
, const GLfloat
* );
384 void (*FrontFace
)( GLcontext
*, GLenum
);
385 void (*Frustum
)( GLcontext
*, GLdouble
, GLdouble
, GLdouble
, GLdouble
,
386 GLdouble
, GLdouble
);
387 GLuint (*GenLists
)( GLcontext
*, GLsizei
);
388 void (*GenTextures
)( GLcontext
*, GLsizei
, GLuint
* );
389 void (*GetBooleanv
)( GLcontext
*, GLenum
, GLboolean
* );
390 void (*GetClipPlane
)( GLcontext
*, GLenum
, GLdouble
* );
391 void (*GetColorTable
)( GLcontext
*, GLenum
, GLenum
, GLenum
, GLvoid
*);
392 void (*GetColorTableParameteriv
)( GLcontext
*, GLenum
, GLenum
, GLint
*);
393 void (*GetDoublev
)( GLcontext
*, GLenum
, GLdouble
* );
394 GLenum (*GetError
)( GLcontext
* );
395 void (*GetFloatv
)( GLcontext
*, GLenum
, GLfloat
* );
396 void (*GetIntegerv
)( GLcontext
*, GLenum
, GLint
* );
397 const GLubyte
* (*GetString
)( GLcontext
*, GLenum name
);
398 void (*GetLightfv
)( GLcontext
*, GLenum light
, GLenum
, GLfloat
* );
399 void (*GetLightiv
)( GLcontext
*, GLenum light
, GLenum
, GLint
* );
400 void (*GetMapdv
)( GLcontext
*, GLenum
, GLenum
, GLdouble
* );
401 void (*GetMapfv
)( GLcontext
*, GLenum
, GLenum
, GLfloat
* );
402 void (*GetMapiv
)( GLcontext
*, GLenum
, GLenum
, GLint
* );
403 void (*GetMaterialfv
)( GLcontext
*, GLenum
, GLenum
, GLfloat
* );
404 void (*GetMaterialiv
)( GLcontext
*, GLenum
, GLenum
, GLint
* );
405 void (*GetPixelMapfv
)( GLcontext
*, GLenum
, GLfloat
* );
406 void (*GetPixelMapuiv
)( GLcontext
*, GLenum
, GLuint
* );
407 void (*GetPixelMapusv
)( GLcontext
*, GLenum
, GLushort
* );
408 void (*GetPointerv
)( GLcontext
*, GLenum
, GLvoid
** );
409 void (*GetPolygonStipple
)( GLcontext
*, GLubyte
* );
410 void (*PrioritizeTextures
)( GLcontext
*, GLsizei
, const GLuint
*,
412 void (*GetTexEnvfv
)( GLcontext
*, GLenum
, GLenum
, GLfloat
* );
413 void (*GetTexEnviv
)( GLcontext
*, GLenum
, GLenum
, GLint
* );
414 void (*GetTexGendv
)( GLcontext
*, GLenum coord
, GLenum
, GLdouble
* );
415 void (*GetTexGenfv
)( GLcontext
*, GLenum coord
, GLenum
, GLfloat
* );
416 void (*GetTexGeniv
)( GLcontext
*, GLenum coord
, GLenum
, GLint
* );
417 void (*GetTexImage
)( GLcontext
*, GLenum
, GLint level
, GLenum
, GLenum
,
419 void (*GetTexLevelParameterfv
)( GLcontext
*,
420 GLenum
, GLint
, GLenum
, GLfloat
* );
421 void (*GetTexLevelParameteriv
)( GLcontext
*,
422 GLenum
, GLint
, GLenum
, GLint
* );
423 void (*GetTexParameterfv
)( GLcontext
*, GLenum
, GLenum
, GLfloat
*);
424 void (*GetTexParameteriv
)( GLcontext
*, GLenum
, GLenum
, GLint
* );
425 void (*Hint
)( GLcontext
*, GLenum
, GLenum
);
426 void (*IndexMask
)( GLcontext
*, GLuint
);
427 void (*Indexf
)( GLcontext
*, GLfloat c
);
428 void (*Indexi
)( GLcontext
*, GLint c
);
429 void (*IndexPointer
)( GLcontext
*, GLenum
, GLsizei
, const GLvoid
* );
430 void (*InitNames
)( GLcontext
* );
431 void (*InterleavedArrays
)( GLcontext
*, GLenum
, GLsizei
, const GLvoid
* );
432 GLboolean (*IsEnabled
)( GLcontext
*, GLenum
);
433 GLboolean (*IsList
)( GLcontext
*, GLuint
);
434 GLboolean (*IsTexture
)( GLcontext
*, GLuint
);
435 void (*LightModelfv
)( GLcontext
*, GLenum
, const GLfloat
* );
436 void (*Lightfv
)( GLcontext
*, GLenum light
, GLenum
, const GLfloat
*, GLint
);
437 void (*LineStipple
)( GLcontext
*, GLint factor
, GLushort
);
438 void (*LineWidth
)( GLcontext
*, GLfloat
);
439 void (*ListBase
)( GLcontext
*, GLuint
);
440 void (*LoadIdentity
)( GLcontext
* );
441 /* LoadMatrixd implemented with glLoadMatrixf */
442 void (*LoadMatrixf
)( GLcontext
*, const GLfloat
* );
443 void (*LoadName
)( GLcontext
*, GLuint
);
444 void (*LogicOp
)( GLcontext
*, GLenum
);
445 void (*Map1f
)( GLcontext
*, GLenum
, GLfloat
, GLfloat
, GLint
, GLint
,
446 const GLfloat
*, GLboolean
);
447 void (*Map2f
)( GLcontext
*, GLenum
, GLfloat
, GLfloat
, GLint
, GLint
,
448 GLfloat
, GLfloat
, GLint
, GLint
, const GLfloat
*,
450 void (*MapGrid1f
)( GLcontext
*, GLint
, GLfloat
, GLfloat
);
451 void (*MapGrid2f
)( GLcontext
*, GLint
, GLfloat
, GLfloat
,
452 GLint
, GLfloat
, GLfloat
);
453 void (*Materialfv
)( GLcontext
*, GLenum
, GLenum
, const GLfloat
* );
454 void (*MatrixMode
)( GLcontext
*, GLenum
);
455 /* MultMatrixd implemented with glMultMatrixf */
456 void (*MultMatrixf
)( GLcontext
*, const GLfloat
* );
457 void (*NewList
)( GLcontext
*, GLuint list
, GLenum
);
458 void (*Normal3f
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
);
459 void (*Normal3fv
)( GLcontext
*, const GLfloat
* );
460 void (*NormalPointer
)( GLcontext
*, GLenum
, GLsizei
, const GLvoid
* );
461 void (*Ortho
)( GLcontext
*, GLdouble
, GLdouble
, GLdouble
, GLdouble
,
462 GLdouble
, GLdouble
);
463 void (*PassThrough
)( GLcontext
*, GLfloat
);
464 void (*PixelMapfv
)( GLcontext
*, GLenum
, GLint
, const GLfloat
* );
465 void (*PixelStorei
)( GLcontext
*, GLenum
, GLint
);
466 void (*PixelTransferf
)( GLcontext
*, GLenum
, GLfloat
);
467 void (*PixelZoom
)( GLcontext
*, GLfloat
, GLfloat
);
468 void (*PointSize
)( GLcontext
*, GLfloat
);
469 void (*PolygonMode
)( GLcontext
*, GLenum
, GLenum
);
470 void (*PolygonOffset
)( GLcontext
*, GLfloat
, GLfloat
);
471 void (*PolygonStipple
)( GLcontext
*, const GLubyte
* );
472 void (*PopAttrib
)( GLcontext
* );
473 void (*PopClientAttrib
)( GLcontext
* );
474 void (*PopMatrix
)( GLcontext
* );
475 void (*PopName
)( GLcontext
* );
476 void (*PushAttrib
)( GLcontext
*, GLbitfield
);
477 void (*PushClientAttrib
)( GLcontext
*, GLbitfield
);
478 void (*PushMatrix
)( GLcontext
* );
479 void (*PushName
)( GLcontext
*, GLuint
);
480 void (*RasterPos4f
)( GLcontext
*,
481 GLfloat x
, GLfloat y
, GLfloat z
, GLfloat w
);
482 void (*ReadBuffer
)( GLcontext
*, GLenum
);
483 void (*ReadPixels
)( GLcontext
*, GLint
, GLint
, GLsizei
, GLsizei
, GLenum
,
485 void (*Rectf
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
486 GLint (*RenderMode
)( GLcontext
*, GLenum
);
487 void (*Rotatef
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
488 void (*Scalef
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
);
489 void (*Scissor
)( GLcontext
*, GLint
, GLint
, GLsizei
, GLsizei
);
490 void (*SelectBuffer
)( GLcontext
*, GLsizei
, GLuint
* );
491 void (*ShadeModel
)( GLcontext
*, GLenum
);
492 void (*StencilFunc
)( GLcontext
*, GLenum
, GLint
, GLuint
);
493 void (*StencilMask
)( GLcontext
*, GLuint
);
494 void (*StencilOp
)( GLcontext
*, GLenum
, GLenum
, GLenum
);
495 void (*TexCoord2f
)( GLcontext
*, GLfloat
, GLfloat
);
496 void (*TexCoord4f
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
497 void (*TexCoordPointer
)( GLcontext
*, GLint
, GLenum
, GLsizei
,
499 void (*TexEnvfv
)( GLcontext
*, GLenum
, GLenum
, const GLfloat
* );
500 void (*TexGenfv
)( GLcontext
*, GLenum coord
, GLenum
, const GLfloat
* );
501 void (*TexImage1D
)( GLcontext
*, GLenum
, GLint
, GLint
, GLsizei
,
502 GLint
, GLenum
, GLenum
, struct gl_image
* );
503 void (*TexImage2D
)( GLcontext
*, GLenum
, GLint
, GLint
, GLsizei
, GLsizei
,
504 GLint
, GLenum
, GLenum
, struct gl_image
* );
505 void (*TexSubImage1D
)( GLcontext
*, GLenum
, GLint
, GLint
, GLsizei
,
506 GLenum
, GLenum
, struct gl_image
* );
507 void (*TexSubImage2D
)( GLcontext
*, GLenum
, GLint
, GLint
, GLint
,
508 GLsizei
, GLsizei
, GLenum
, GLenum
,
510 void (*TexParameterfv
)( GLcontext
*, GLenum
, GLenum
, const GLfloat
* );
511 /* Translated implemented by Translatef */
512 void (*Translatef
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
);
513 void (*Vertex2f
)( GLcontext
*, GLfloat
, GLfloat
);
514 void (*Vertex3f
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
);
515 void (*Vertex4f
)( GLcontext
*, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
516 void (*Vertex3fv
)( GLcontext
*, const GLfloat
* );
517 void (*VertexPointer
)( GLcontext
*, GLint
, GLenum
, GLsizei
, const GLvoid
*);
518 void (*Viewport
)( GLcontext
*, GLint
, GLint
, GLsizei
, GLsizei
);
527 * Bit flags used for updating material values.
529 #define FRONT_AMBIENT_BIT 0x1
530 #define BACK_AMBIENT_BIT 0x2
531 #define FRONT_DIFFUSE_BIT 0x4
532 #define BACK_DIFFUSE_BIT 0x8
533 #define FRONT_SPECULAR_BIT 0x10
534 #define BACK_SPECULAR_BIT 0x20
535 #define FRONT_EMISSION_BIT 0x40
536 #define BACK_EMISSION_BIT 0x80
537 #define FRONT_SHININESS_BIT 0x100
538 #define BACK_SHININESS_BIT 0x200
539 #define FRONT_INDEXES_BIT 0x400
540 #define BACK_INDEXES_BIT 0x800
542 #define FRONT_MATERIAL_BITS (FRONT_EMISSION_BIT | FRONT_AMBIENT_BIT | \
543 FRONT_DIFFUSE_BIT | FRONT_SPECULAR_BIT | \
544 FRONT_SHININESS_BIT | FRONT_INDEXES_BIT)
546 #define BACK_MATERIAL_BITS (BACK_EMISSION_BIT | BACK_AMBIENT_BIT | \
547 BACK_DIFFUSE_BIT | BACK_SPECULAR_BIT | \
548 BACK_SHININESS_BIT | BACK_INDEXES_BIT)
550 #define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS)
555 * Specular exponent and material shininess lookup table sizes:
557 #define EXP_TABLE_SIZE 512
558 #define SHINE_TABLE_SIZE 200
561 GLfloat Ambient
[4]; /* ambient color */
562 GLfloat Diffuse
[4]; /* diffuse color */
563 GLfloat Specular
[4]; /* specular color */
564 GLfloat Position
[4]; /* position in eye coordinates */
565 GLfloat Direction
[4]; /* spotlight dir in eye coordinates */
566 GLfloat SpotExponent
;
567 GLfloat SpotCutoff
; /* in degress */
568 GLfloat CosCutoff
; /* = cos(SpotCutoff) */
569 GLfloat ConstantAttenuation
;
570 GLfloat LinearAttenuation
;
571 GLfloat QuadraticAttenuation
;
572 GLboolean Enabled
; /* On/off flag */
574 struct gl_light
*NextEnabled
; /* Ptr to next enabled light or NULL */
577 GLfloat VP_inf_norm
[3]; /* Norm direction to infinite light */
578 GLfloat h_inf_norm
[3]; /* Norm( VP_inf_norm + <0,0,1> ) */
579 GLfloat NormDirection
[3]; /* normalized spotlight direction */
580 GLfloat SpotExpTable
[EXP_TABLE_SIZE
][2]; /* to replace a pow() call */
581 GLfloat MatAmbient
[2][3]; /* material ambient * light ambient */
582 GLfloat MatDiffuse
[2][3]; /* material diffuse * light diffuse */
583 GLfloat MatSpecular
[2][3]; /* material spec * light specular */
584 GLfloat dli
; /* CI diffuse light intensity */
585 GLfloat sli
; /* CI specular light intensity */
589 struct gl_lightmodel
{
590 GLfloat Ambient
[4]; /* ambient color */
591 GLboolean LocalViewer
; /* Local (or infinite) view point? */
592 GLboolean TwoSide
; /* Two (or one) sided lighting? */
602 GLfloat AmbientIndex
; /* for color index lighting */
603 GLfloat DiffuseIndex
; /* for color index lighting */
604 GLfloat SpecularIndex
; /* for color index lighting */
605 GLfloat ShineTable
[SHINE_TABLE_SIZE
]; /* to replace a pow() call */
611 * Attribute structures:
612 * We define a struct for each attribute group to make pushing and
613 * popping attributes easy. Also it's a good organization.
617 struct gl_accum_attrib
{
618 GLfloat ClearColor
[4]; /* Accumulation buffer clear color */
622 struct gl_colorbuffer_attrib
{
623 GLuint ClearIndex
; /* Index to use for glClear */
624 GLfloat ClearColor
[4]; /* Color to use for glClear */
626 GLuint IndexMask
; /* Color index write mask */
627 GLuint ColorMask
; /* bit 3=red,2=green,1=blue,0=alpha*/
628 GLboolean SWmasking
; /* Do color/CI masking in software? */
630 GLenum DrawBuffer
; /* Which buffer to draw into */
633 GLboolean AlphaEnabled
; /* Alpha test enabled flag */
634 GLenum AlphaFunc
; /* Alpha test function */
635 GLfloat AlphaRef
; /* Alpha reference value */
636 GLubyte AlphaRefUbyte
; /* AlphaRef scaled to an integer */
639 GLboolean BlendEnabled
; /* Blending enabled flag */
640 GLenum BlendSrc
; /* Blending source operator */
641 GLenum BlendDst
; /* Blending destination operator */
644 GLenum LogicOp
; /* Logic operator */
645 GLboolean IndexLogicOpEnabled
; /* Color index logic op enabled flag */
646 GLboolean ColorLogicOpEnabled
; /* RGBA logic op enabled flag */
647 GLboolean SWLogicOpEnabled
; /* Do logic ops in software? */
649 GLboolean DitherFlag
; /* Dither enable flag */
653 struct gl_current_attrib
{
654 GLubyte ByteColor
[4]; /* Current RGBA color */
655 GLuint Index
; /* Current color index */
656 GLfloat Normal
[3]; /* Current normal vector */
657 GLfloat TexCoord
[4]; /* Current texture coordinate */
658 GLfloat RasterPos
[4]; /* Current raster position */
659 GLfloat RasterDistance
; /* Current raster distance */
660 GLfloat RasterColor
[4]; /* Current raster color */
661 GLuint RasterIndex
; /* Current raster index */
662 GLfloat RasterTexCoord
[4]; /* Current raster texture coord */
663 GLboolean RasterPosValid
; /* Raster position valid flag */
664 GLboolean EdgeFlag
; /* Current edge flag */
668 struct gl_depthbuffer_attrib
{
669 GLenum Func
; /* Function for depth buffer compare */
670 GLfloat Clear
; /* Value to clear depth buffer to */
671 GLboolean Test
; /* Depth buffering enabled flag */
672 GLboolean Mask
; /* Depth buffer writable? */
676 struct gl_enable_attrib
{
678 GLboolean AutoNormal
;
680 GLboolean ClipPlane
[MAX_CLIP_PLANES
];
681 GLboolean ColorMaterial
;
686 GLboolean Light
[MAX_LIGHTS
];
688 GLboolean LineSmooth
;
689 GLboolean LineStipple
;
690 GLboolean IndexLogicOp
;
691 GLboolean ColorLogicOp
;
692 GLboolean Map1Color4
;
694 GLboolean Map1Normal
;
695 GLboolean Map1TextureCoord1
;
696 GLboolean Map1TextureCoord2
;
697 GLboolean Map1TextureCoord3
;
698 GLboolean Map1TextureCoord4
;
699 GLboolean Map1Vertex3
;
700 GLboolean Map1Vertex4
;
701 GLboolean Map2Color4
;
703 GLboolean Map2Normal
;
704 GLboolean Map2TextureCoord1
;
705 GLboolean Map2TextureCoord2
;
706 GLboolean Map2TextureCoord3
;
707 GLboolean Map2TextureCoord4
;
708 GLboolean Map2Vertex3
;
709 GLboolean Map2Vertex4
;
711 GLboolean PointSmooth
;
712 GLboolean PolygonOffsetPoint
;
713 GLboolean PolygonOffsetLine
;
714 GLboolean PolygonOffsetFill
;
715 GLboolean PolygonSmooth
;
716 GLboolean PolygonStipple
;
724 struct gl_eval_attrib
{
726 GLboolean Map1Color4
;
728 GLboolean Map1Normal
;
729 GLboolean Map1TextureCoord1
;
730 GLboolean Map1TextureCoord2
;
731 GLboolean Map1TextureCoord3
;
732 GLboolean Map1TextureCoord4
;
733 GLboolean Map1Vertex3
;
734 GLboolean Map1Vertex4
;
735 GLboolean Map2Color4
;
737 GLboolean Map2Normal
;
738 GLboolean Map2TextureCoord1
;
739 GLboolean Map2TextureCoord2
;
740 GLboolean Map2TextureCoord3
;
741 GLboolean Map2TextureCoord4
;
742 GLboolean Map2Vertex3
;
743 GLboolean Map2Vertex4
;
744 GLboolean AutoNormal
;
745 /* Map Grid endpoints and divisions */
747 GLfloat MapGrid1u1
, MapGrid1u2
;
748 GLuint MapGrid2un
, MapGrid2vn
;
749 GLfloat MapGrid2u1
, MapGrid2u2
;
750 GLfloat MapGrid2v1
, MapGrid2v2
;
754 struct gl_fog_attrib
{
755 GLboolean Enabled
; /* Fog enabled flag */
756 GLfloat Color
[4]; /* Fog color */
757 GLfloat Density
; /* Density >= 0.0 */
758 GLfloat Start
; /* Start distance in eye coords */
759 GLfloat End
; /* End distance in eye coords */
760 GLfloat Index
; /* Fog index */
761 GLenum Mode
; /* Fog mode */
765 struct gl_hint_attrib
{
766 /* always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE */
767 GLenum PerspectiveCorrection
;
770 GLenum PolygonSmooth
;
775 struct gl_light_attrib
{
776 struct gl_light Light
[MAX_LIGHTS
]; /* Array of lights */
777 struct gl_lightmodel Model
; /* Lighting model */
778 struct gl_material Material
[2]; /* Material 0=front, 1=back */
779 GLboolean Enabled
; /* Lighting enabled flag */
780 GLenum ShadeModel
; /* GL_FLAT or GL_SMOOTH */
781 GLenum ColorMaterialFace
; /* GL_FRONT, BACK or FRONT_AND_BACK */
782 GLenum ColorMaterialMode
; /* GL_AMBIENT, GL_DIFFUSE, etc */
783 GLuint ColorMaterialBitmask
; /* bitmask formed from Face and Mode */
784 GLboolean ColorMaterialEnabled
;
786 /* Derived for optimizations: */
787 struct gl_light
*FirstEnabled
; /* Ptr to 1st enabled light */
788 GLboolean Fast
; /* Use fast shader? */
789 GLfloat BaseColor
[2][4];
793 struct gl_line_attrib
{
794 GLboolean SmoothFlag
; /* GL_LINE_SMOOTH enabled? */
795 GLboolean StippleFlag
; /* GL_LINE_STIPPLE enabled? */
796 GLushort StipplePattern
; /* Stipple pattern */
797 GLint StippleFactor
; /* Stipple repeat factor */
798 GLfloat Width
; /* Line width */
802 struct gl_list_attrib
{
807 struct gl_pixel_attrib
{
809 GLfloat RedBias
, RedScale
; /* Pixel xfer bias & scale values */
810 GLfloat GreenBias
, GreenScale
;
811 GLfloat BlueBias
, BlueScale
;
812 GLfloat AlphaBias
, AlphaScale
;
813 GLfloat DepthBias
, DepthScale
;
816 GLboolean MapColorFlag
;
817 GLboolean MapStencilFlag
;
818 GLfloat ZoomX
; /* Pixel zoom X factor */
819 GLfloat ZoomY
; /* Pixel zoom Y factor */
820 /* TODO: Do the following belong here??? */
821 GLint MapStoSsize
; /* Size of each pixel map */
831 GLint MapStoS
[MAX_PIXEL_MAP_TABLE
]; /* Pixel map tables */
832 GLint MapItoI
[MAX_PIXEL_MAP_TABLE
];
833 GLfloat MapItoR
[MAX_PIXEL_MAP_TABLE
];
834 GLfloat MapItoG
[MAX_PIXEL_MAP_TABLE
];
835 GLfloat MapItoB
[MAX_PIXEL_MAP_TABLE
];
836 GLfloat MapItoA
[MAX_PIXEL_MAP_TABLE
];
837 GLfloat MapRtoR
[MAX_PIXEL_MAP_TABLE
];
838 GLfloat MapGtoG
[MAX_PIXEL_MAP_TABLE
];
839 GLfloat MapBtoB
[MAX_PIXEL_MAP_TABLE
];
840 GLfloat MapAtoA
[MAX_PIXEL_MAP_TABLE
];
844 struct gl_point_attrib
{
845 GLboolean SmoothFlag
; /* True if GL_POINT_SMOOTH is enabled */
846 GLfloat Size
; /* Point size */
850 struct gl_polygon_attrib
{
851 GLenum FrontFace
; /* Either GL_CW or GL_CCW */
852 GLenum FrontMode
; /* Either GL_POINT, GL_LINE or GL_FILL */
853 GLenum BackMode
; /* Either GL_POINT, GL_LINE or GL_FILL */
854 GLboolean Unfilled
; /* True if back or front mode is not GL_FILL */
855 GLboolean CullFlag
; /* Culling on/off flag */
856 GLenum CullFaceMode
; /* Culling mode GL_FRONT or GL_BACK */
857 GLuint CullBits
; /* Used for cull testing */
858 GLboolean SmoothFlag
; /* True if GL_POLYGON_SMOOTH is enabled */
859 GLboolean StippleFlag
; /* True if GL_POLYGON_STIPPLE is enabled */
860 GLfloat OffsetFactor
; /* Polygon offset factor */
861 GLfloat OffsetUnits
; /* Polygon offset units */
862 GLboolean OffsetPoint
; /* Offset in GL_POINT mode? */
863 GLboolean OffsetLine
; /* Offset in GL_LINE mode? */
864 GLboolean OffsetFill
; /* Offset in GL_FILL mode? */
865 GLboolean OffsetAny
; /* OR of OffsetPoint, OffsetLine, OffsetFill */
869 struct gl_scissor_attrib
{
870 GLboolean Enabled
; /* Scissor test enabled? */
871 GLint X
, Y
; /* Lower left corner of box */
872 GLsizei Width
, Height
; /* Size of box */
876 struct gl_stencil_attrib
{
877 GLboolean Enabled
; /* Enabled flag */
878 GLenum Function
; /* Stencil function */
879 GLenum FailFunc
; /* Fail function */
880 GLenum ZPassFunc
; /* Depth buffer pass function */
881 GLenum ZFailFunc
; /* Depth buffer fail function */
882 GLstencil Ref
; /* Reference value */
883 GLstencil ValueMask
; /* Value mask */
884 GLstencil Clear
; /* Clear value */
885 GLstencil WriteMask
; /* Write mask */
898 struct gl_texture_attrib
{
899 GLuint Enabled
; /* Bitwise-OR of TEXTURE_XD values */
900 GLenum EnvMode
; /* GL_MODULATE, GL_DECAL, GL_BLEND */
902 GLuint TexGenEnabled
; /* Bitwise-OR of [QRST]_BIT values */
903 GLenum GenModeS
; /* Tex coord generation mode, either */
904 GLenum GenModeT
; /* GL_OBJECT_LINEAR, or */
905 GLenum GenModeR
; /* GL_EYE_LINEAR, or */
906 GLenum GenModeQ
; /* GL_SPHERE_MAP */
907 GLfloat ObjectPlaneS
[4];
908 GLfloat ObjectPlaneT
[4];
909 GLfloat ObjectPlaneR
[4];
910 GLfloat ObjectPlaneQ
[4];
911 GLfloat EyePlaneS
[4];
912 GLfloat EyePlaneT
[4];
913 GLfloat EyePlaneR
[4];
914 GLfloat EyePlaneQ
[4];
915 struct gl_texture_object
*Current1D
;
916 struct gl_texture_object
*Current2D
;
917 struct gl_texture_object
*Current
; /* = Current1D, 2D or NULL */
918 #ifdef GL_VERSION_1_1
919 struct gl_texture_object
*Proxy1D
;
920 struct gl_texture_object
*Proxy2D
;
926 struct gl_transform_attrib
{
927 GLenum MatrixMode
; /* Matrix mode */
928 GLfloat ClipEquation
[MAX_CLIP_PLANES
][4];
929 GLboolean ClipEnabled
[MAX_CLIP_PLANES
];
930 GLboolean AnyClip
; /* Any ClipEnabled[] true? */
931 GLboolean Normalize
; /* Normalize all normals? */
935 struct gl_viewport_attrib
{
936 GLint X
, Y
; /* position */
937 GLsizei Width
, Height
; /* size */
938 GLfloat Near
, Far
; /* Depth buffer range */
939 GLfloat Sx
, Sy
, Sz
; /* NDC to WinCoord scaling */
940 GLfloat Tx
, Ty
, Tz
; /* NDC to WinCoord translation */
944 /* For the attribute stack: */
945 struct gl_attrib_node
{
948 struct gl_attrib_node
*next
;
954 * Client pixel packing/unpacking attributes
956 struct gl_pixelstore_attrib
{
967 * Client vertex array attributes
969 struct gl_array_attrib
{
972 GLsizei VertexStride
; /* user-specified stride */
973 GLsizei VertexStrideB
; /* actual stride in bytes */
975 GLboolean VertexEnabled
;
978 GLsizei NormalStride
; /* user-specified stride */
979 GLsizei NormalStrideB
; /* actual stride in bytes */
981 GLboolean NormalEnabled
;
985 GLsizei ColorStride
; /* user-specified stride */
986 GLsizei ColorStrideB
; /* actual stride in bytes */
988 GLboolean ColorEnabled
;
991 GLsizei IndexStride
; /* user-specified stride */
992 GLsizei IndexStrideB
; /* actual stride in bytes */
994 GLboolean IndexEnabled
;
998 GLsizei TexCoordStride
; /* user-specified stride */
999 GLsizei TexCoordStrideB
; /* actual stride in bytes */
1001 GLboolean TexCoordEnabled
;
1003 GLsizei EdgeFlagStride
; /* user-specified stride */
1004 GLsizei EdgeFlagStrideB
; /* actual stride in bytes */
1005 GLboolean
*EdgeFlagPtr
;
1006 GLboolean EdgeFlagEnabled
;
1011 struct gl_feedback
{
1021 struct gl_selection
{
1023 GLuint BufferSize
; /* size of SelectBuffer */
1024 GLuint BufferCount
; /* number of values in SelectBuffer */
1025 GLuint Hits
; /* number of records in SelectBuffer */
1026 GLuint NameStackDepth
;
1027 GLuint NameStack
[MAX_NAME_STACK_DEPTH
];
1029 GLfloat HitMinZ
, HitMaxZ
;
1035 * 1-D Evaluator control points
1038 GLuint Order
; /* Number of control points */
1040 GLfloat
*Points
; /* Points to contiguous control points */
1041 GLboolean Retain
; /* Reference counter */
1046 * 2-D Evaluator control points
1049 GLuint Uorder
; /* Number of control points in U dimension */
1050 GLuint Vorder
; /* Number of control points in V dimension */
1053 GLfloat
*Points
; /* Points to contiguous control points */
1054 GLboolean Retain
; /* Reference counter */
1059 * All evalutator control points
1061 struct gl_evaluators
{
1063 struct gl_1d_map Map1Vertex3
;
1064 struct gl_1d_map Map1Vertex4
;
1065 struct gl_1d_map Map1Index
;
1066 struct gl_1d_map Map1Color4
;
1067 struct gl_1d_map Map1Normal
;
1068 struct gl_1d_map Map1Texture1
;
1069 struct gl_1d_map Map1Texture2
;
1070 struct gl_1d_map Map1Texture3
;
1071 struct gl_1d_map Map1Texture4
;
1074 struct gl_2d_map Map2Vertex3
;
1075 struct gl_2d_map Map2Vertex4
;
1076 struct gl_2d_map Map2Index
;
1077 struct gl_2d_map Map2Color4
;
1078 struct gl_2d_map Map2Normal
;
1079 struct gl_2d_map Map2Texture1
;
1080 struct gl_2d_map Map2Texture2
;
1081 struct gl_2d_map Map2Texture3
;
1082 struct gl_2d_map Map2Texture4
;
1087 /* Texture object record */
1088 struct gl_texture_object
{
1089 GLint RefCount
; /* reference count */
1090 GLuint Name
; /* an unsigned integer */
1091 GLuint Dimensions
; /* 1 or 2 or 3 */
1092 GLfloat Priority
; /* in [0,1] */
1093 GLint BorderColor
[4]; /* as integers in [0,255] */
1094 GLenum WrapS
; /* GL_CLAMP or GL_REPEAT */
1095 GLenum WrapT
; /* GL_CLAMP or GL_REPEAT */
1096 GLenum WrapR
; /* GL_CLAMP or GL_REPEAT */
1097 GLenum MinFilter
; /* minification filter */
1098 GLenum MagFilter
; /* magnification filter */
1099 GLfloat MinMagThresh
; /* min/mag threshold */
1100 struct gl_texture_image
*Image
[MAX_TEXTURE_LEVELS
];
1102 /* GL_EXT_paletted_texture */
1103 GLubyte Palette
[MAX_TEXTURE_PALETTE_SIZE
*4];
1105 GLenum PaletteIntFormat
;
1106 GLenum PaletteFormat
;
1108 /* For device driver: */
1109 GLboolean Dirty
; /* Set when any texobj state changes */
1110 void *DriverData
; /* Arbitrary device driver data */
1112 GLboolean Complete
; /* Complete set of images? */
1113 TextureSampleFunc SampleFunc
;
1114 struct gl_texture_object
*Next
; /* Next in linked list */
1120 * State which can be shared by multiple contexts:
1122 struct gl_shared_state
{
1123 GLint RefCount
; /* Reference count */
1124 struct HashTable
*DisplayList
; /* Display lists hash table */
1125 struct HashTable
*TexObjects
; /* Texture objects hash table */
1126 struct gl_texture_object
*TexObjectList
;/* Linked list of texture objects */
1127 struct gl_texture_object
*Default1D
; /* Default texture objects */
1128 struct gl_texture_object
*Default2D
;
1134 * Describes the color, depth, stencil and accum buffer parameters.
1137 GLboolean RGBAflag
; /* Is frame buffer in RGBA mode, not CI? */
1138 GLboolean DBflag
; /* Is color buffer double buffered? */
1140 GLfloat RedScale
; /* These values are used to scale color */
1141 GLfloat GreenScale
; /* components from the range [0,1] to */
1142 GLfloat BlueScale
; /* integer values. It should be the case */
1143 GLfloat AlphaScale
; /* that scale = 2^bits - 1 where bits is */
1144 /* the number of bits for the component */
1145 /* in the frame buffer. */
1146 GLboolean EightBitColor
;/* TRUE if all the above scales are 255.0 */
1148 GLfloat InvRedScale
; /* = 1 / RedScale */
1149 GLfloat InvGreenScale
; /* = 1 / GreenScale */
1150 GLfloat InvBlueScale
; /* = 1 / BlueScale */
1151 GLfloat InvAlphaScale
; /* = 1 / AlphaScale */
1153 GLint RedBits
; /* Bits per color component */
1158 GLint IndexBits
; /* Bits/pixel if in color index mode */
1160 GLint AccumBits
; /* Number of bits per color channel, or 0 */
1161 GLint DepthBits
; /* Number of bits in depth buffer, or 0 */
1162 GLint StencilBits
; /* Number of bits in stencil buffer, or 0 */
1164 /* Software alpha planes: */
1165 GLboolean FrontAlphaEnabled
;
1166 GLboolean BackAlphaEnabled
;
1172 * A "frame buffer" is a color buffer and its optional ancillary buffers:
1173 * depth, accum, stencil, and software-simulated alpha buffers.
1175 struct gl_frame_buffer
{
1176 GLvisual
*Visual
; /* The corresponding visual */
1178 GLint Width
; /* Width of frame buffer in pixels */
1179 GLint Height
; /* Height of frame buffer in pixels */
1181 GLdepth
*Depth
; /* array [Width*Height] of GLdepth values */
1183 /* Stencil buffer */
1184 GLstencil
*Stencil
; /* array [Width*Height] of GLstencil values */
1186 /* Accumulation buffer */
1187 GLaccum
*Accum
; /* array [4*Width*Height] of GLaccum values */
1189 /* Software alpha planes: */
1190 GLubyte
*FrontAlpha
; /* array [Width*Height] of GLubyte */
1191 GLubyte
*BackAlpha
; /* array [Width*Height] of GLubyte */
1192 GLubyte
*Alpha
; /* Points to front or back alpha buffer */
1194 /* Drawing bounds: intersection of window size and scissor box */
1195 GLint Xmin
, Xmax
, Ymin
, Ymax
;
1201 * Bitmasks to indicate what auxillary information must be interpolated
1202 * when clipping (ClipMask).
1204 #define CLIP_FCOLOR_BIT 0x01
1205 #define CLIP_BCOLOR_BIT 0x02
1206 #define CLIP_FINDEX_BIT 0x04
1207 #define CLIP_BINDEX_BIT 0x08
1208 #define CLIP_TEXTURE_BIT 0x10
1213 * Bitmasks to indicate which rasterization options are enabled (RasterMask)
1215 #define ALPHATEST_BIT 0x001 /* Alpha-test pixels */
1216 #define BLEND_BIT 0x002 /* Blend pixels */
1217 #define DEPTH_BIT 0x004 /* Depth-test pixels */
1218 #define FOG_BIT 0x008 /* Per-pixel fog */
1219 #define LOGIC_OP_BIT 0x010 /* Apply logic op in software */
1220 #define SCISSOR_BIT 0x020 /* Scissor pixels */
1221 #define STENCIL_BIT 0x040 /* Stencil pixels */
1222 #define MASKING_BIT 0x080 /* Do glColorMask() or glIndexMask() */
1223 #define ALPHABUF_BIT 0x100 /* Using software alpha buffer */
1224 #define WINCLIP_BIT 0x200 /* Clip pixels/primitives to window */
1225 #define FRONT_AND_BACK_BIT 0x400 /* Write to front and back buffers */
1226 #define NO_DRAW_BIT 0x800 /* Don't write any pixels */
1230 * Bits to indicate what state has to be updated (NewState)
1232 #define NEW_LIGHTING 0x1
1233 #define NEW_RASTER_OPS 0x2
1234 #define NEW_TEXTURING 0x4
1235 #define NEW_POLYGON 0x8
1240 * Different kinds of 4x4 transformation matrices:
1242 #define MATRIX_GENERAL 0 /* general 4x4 matrix */
1243 #define MATRIX_IDENTITY 1 /* identity matrix */
1244 #define MATRIX_ORTHO 2 /* orthographic projection matrix */
1245 #define MATRIX_PERSPECTIVE 3 /* perspective projection matrix */
1246 #define MATRIX_2D 4 /* 2-D transformation */
1247 #define MATRIX_2D_NO_ROT 5 /* 2-D scale & translate only */
1248 #define MATRIX_3D 6 /* 3-D transformation */
1252 * Forward declaration of display list datatypes:
1255 typedef union node Node
;
1260 * The library context:
1264 /* State possibly shared with other contexts in the address space */
1265 struct gl_shared_state
*Shared
;
1267 /* API function pointer tables */
1268 struct gl_api_table API
; /* For api.c */
1269 struct gl_api_table Save
; /* Display list save funcs */
1270 struct gl_api_table Exec
; /* Execute funcs */
1273 GLframebuffer
*Buffer
;
1275 /* Driver function pointer table */
1276 struct dd_function_table Driver
;
1278 void *DriverCtx
; /* Points to device driver context/state */
1279 void *DriverMgrCtx
; /* Points to device driver manager (optional)*/
1281 /* Modelview matrix and stack */
1282 GLboolean NewModelViewMatrix
;
1283 GLuint ModelViewMatrixType
; /* = one of MATRIX_* values */
1284 GLfloat ModelViewMatrix
[16];
1285 GLfloat ModelViewInv
[16]; /* Inverse of ModelViewMatrix */
1286 GLuint ModelViewStackDepth
;
1287 GLfloat ModelViewStack
[MAX_MODELVIEW_STACK_DEPTH
][16];
1289 /* Projection matrix and stack */
1290 GLboolean NewProjectionMatrix
;
1291 GLuint ProjectionMatrixType
; /* = one of MATRIX_* values */
1292 GLfloat ProjectionMatrix
[16];
1293 GLuint ProjectionStackDepth
;
1294 GLfloat ProjectionStack
[MAX_PROJECTION_STACK_DEPTH
][16];
1295 GLfloat NearFarStack
[MAX_PROJECTION_STACK_DEPTH
][2];
1297 /* Texture matrix and stack */
1298 GLboolean NewTextureMatrix
;
1299 GLuint TextureMatrixType
; /* = one of MATRIX_* values */
1300 GLfloat TextureMatrix
[16];
1301 GLuint TextureStackDepth
;
1302 GLfloat TextureStack
[MAX_TEXTURE_STACK_DEPTH
][16];
1305 GLuint CallDepth
; /* Current recursion calling depth */
1306 GLboolean ExecuteFlag
; /* Execute GL commands? */
1307 GLboolean CompileFlag
; /* Compile GL commands into display list? */
1308 Node
*CurrentListPtr
; /* Head of list being compiled */
1309 GLuint CurrentListNum
; /* Number of the list being compiled */
1310 Node
*CurrentBlock
; /* Pointer to current block of nodes */
1311 GLuint CurrentPos
; /* Index into current block of nodes */
1313 /* Renderer attribute stack */
1314 GLuint AttribStackDepth
;
1315 struct gl_attrib_node
*AttribStack
[MAX_ATTRIB_STACK_DEPTH
];
1317 /* Renderer attribute groups */
1318 struct gl_accum_attrib Accum
;
1319 struct gl_colorbuffer_attrib Color
;
1320 struct gl_current_attrib Current
;
1321 struct gl_depthbuffer_attrib Depth
;
1322 struct gl_eval_attrib Eval
;
1323 struct gl_fog_attrib Fog
;
1324 struct gl_hint_attrib Hint
;
1325 struct gl_light_attrib Light
;
1326 struct gl_line_attrib Line
;
1327 struct gl_list_attrib List
;
1328 struct gl_pixel_attrib Pixel
;
1329 struct gl_point_attrib Point
;
1330 struct gl_polygon_attrib Polygon
;
1331 GLuint PolygonStipple
[32];
1332 struct gl_scissor_attrib Scissor
;
1333 struct gl_stencil_attrib Stencil
;
1334 struct gl_texture_attrib Texture
;
1335 struct gl_transform_attrib Transform
;
1336 struct gl_viewport_attrib Viewport
;
1338 /* Client attribute stack */
1339 GLuint ClientAttribStackDepth
;
1340 struct gl_attrib_node
*ClientAttribStack
[MAX_CLIENT_ATTRIB_STACK_DEPTH
];
1341 /* Client attribute groups */
1342 struct gl_array_attrib Array
; /* Vertex arrays */
1343 struct gl_pixelstore_attrib Pack
; /* Pixel packing */
1344 struct gl_pixelstore_attrib Unpack
; /* Pixel unpacking */
1346 struct gl_evaluators EvalMap
; /* All evaluators */
1347 struct gl_feedback Feedback
; /* Feedback */
1348 struct gl_selection Select
; /* Selection */
1350 GLenum ErrorValue
; /* Last error code */
1352 GLboolean DirectContext
; /* Important for real GLX */
1355 GLuint NewState
; /* bitwise OR of NEW_* flags */
1356 GLenum RenderMode
; /* either GL_RENDER, GL_SELECT, GL_FEEDBACK */
1357 GLenum Primitive
; /* glBegin primitive or GL_BITMAP */
1358 GLuint StippleCounter
; /* Line stipple counter */
1359 GLuint ClipMask
; /* OR of CLIP_* values from above */
1360 interp_func ClipInterpAuxFunc
; /* The auxiliary interpolation function */
1361 GLuint RasterMask
; /* OR of rasterization flags */
1362 GLboolean LightTwoSide
; /* Compute two-sided lighting? */
1363 GLboolean DirectTriangles
;/* Directly call (*ctx->TriangleFunc) ? */
1364 GLfloat PolygonZoffset
; /* Z offset for GL_FILL polygons */
1365 GLfloat LineZoffset
; /* Z offset for GL_LINE polygons */
1366 GLfloat PointZoffset
; /* Z offset for GL_POINT polygons */
1367 GLboolean NeedNormals
; /* Are vertex normal vectors needed? */
1368 GLboolean FastDrawPixels
;/* Use optimized glDrawPixels? */
1369 GLboolean MutablePixels
; /* Can rasterization change pixel's color? */
1370 GLboolean MonoPixels
; /* Are all pixels likely to be same color? */
1372 /* Current Primitive functions */
1373 points_func PointsFunc
;
1375 triangle_func TriangleFunc
;
1379 /* The vertex buffer being used by this context */
1380 struct vertex_buffer
* VB
;
1382 /* The pixel buffer being used by this context */
1383 struct pixel_buffer
* PB
;
1386 /* Performance measurements */
1387 GLuint BeginEndCount
; /* number of glBegin/glEnd pairs */
1388 GLdouble BeginEndTime
; /* seconds spent between glBegin/glEnd */
1389 GLuint VertexCount
; /* number of vertices processed */
1390 GLdouble VertexTime
; /* total time in seconds */
1391 GLuint PointCount
; /* number of points rendered */
1392 GLdouble PointTime
; /* total time in seconds */
1393 GLuint LineCount
; /* number of lines rendered */
1394 GLdouble LineTime
; /* total time in seconds */
1395 GLuint PolygonCount
; /* number of polygons rendered */
1396 GLdouble PolygonTime
; /* total time in seconds */
1397 GLuint ClearCount
; /* number of glClear calls */
1398 GLdouble ClearTime
; /* seconds spent in glClear */
1399 GLuint SwapCount
; /* number of swap-buffer calls */
1400 GLdouble SwapTime
; /* seconds spent in swap-buffers */
1403 /* For debugging/development only */
1406 /* Dither disable via MESA_NO_DITHER env var */