home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 5 / MA_Cover_5.iso / ppc / mesa / src / get.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-31  |  97.3 KB  |  3,353 lines

  1. /* $Id: get.c,v 1.16 1997/10/29 01:29:09 brianp Exp $ */
  2.  
  3. /*
  4.  * Mesa 3-D graphics library
  5.  * Version:  2.5
  6.  * Copyright (C) 1995-1997  Brian Paul
  7.  *
  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.
  12.  *
  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.
  17.  *
  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.
  21.  */
  22.  
  23.  
  24. /*
  25.  * $Log: get.c,v $
  26.  * Revision 1.16  1997/10/29 01:29:09  brianp
  27.  * added GL_EXT_point_parameters extension from Daniel Barrero
  28.  *
  29.  * Revision 1.15  1997/10/16 01:59:08  brianp
  30.  * added GL_EXT_shared_texture_palette extension
  31.  *
  32.  * Revision 1.14  1997/07/24 01:25:18  brianp
  33.  * changed precompiled header symbol from PCH to PC_HEADER
  34.  *
  35.  * Revision 1.13  1997/06/20 02:00:27  brianp
  36.  * replaced Current.IntColor with Current.ByteColor
  37.  *
  38.  * Revision 1.12  1997/05/28 03:24:54  brianp
  39.  * added precompiled header (PCH) support
  40.  *
  41.  * Revision 1.11  1997/05/26 21:13:42  brianp
  42.  * rewrite code for GL_RED/GREEN/BLUE/ALPHA_BITS
  43.  *
  44.  * Revision 1.10  1997/04/26 04:33:11  brianp
  45.  * glGet(accum, stencil, depth bits) always returned non-zero values- wrong
  46.  *
  47.  * Revision 1.9  1997/03/11 00:57:38  brianp
  48.  * removed redundant GL_POLYGON_OFFSET_FACTOR_EXT cases
  49.  *
  50.  * Revision 1.8  1997/02/10 21:15:59  brianp
  51.  * renamed GL_TEXTURE_BINDING_3D_EXT to GL_TEXTURE_3D_BINDING_EXT
  52.  *
  53.  * Revision 1.7  1997/02/09 19:53:43  brianp
  54.  * now use TEXTURE_xD enable constants
  55.  *
  56.  * Revision 1.6  1997/02/09 18:49:23  brianp
  57.  * added GL_EXT_texture3D support
  58.  *
  59.  * Revision 1.5  1997/01/30 21:05:20  brianp
  60.  * moved in gl_GetPointerv() from varray.c
  61.  * added some missing GLenums to the glGet*() functions
  62.  *
  63.  * Revision 1.4  1997/01/28 22:13:42  brianp
  64.  * now there's separate state for CI and RGBA logic op enabled
  65.  *
  66.  * Revision 1.3  1996/10/11 03:43:34  brianp
  67.  * replaced old texture _EXT symbols
  68.  * added GL_EXT_polygon_offset stuff
  69.  *
  70.  * Revision 1.2  1996/09/15 14:17:30  brianp
  71.  * now use GLframebuffer and GLvisual
  72.  *
  73.  * Revision 1.1  1996/09/13 01:38:16  brianp
  74.  * Initial revision
  75.  *
  76.  */
  77.  
  78.  
  79. #ifdef PC_HEADER
  80. #include "all.h"
  81. #else
  82. #include <string.h>
  83. #include "context.h"
  84. #include "get.h"
  85. #include "dlist.h"
  86. #include "macros.h"
  87. #include "types.h"
  88. #endif
  89.  
  90.  
  91.  
  92. #define FLOAT_TO_BOOL(X)        ( (X)==0.0F ? GL_FALSE : GL_TRUE )
  93. #define INT_TO_BOOL(I)          ( (I)==0 ? GL_FALSE : GL_TRUE )
  94. #define ENUM_TO_BOOL(E)         ( (E)==0 ? GL_FALSE : GL_TRUE )
  95. /*#define FLOAT_TO_INT(I)               ((GLint) (I * 2147483647.0))*/
  96. #define BOOL_TO_FLOAT(X)        ( (GLfloat)(GLint) (X) )
  97. #define BOOL_TO_DOUBLE(X)        ( (GLdouble)(GLint) (X) )
  98.  
  99.  
  100.  
  101. void gl_GetBooleanv( GLcontext *ctx, GLenum pname, GLboolean *params )
  102. {
  103.    GLuint i;
  104.  
  105.    if (INSIDE_BEGIN_END(ctx)) {
  106.       gl_error( ctx, GL_INVALID_OPERATION, "glGetBooleanv" );
  107.       return;
  108.    }
  109.  
  110.    switch (pname) {
  111.       case GL_ACCUM_RED_BITS:
  112.       case GL_ACCUM_GREEN_BITS:
  113.       case GL_ACCUM_BLUE_BITS:
  114.       case GL_ACCUM_ALPHA_BITS:
  115.      *params = INT_TO_BOOL(ctx->Visual->AccumBits);
  116.      break;
  117.       case GL_ACCUM_CLEAR_VALUE:
  118.      params[0] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[0]);
  119.      params[1] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[1]);
  120.      params[2] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[2]);
  121.      params[3] = FLOAT_TO_BOOL(ctx->Accum.ClearColor[3]);
  122.      break;
  123.       case GL_ALPHA_BIAS:
  124.      *params = FLOAT_TO_BOOL(ctx->Pixel.AlphaBias);
  125.      break;
  126.       case GL_ALPHA_BITS:
  127.      *params = INT_TO_BOOL(ctx->Visual->AlphaBits);
  128.      break;
  129.       case GL_ALPHA_SCALE:
  130.      *params = FLOAT_TO_BOOL(ctx->Pixel.AlphaScale);
  131.      break;
  132.       case GL_ALPHA_TEST:
  133.      *params = ctx->Color.AlphaEnabled;
  134.      break;
  135.       case GL_ALPHA_TEST_FUNC:
  136.      *params = ENUM_TO_BOOL(ctx->Color.AlphaFunc);
  137.      break;
  138.       case GL_ALPHA_TEST_REF:
  139.      *params = FLOAT_TO_BOOL(ctx->Color.AlphaRef);
  140.      break;
  141.       case GL_ATTRIB_STACK_DEPTH:
  142.      *params = INT_TO_BOOL(ctx->AttribStackDepth);
  143.      break;
  144.       case GL_AUTO_NORMAL:
  145.      *params = ctx->Eval.AutoNormal;
  146.      break;
  147.       case GL_AUX_BUFFERS:
  148.      *params = (NUM_AUX_BUFFERS) ? GL_TRUE : GL_FALSE;
  149.      break;
  150.       case GL_BLEND:
  151.      *params = ctx->Color.BlendEnabled;
  152.      break;
  153.       case GL_BLEND_DST:
  154.      *params = ENUM_TO_BOOL(ctx->Color.BlendDst);
  155.      break;
  156.       case GL_BLEND_SRC:
  157.      *params = ENUM_TO_BOOL(ctx->Color.BlendSrc);
  158.      break;
  159.       case GL_BLEND_EQUATION_EXT:
  160.      *params = ENUM_TO_BOOL( ctx->Color.BlendEquation );
  161.      break;
  162.       case GL_BLEND_COLOR_EXT:
  163.      params[0] = FLOAT_TO_BOOL( ctx->Color.BlendColor[0] );
  164.      params[1] = FLOAT_TO_BOOL( ctx->Color.BlendColor[1] );
  165.      params[2] = FLOAT_TO_BOOL( ctx->Color.BlendColor[2] );
  166.      params[3] = FLOAT_TO_BOOL( ctx->Color.BlendColor[3] );
  167.      break;
  168.       case GL_BLUE_BIAS:
  169.      *params = FLOAT_TO_BOOL(ctx->Pixel.BlueBias);
  170.      break;
  171.       case GL_BLUE_BITS:
  172.      *params = INT_TO_BOOL( ctx->Visual->BlueBits );
  173.      break;
  174.       case GL_BLUE_SCALE:
  175.      *params = FLOAT_TO_BOOL(ctx->Pixel.BlueScale);
  176.      break;
  177.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  178.      *params = INT_TO_BOOL(ctx->ClientAttribStackDepth);
  179.      break;
  180.       case GL_CLIP_PLANE0:
  181.       case GL_CLIP_PLANE1:
  182.       case GL_CLIP_PLANE2:
  183.       case GL_CLIP_PLANE3:
  184.       case GL_CLIP_PLANE4:
  185.       case GL_CLIP_PLANE5:
  186.      *params = ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  187.      break;
  188.       case GL_COLOR_CLEAR_VALUE:
  189.      params[0] = FLOAT_TO_BOOL(ctx->Color.ClearColor[0]);
  190.      params[1] = FLOAT_TO_BOOL(ctx->Color.ClearColor[1]);
  191.      params[2] = FLOAT_TO_BOOL(ctx->Color.ClearColor[2]);
  192.      params[3] = FLOAT_TO_BOOL(ctx->Color.ClearColor[3]);
  193.      break;
  194.       case GL_COLOR_MATERIAL:
  195.      *params = ctx->Light.ColorMaterialEnabled;
  196.      break;
  197.       case GL_COLOR_MATERIAL_FACE:
  198.      *params = ENUM_TO_BOOL(ctx->Light.ColorMaterialFace);
  199.      break;
  200.       case GL_COLOR_MATERIAL_PARAMETER:
  201.      *params = ENUM_TO_BOOL(ctx->Light.ColorMaterialMode);
  202.      break;
  203.       case GL_COLOR_WRITEMASK:
  204.      params[0] = (ctx->Color.ColorMask & 8) ? GL_TRUE : GL_FALSE;
  205.      params[1] = (ctx->Color.ColorMask & 4) ? GL_TRUE : GL_FALSE;
  206.      params[2] = (ctx->Color.ColorMask & 2) ? GL_TRUE : GL_FALSE;
  207.      params[3] = (ctx->Color.ColorMask & 1) ? GL_TRUE : GL_FALSE;
  208.      break;
  209.       case GL_CULL_FACE:
  210.      *params = ctx->Polygon.CullFlag;
  211.      break;
  212.       case GL_CULL_FACE_MODE:
  213.      *params = ENUM_TO_BOOL(ctx->Polygon.CullFaceMode);
  214.      break;
  215.       case GL_CURRENT_COLOR:
  216.      params[0] = INT_TO_BOOL(ctx->Current.ByteColor[0]);
  217.      params[1] = INT_TO_BOOL(ctx->Current.ByteColor[1]);
  218.      params[2] = INT_TO_BOOL(ctx->Current.ByteColor[2]);
  219.      params[3] = INT_TO_BOOL(ctx->Current.ByteColor[3]);
  220.      break;
  221.       case GL_CURRENT_INDEX:
  222.      *params = INT_TO_BOOL(ctx->Current.Index);
  223.      break;
  224.       case GL_CURRENT_NORMAL:
  225.      params[0] = FLOAT_TO_BOOL(ctx->Current.Normal[0]);
  226.      params[1] = FLOAT_TO_BOOL(ctx->Current.Normal[1]);
  227.      params[2] = FLOAT_TO_BOOL(ctx->Current.Normal[2]);
  228.      break;
  229.       case GL_CURRENT_RASTER_COLOR:
  230.      params[0] = FLOAT_TO_BOOL(ctx->Current.RasterColor[0]);
  231.      params[1] = FLOAT_TO_BOOL(ctx->Current.RasterColor[1]);
  232.      params[2] = FLOAT_TO_BOOL(ctx->Current.RasterColor[2]);
  233.      params[3] = FLOAT_TO_BOOL(ctx->Current.RasterColor[3]);
  234.      break;
  235.       case GL_CURRENT_RASTER_DISTANCE:
  236.      *params = FLOAT_TO_BOOL(ctx->Current.RasterDistance);
  237.      break;
  238.       case GL_CURRENT_RASTER_INDEX:
  239.      *params = FLOAT_TO_BOOL(ctx->Current.RasterIndex);
  240.      break;
  241.       case GL_CURRENT_RASTER_POSITION:
  242.      params[0] = FLOAT_TO_BOOL(ctx->Current.RasterPos[0]);
  243.      params[1] = FLOAT_TO_BOOL(ctx->Current.RasterPos[1]);
  244.      params[2] = FLOAT_TO_BOOL(ctx->Current.RasterPos[2]);
  245.      params[3] = FLOAT_TO_BOOL(ctx->Current.RasterPos[3]);
  246.      break;
  247.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  248.      params[0] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[0]);
  249.      params[1] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[1]);
  250.      params[2] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[2]);
  251.      params[3] = FLOAT_TO_BOOL(ctx->Current.RasterTexCoord[3]);
  252.      break;
  253.       case GL_CURRENT_RASTER_POSITION_VALID:
  254.      *params = ctx->Current.RasterPosValid;
  255.      break;
  256.       case GL_CURRENT_TEXTURE_COORDS:
  257.      params[0] = FLOAT_TO_BOOL(ctx->Current.TexCoord[0]);
  258.      params[1] = FLOAT_TO_BOOL(ctx->Current.TexCoord[1]);
  259.      params[2] = FLOAT_TO_BOOL(ctx->Current.TexCoord[2]);
  260.      params[3] = FLOAT_TO_BOOL(ctx->Current.TexCoord[3]);
  261.      break;
  262.       case GL_DEPTH_BIAS:
  263.      *params = FLOAT_TO_BOOL(ctx->Pixel.DepthBias);
  264.      break;
  265.       case GL_DEPTH_BITS:
  266.      *params = INT_TO_BOOL(ctx->Visual->DepthBits);
  267.      break;
  268.       case GL_DEPTH_CLEAR_VALUE:
  269.      *params = FLOAT_TO_BOOL(ctx->Depth.Clear);
  270.      break;
  271.       case GL_DEPTH_FUNC:
  272.      *params = ENUM_TO_BOOL(ctx->Depth.Func);
  273.      break;
  274.       case GL_DEPTH_RANGE:
  275.      params[0] = FLOAT_TO_BOOL(ctx->Viewport.Near);
  276.      params[1] = FLOAT_TO_BOOL(ctx->Viewport.Far);
  277.      break;
  278.       case GL_DEPTH_SCALE:
  279.      *params = FLOAT_TO_BOOL(ctx->Pixel.DepthScale);
  280.      break;
  281.       case GL_DEPTH_TEST:
  282.      *params = ctx->Depth.Test;
  283.      break;
  284.       case GL_DEPTH_WRITEMASK:
  285.      *params = ctx->Depth.Mask;
  286.      break;
  287.       case GL_DITHER:
  288.      *params = ctx->Color.DitherFlag;
  289.      break;
  290.       case GL_DOUBLEBUFFER:
  291.      *params = ctx->Visual->DBflag;
  292.      break;
  293.       case GL_DRAW_BUFFER:
  294.      *params = ENUM_TO_BOOL(ctx->Color.DrawBuffer);
  295.      break;
  296.       case GL_EDGE_FLAG:
  297.      *params = ctx->Current.EdgeFlag;
  298.      break;
  299.       case GL_FEEDBACK_BUFFER_SIZE:
  300.      /* TODO: is this right?  Or, return number of entries in buffer? */
  301.      *params = INT_TO_BOOL(ctx->Feedback.BufferSize);
  302.      break;
  303.       case GL_FEEDBACK_BUFFER_TYPE:
  304.      *params = INT_TO_BOOL(ctx->Feedback.Type);
  305.      break;
  306.       case GL_FOG:
  307.      *params = ctx->Fog.Enabled;
  308.      break;
  309.       case GL_FOG_COLOR:
  310.      params[0] = FLOAT_TO_BOOL(ctx->Fog.Color[0]);
  311.      params[1] = FLOAT_TO_BOOL(ctx->Fog.Color[1]);
  312.      params[2] = FLOAT_TO_BOOL(ctx->Fog.Color[2]);
  313.      params[3] = FLOAT_TO_BOOL(ctx->Fog.Color[3]);
  314.      break;
  315.       case GL_FOG_DENSITY:
  316.      *params = FLOAT_TO_BOOL(ctx->Fog.Density);
  317.      break;
  318.       case GL_FOG_END:
  319.      *params = FLOAT_TO_BOOL(ctx->Fog.End);
  320.      break;
  321.       case GL_FOG_HINT:
  322.      *params = ENUM_TO_BOOL(ctx->Hint.Fog);
  323.      break;
  324.       case GL_FOG_INDEX:
  325.      *params = FLOAT_TO_BOOL(ctx->Fog.Index);
  326.      break;
  327.       case GL_FOG_MODE:
  328.      *params = ENUM_TO_BOOL(ctx->Fog.Mode);
  329.      break;
  330.       case GL_FOG_START:
  331.      *params = FLOAT_TO_BOOL(ctx->Fog.End);
  332.      break;
  333.       case GL_FRONT_FACE:
  334.      *params = ENUM_TO_BOOL(ctx->Polygon.FrontFace);
  335.      break;
  336.       case GL_GREEN_BIAS:
  337.      *params = FLOAT_TO_BOOL(ctx->Pixel.GreenBias);
  338.      break;
  339.       case GL_GREEN_BITS:
  340.      *params = INT_TO_BOOL( ctx->Visual->GreenBits );
  341.      break;
  342.       case GL_GREEN_SCALE:
  343.      *params = FLOAT_TO_BOOL(ctx->Pixel.GreenScale);
  344.      break;
  345.       case GL_INDEX_BITS:
  346.      *params = INT_TO_BOOL( ctx->Visual->IndexBits );
  347.      break;
  348.       case GL_INDEX_CLEAR_VALUE:
  349.      *params = INT_TO_BOOL(ctx->Color.ClearIndex);
  350.      break;
  351.       case GL_INDEX_MODE:
  352.      *params = ctx->Visual->RGBAflag ? GL_FALSE : GL_TRUE;
  353.      break;
  354.       case GL_INDEX_OFFSET:
  355.      *params = INT_TO_BOOL(ctx->Pixel.IndexOffset);
  356.      break;
  357.       case GL_INDEX_SHIFT:
  358.      *params = INT_TO_BOOL(ctx->Pixel.IndexShift);
  359.      break;
  360.       case GL_INDEX_WRITEMASK:
  361.      *params = INT_TO_BOOL(ctx->Color.IndexMask);
  362.      break;
  363.       case GL_LIGHT0:
  364.       case GL_LIGHT1:
  365.       case GL_LIGHT2:
  366.       case GL_LIGHT3:
  367.       case GL_LIGHT4:
  368.       case GL_LIGHT5:
  369.       case GL_LIGHT6:
  370.       case GL_LIGHT7:
  371.      *params = ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  372.      break;
  373.       case GL_LIGHTING:
  374.      *params = ctx->Light.Enabled;
  375.      break;
  376.       case GL_LIGHT_MODEL_AMBIENT:
  377.      params[0] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[0]);
  378.      params[1] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[1]);
  379.      params[2] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[2]);
  380.      params[3] = FLOAT_TO_BOOL(ctx->Light.Model.Ambient[3]);
  381.      break;
  382.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  383.      *params = ctx->Light.Model.LocalViewer;
  384.      break;
  385.       case GL_LIGHT_MODEL_TWO_SIDE:
  386.      *params = ctx->Light.Model.TwoSide;
  387.      break;
  388.       case GL_LINE_SMOOTH:
  389.      *params = ctx->Line.SmoothFlag;
  390.      break;
  391.       case GL_LINE_SMOOTH_HINT:
  392.      *params = ENUM_TO_BOOL(ctx->Hint.LineSmooth);
  393.      break;
  394.       case GL_LINE_STIPPLE:
  395.      *params = ctx->Line.StippleFlag;
  396.      break;
  397.       case GL_LINE_STIPPLE_PATTERN:
  398.      *params = INT_TO_BOOL(ctx->Line.StipplePattern);
  399.      break;
  400.       case GL_LINE_STIPPLE_REPEAT:
  401.      *params = INT_TO_BOOL(ctx->Line.StippleFactor);
  402.      break;
  403.       case GL_LINE_WIDTH:
  404.      *params = FLOAT_TO_BOOL(ctx->Line.Width);
  405.      break;
  406.       case GL_LINE_WIDTH_GRANULARITY:
  407.      *params = FLOAT_TO_BOOL(LINE_WIDTH_GRANULARITY);
  408.      break;
  409.       case GL_LINE_WIDTH_RANGE:
  410.      params[0] = FLOAT_TO_BOOL(MIN_LINE_WIDTH);
  411.      params[1] = FLOAT_TO_BOOL(MAX_LINE_WIDTH);
  412.      break;
  413.       case GL_LIST_BASE:
  414.      *params = INT_TO_BOOL(ctx->List.ListBase);
  415.      break;
  416.       case GL_LIST_INDEX:
  417.      *params = INT_TO_BOOL( gl_list_index() );
  418.      break;
  419.       case GL_LIST_MODE:
  420.      *params = ENUM_TO_BOOL( ctx->ExecuteFlag
  421.                   ? GL_COMPILE_AND_EXECUTE : GL_COMPILE );
  422.      break;
  423.       case GL_INDEX_LOGIC_OP:
  424.      *params = ctx->Color.IndexLogicOpEnabled;
  425.      break;
  426.       case GL_COLOR_LOGIC_OP:
  427.      *params = ctx->Color.ColorLogicOpEnabled;
  428.      break;
  429.       case GL_LOGIC_OP_MODE:
  430.      *params = ENUM_TO_BOOL(ctx->Color.LogicOp);
  431.      break;
  432.       case GL_MAP1_COLOR_4:
  433.      *params = ctx->Eval.Map1Color4;
  434.      break;
  435.       case GL_MAP1_GRID_DOMAIN:
  436.      params[0] = FLOAT_TO_BOOL(ctx->Eval.MapGrid1u1);
  437.      params[1] = FLOAT_TO_BOOL(ctx->Eval.MapGrid1u2);
  438.      break;
  439.       case GL_MAP1_GRID_SEGMENTS:
  440.      *params = INT_TO_BOOL(ctx->Eval.MapGrid1un);
  441.      break;
  442.       case GL_MAP1_INDEX:
  443.      *params = ctx->Eval.Map1Index;
  444.      break;
  445.       case GL_MAP1_NORMAL:
  446.      *params = ctx->Eval.Map1Normal;
  447.      break;
  448.       case GL_MAP1_TEXTURE_COORD_1:
  449.      *params = ctx->Eval.Map1TextureCoord1;
  450.      break;
  451.       case GL_MAP1_TEXTURE_COORD_2:
  452.      *params = ctx->Eval.Map1TextureCoord2;
  453.      break;
  454.       case GL_MAP1_TEXTURE_COORD_3:
  455.      *params = ctx->Eval.Map1TextureCoord3;
  456.      break;
  457.       case GL_MAP1_TEXTURE_COORD_4:
  458.      *params = ctx->Eval.Map1TextureCoord4;
  459.      break;
  460.       case GL_MAP1_VERTEX_3:
  461.      *params = ctx->Eval.Map1Vertex3;
  462.      break;
  463.       case GL_MAP1_VERTEX_4:
  464.      *params = ctx->Eval.Map1Vertex4;
  465.      break;
  466.       case GL_MAP2_COLOR_4:
  467.      *params = ctx->Eval.Map2Color4;
  468.      break;
  469.       case GL_MAP2_GRID_DOMAIN:
  470.      params[0] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2u1);
  471.      params[1] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2u2);
  472.      params[2] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2v1);
  473.      params[3] = FLOAT_TO_BOOL(ctx->Eval.MapGrid2v2);
  474.      break;
  475.       case GL_MAP2_GRID_SEGMENTS:
  476.      params[0] = INT_TO_BOOL(ctx->Eval.MapGrid2un);
  477.      params[1] = INT_TO_BOOL(ctx->Eval.MapGrid2vn);
  478.      break;
  479.       case GL_MAP2_INDEX:
  480.      *params = ctx->Eval.Map2Index;
  481.      break;
  482.       case GL_MAP2_NORMAL:
  483.      *params = ctx->Eval.Map2Normal;
  484.      break;
  485.       case GL_MAP2_TEXTURE_COORD_1:
  486.      *params = ctx->Eval.Map2TextureCoord1;
  487.      break;
  488.       case GL_MAP2_TEXTURE_COORD_2:
  489.      *params = ctx->Eval.Map2TextureCoord2;
  490.      break;
  491.       case GL_MAP2_TEXTURE_COORD_3:
  492.      *params = ctx->Eval.Map2TextureCoord3;
  493.      break;
  494.       case GL_MAP2_TEXTURE_COORD_4:
  495.      *params = ctx->Eval.Map2TextureCoord4;
  496.      break;
  497.       case GL_MAP2_VERTEX_3:
  498.      *params = ctx->Eval.Map2Vertex3;
  499.      break;
  500.       case GL_MAP2_VERTEX_4:
  501.      *params = ctx->Eval.Map2Vertex4;
  502.      break;
  503.       case GL_MAP_COLOR:
  504.      *params = ctx->Pixel.MapColorFlag;
  505.      break;
  506.       case GL_MAP_STENCIL:
  507.      *params = ctx->Pixel.MapStencilFlag;
  508.      break;
  509.       case GL_MATRIX_MODE:
  510.      *params = ENUM_TO_BOOL( ctx->Transform.MatrixMode );
  511.      break;
  512.       case GL_MAX_ATTRIB_STACK_DEPTH:
  513.      *params = INT_TO_BOOL(MAX_ATTRIB_STACK_DEPTH);
  514.      break;
  515.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  516.      *params = INT_TO_BOOL( MAX_CLIENT_ATTRIB_STACK_DEPTH);
  517.      break;
  518.       case GL_MAX_CLIP_PLANES:
  519.      *params = INT_TO_BOOL(MAX_CLIP_PLANES);
  520.      break;
  521.       case GL_MAX_EVAL_ORDER:
  522.      *params = INT_TO_BOOL(MAX_EVAL_ORDER);
  523.      break;
  524.       case GL_MAX_LIGHTS:
  525.      *params = INT_TO_BOOL(MAX_LIGHTS);
  526.      break;
  527.       case GL_MAX_LIST_NESTING:
  528.      *params = INT_TO_BOOL(MAX_LIST_NESTING);
  529.      break;
  530.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  531.      *params = INT_TO_BOOL(MAX_MODELVIEW_STACK_DEPTH);
  532.      break;
  533.       case GL_MAX_NAME_STACK_DEPTH:
  534.      *params = INT_TO_BOOL(MAX_NAME_STACK_DEPTH);
  535.      break;
  536.       case GL_MAX_PIXEL_MAP_TABLE:
  537.      *params = INT_TO_BOOL(MAX_PIXEL_MAP_TABLE);
  538.      break;
  539.       case GL_MAX_PROJECTION_STACK_DEPTH:
  540.      *params = INT_TO_BOOL(MAX_PROJECTION_STACK_DEPTH);
  541.      break;
  542.       case GL_MAX_TEXTURE_SIZE:
  543.      *params = INT_TO_BOOL(MAX_TEXTURE_SIZE);
  544.      break;
  545.       case GL_MAX_TEXTURE_STACK_DEPTH:
  546.      *params = INT_TO_BOOL(MAX_TEXTURE_STACK_DEPTH);
  547.      break;
  548.       case GL_MAX_VIEWPORT_DIMS:
  549.      params[0] = INT_TO_BOOL(MAX_WIDTH);
  550.      params[1] = INT_TO_BOOL(MAX_HEIGHT);
  551.      break;
  552.       case GL_MODELVIEW_MATRIX:
  553.      for (i=0;i<16;i++) {
  554.         params[i] = FLOAT_TO_BOOL(ctx->ModelViewMatrix[i]);
  555.      }
  556.      break;
  557.       case GL_MODELVIEW_STACK_DEPTH:
  558.      *params = INT_TO_BOOL(ctx->ModelViewStackDepth);
  559.      break;
  560.       case GL_NAME_STACK_DEPTH:
  561.      *params = INT_TO_BOOL(ctx->Select.NameStackDepth);
  562.      break;
  563.       case GL_NORMALIZE:
  564.      *params = ctx->Transform.Normalize;
  565.      break;
  566.       case GL_PACK_ALIGNMENT:
  567.      *params = INT_TO_BOOL(ctx->Pack.Alignment);
  568.      break;
  569.       case GL_PACK_LSB_FIRST:
  570.      *params = ctx->Pack.LsbFirst;
  571.      break;
  572.       case GL_PACK_ROW_LENGTH:
  573.      *params = INT_TO_BOOL(ctx->Pack.RowLength);
  574.      break;
  575.       case GL_PACK_SKIP_PIXELS:
  576.      *params = INT_TO_BOOL(ctx->Pack.SkipPixels);
  577.      break;
  578.       case GL_PACK_SKIP_ROWS:
  579.      *params = INT_TO_BOOL(ctx->Pack.SkipRows);
  580.      break;
  581.       case GL_PACK_SWAP_BYTES:
  582.      *params = ctx->Pack.SwapBytes;
  583.      break;
  584.       case GL_PACK_SKIP_IMAGES_EXT:
  585.      *params = ctx->Pack.SkipImages;
  586.      break;
  587.       case GL_PACK_IMAGE_HEIGHT_EXT:
  588.      *params = ctx->Pack.ImageHeight;
  589.      break;
  590.       case GL_PERSPECTIVE_CORRECTION_HINT:
  591.      *params = ENUM_TO_BOOL(ctx->Hint.PerspectiveCorrection);
  592.      break;
  593.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  594.      *params = INT_TO_BOOL(ctx->Pixel.MapAtoAsize);
  595.      break;
  596.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  597.      *params = INT_TO_BOOL(ctx->Pixel.MapBtoBsize);
  598.      break;
  599.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  600.      *params = INT_TO_BOOL(ctx->Pixel.MapGtoGsize);
  601.      break;
  602.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  603.      *params = INT_TO_BOOL(ctx->Pixel.MapItoAsize);
  604.      break;
  605.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  606.      *params = INT_TO_BOOL(ctx->Pixel.MapItoBsize);
  607.      break;
  608.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  609.      *params = INT_TO_BOOL(ctx->Pixel.MapItoGsize);
  610.      break;
  611.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  612.      *params = INT_TO_BOOL(ctx->Pixel.MapItoIsize);
  613.      break;
  614.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  615.      *params = INT_TO_BOOL(ctx->Pixel.MapItoRsize);
  616.      break;
  617.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  618.      *params = INT_TO_BOOL(ctx->Pixel.MapRtoRsize);
  619.      break;
  620.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  621.      *params = INT_TO_BOOL(ctx->Pixel.MapStoSsize);
  622.      break;
  623.       case GL_POINT_SIZE:
  624.      *params = FLOAT_TO_BOOL(ctx->Point.Size );
  625.      break;
  626.       case GL_POINT_SIZE_GRANULARITY:
  627.      *params = FLOAT_TO_BOOL(POINT_SIZE_GRANULARITY );
  628.      break;
  629.       case GL_POINT_SIZE_RANGE:
  630.      params[0] = FLOAT_TO_BOOL(MIN_POINT_SIZE );
  631.      params[1] = FLOAT_TO_BOOL(MAX_POINT_SIZE );
  632.      break;
  633.       case GL_POINT_SMOOTH:
  634.      *params = ctx->Point.SmoothFlag;
  635.      break;
  636.       case GL_POINT_SMOOTH_HINT:
  637.      *params = ENUM_TO_BOOL(ctx->Hint.PointSmooth);
  638.      break;
  639.       case GL_POINT_SIZE_MIN_EXT:
  640.      *params = FLOAT_TO_BOOL(ctx->Point.MinSize);
  641.      break;
  642.       case GL_POINT_SIZE_MAX_EXT:
  643.      *params = FLOAT_TO_BOOL(ctx->Point.MaxSize);
  644.      break;
  645.       case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
  646.      *params = FLOAT_TO_BOOL(ctx->Point.Threshold);
  647.      break;
  648.       case GL_DISTANCE_ATTENUATION_EXT:
  649.      params[0] = FLOAT_TO_BOOL(ctx->Point.Params[0]);
  650.      params[1] = FLOAT_TO_BOOL(ctx->Point.Params[1]);
  651.      params[2] = FLOAT_TO_BOOL(ctx->Point.Params[2]);
  652.      break;
  653.       case GL_POLYGON_MODE:
  654.      params[0] = ENUM_TO_BOOL(ctx->Polygon.FrontMode);
  655.      params[1] = ENUM_TO_BOOL(ctx->Polygon.BackMode);
  656.      break;
  657. #ifdef GL_EXT_polygon_offset
  658.       case GL_POLYGON_OFFSET_BIAS_EXT:
  659.      *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetUnits );
  660.      break;
  661. #endif
  662.       case GL_POLYGON_OFFSET_FACTOR:
  663.      *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetFactor );
  664.      break;
  665.       case GL_POLYGON_OFFSET_UNITS:
  666.      *params = FLOAT_TO_BOOL( ctx->Polygon.OffsetUnits );
  667.      break;
  668.       case GL_POLYGON_SMOOTH:
  669.      *params = ctx->Polygon.SmoothFlag;
  670.      break;
  671.       case GL_POLYGON_SMOOTH_HINT:
  672.      *params = ENUM_TO_BOOL(ctx->Hint.PolygonSmooth);
  673.      break;
  674.       case GL_POLYGON_STIPPLE:
  675.      *params = ctx->Polygon.StippleFlag;
  676.      break;
  677.       case GL_PROJECTION_MATRIX:
  678.      for (i=0;i<16;i++) {
  679.         params[i] = FLOAT_TO_BOOL(ctx->ProjectionMatrix[i]);
  680.      }
  681.      break;
  682.       case GL_PROJECTION_STACK_DEPTH:
  683.      *params = INT_TO_BOOL(ctx->ProjectionStackDepth);
  684.      break;
  685.       case GL_READ_BUFFER:
  686.      *params = ENUM_TO_BOOL(ctx->Pixel.ReadBuffer);
  687.      break;
  688.       case GL_RED_BIAS:
  689.      *params = FLOAT_TO_BOOL(ctx->Pixel.RedBias);
  690.      break;
  691.       case GL_RED_BITS:
  692.      *params = INT_TO_BOOL( ctx->Visual->RedBits );
  693.      break;
  694.       case GL_RED_SCALE:
  695.      *params = FLOAT_TO_BOOL(ctx->Pixel.RedScale);
  696.      break;
  697.       case GL_RENDER_MODE:
  698.      *params = ENUM_TO_BOOL(ctx->RenderMode);
  699.      break;
  700.       case GL_RGBA_MODE:
  701.      *params = ctx->Visual->RGBAflag;
  702.      break;
  703.       case GL_SCISSOR_BOX:
  704.      params[0] = INT_TO_BOOL(ctx->Scissor.X);
  705.      params[1] = INT_TO_BOOL(ctx->Scissor.Y);
  706.      params[2] = INT_TO_BOOL(ctx->Scissor.Width);
  707.      params[3] = INT_TO_BOOL(ctx->Scissor.Height);
  708.      break;
  709.       case GL_SCISSOR_TEST:
  710.      *params = ctx->Scissor.Enabled;
  711.      break;
  712.       case GL_SHADE_MODEL:
  713.      *params = ENUM_TO_BOOL(ctx->Light.ShadeModel);
  714.      break;
  715.       case GL_SHARED_TEXTURE_PALETTE_EXT:
  716.      *params = ctx->Texture.SharedPalette;
  717.      break;
  718.       case GL_STENCIL_BITS:
  719.      *params = INT_TO_BOOL(ctx->Visual->StencilBits);
  720.      break;
  721.       case GL_STENCIL_CLEAR_VALUE:
  722.      *params = INT_TO_BOOL(ctx->Stencil.Clear);
  723.      break;
  724.       case GL_STENCIL_FAIL:
  725.      *params = ENUM_TO_BOOL(ctx->Stencil.FailFunc);
  726.      break;
  727.       case GL_STENCIL_FUNC:
  728.      *params = ENUM_TO_BOOL(ctx->Stencil.Function);
  729.      break;
  730.       case GL_STENCIL_PASS_DEPTH_FAIL:
  731.      *params = ENUM_TO_BOOL(ctx->Stencil.ZFailFunc);
  732.      break;
  733.       case GL_STENCIL_PASS_DEPTH_PASS:
  734.      *params = ENUM_TO_BOOL(ctx->Stencil.ZPassFunc);
  735.      break;
  736.       case GL_STENCIL_REF:
  737.      *params = INT_TO_BOOL(ctx->Stencil.Ref);
  738.      break;
  739.       case GL_STENCIL_TEST:
  740.      *params = ctx->Stencil.Enabled;
  741.      break;
  742.       case GL_STENCIL_VALUE_MASK:
  743.      *params = INT_TO_BOOL(ctx->Stencil.ValueMask);
  744.      break;
  745.       case GL_STENCIL_WRITEMASK:
  746.      *params = INT_TO_BOOL(ctx->Stencil.WriteMask);
  747.      break;
  748.       case GL_STEREO:
  749.      *params = GL_FALSE;    /* TODO */
  750.      break;
  751.       case GL_SUBPIXEL_BITS:
  752.      *params = INT_TO_BOOL(0);  /* TODO */
  753.      break;
  754.       case GL_TEXTURE_1D:
  755.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? GL_TRUE : GL_FALSE;
  756.      break;
  757.       case GL_TEXTURE_2D:
  758.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? GL_TRUE : GL_FALSE;
  759.      break;
  760.       case GL_TEXTURE_3D_EXT:
  761.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? GL_TRUE : GL_FALSE;
  762.      break;
  763.       case GL_TEXTURE_ENV_COLOR:
  764.      params[0] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[0]);
  765.      params[1] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[1]);
  766.      params[2] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[2]);
  767.      params[3] = FLOAT_TO_BOOL(ctx->Texture.EnvColor[3]);
  768.      break;
  769.       case GL_TEXTURE_ENV_MODE:
  770.      *params = ENUM_TO_BOOL(ctx->Texture.EnvMode);
  771.      break;
  772.       case GL_TEXTURE_GEN_S:
  773.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE;
  774.      break;
  775.       case GL_TEXTURE_GEN_T:
  776.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE;
  777.      break;
  778.       case GL_TEXTURE_GEN_R:
  779.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE;
  780.      break;
  781.       case GL_TEXTURE_GEN_Q:
  782.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE;
  783.      break;
  784.       case GL_TEXTURE_MATRIX:
  785.      for (i=0;i<16;i++) {
  786.         params[i] = FLOAT_TO_BOOL(ctx->TextureMatrix[i]);
  787.      }
  788.      break;
  789.       case GL_TEXTURE_STACK_DEPTH:
  790.      *params = INT_TO_BOOL(ctx->TextureStackDepth);
  791.      break;
  792.       case GL_UNPACK_ALIGNMENT:
  793.      *params = INT_TO_BOOL(ctx->Unpack.Alignment);
  794.      break;
  795.       case GL_UNPACK_LSB_FIRST:
  796.      *params = ctx->Unpack.LsbFirst;
  797.      break;
  798.       case GL_UNPACK_ROW_LENGTH:
  799.      *params = INT_TO_BOOL(ctx->Unpack.RowLength);
  800.      break;
  801.       case GL_UNPACK_SKIP_PIXELS:
  802.      *params = INT_TO_BOOL(ctx->Unpack.SkipPixels);
  803.      break;
  804.       case GL_UNPACK_SKIP_ROWS:
  805.      *params = INT_TO_BOOL(ctx->Unpack.SkipRows);
  806.      break;
  807.       case GL_UNPACK_SWAP_BYTES:
  808.      *params = ctx->Unpack.SwapBytes;
  809.      break;
  810.       case GL_UNPACK_SKIP_IMAGES_EXT:
  811.      *params = ctx->Unpack.SkipImages;
  812.      break;
  813.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  814.      *params = ctx->Unpack.ImageHeight;
  815.      break;
  816.       case GL_VIEWPORT:
  817.      params[0] = INT_TO_BOOL(ctx->Viewport.X);
  818.      params[1] = INT_TO_BOOL(ctx->Viewport.Y);
  819.      params[2] = INT_TO_BOOL(ctx->Viewport.Width);
  820.      params[3] = INT_TO_BOOL(ctx->Viewport.Height);
  821.      break;
  822.       case GL_ZOOM_X:
  823.      *params = FLOAT_TO_BOOL(ctx->Pixel.ZoomX);
  824.      break;
  825.       case GL_ZOOM_Y:
  826.      *params = FLOAT_TO_BOOL(ctx->Pixel.ZoomY);
  827.      break;
  828.       case GL_VERTEX_ARRAY_SIZE:
  829.      *params = INT_TO_BOOL(ctx->Array.VertexSize);
  830.      break;
  831.       case GL_VERTEX_ARRAY_TYPE:
  832.      *params = ENUM_TO_BOOL(ctx->Array.VertexType);
  833.      break;
  834.       case GL_VERTEX_ARRAY_STRIDE:
  835.      *params = INT_TO_BOOL(ctx->Array.VertexStride);
  836.      break;
  837.       case GL_VERTEX_ARRAY_COUNT_EXT:
  838.      *params = INT_TO_BOOL(0);
  839.      break;
  840.       case GL_NORMAL_ARRAY_TYPE:
  841.      *params = ENUM_TO_BOOL(ctx->Array.NormalType);
  842.      break;
  843.       case GL_NORMAL_ARRAY_STRIDE:
  844.      *params = INT_TO_BOOL(ctx->Array.NormalStride);
  845.      break;
  846.       case GL_NORMAL_ARRAY_COUNT_EXT:
  847.      *params = INT_TO_BOOL(0);
  848.      break;
  849.       case GL_COLOR_ARRAY_SIZE:
  850.      *params = INT_TO_BOOL(ctx->Array.ColorSize);
  851.      break;
  852.       case GL_COLOR_ARRAY_TYPE:
  853.      *params = ENUM_TO_BOOL(ctx->Array.ColorType);
  854.      break;
  855.       case GL_COLOR_ARRAY_STRIDE:
  856.      *params = INT_TO_BOOL(ctx->Array.ColorStride);
  857.      break;
  858.       case GL_COLOR_ARRAY_COUNT_EXT:
  859.      *params = INT_TO_BOOL(0);
  860.      break;
  861.       case GL_INDEX_ARRAY_TYPE:
  862.      *params = ENUM_TO_BOOL(ctx->Array.IndexType);
  863.      break;
  864.       case GL_INDEX_ARRAY_STRIDE:
  865.      *params = INT_TO_BOOL(ctx->Array.IndexStride);
  866.      break;
  867.       case GL_INDEX_ARRAY_COUNT_EXT:
  868.      *params = INT_TO_BOOL(0);
  869.      break;
  870.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  871.      *params = INT_TO_BOOL(ctx->Array.TexCoordSize);
  872.      break;
  873.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  874.      *params = ENUM_TO_BOOL(ctx->Array.TexCoordType);
  875.      break;
  876.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  877.      *params = INT_TO_BOOL(ctx->Array.TexCoordStride);
  878.      break;
  879.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  880.      *params = INT_TO_BOOL(0);
  881.      break;
  882.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  883.      *params = INT_TO_BOOL(ctx->Array.EdgeFlagStride);
  884.      break;
  885.       case GL_EDGE_FLAG_ARRAY_EXT:
  886.      *params = INT_TO_BOOL(0);
  887.      break;
  888.       case GL_TEXTURE_BINDING_1D:
  889.      *params = INT_TO_BOOL(ctx->Texture.Current1D->Name);
  890.       break;
  891.       case GL_TEXTURE_BINDING_2D:
  892.      *params = INT_TO_BOOL(ctx->Texture.Current2D->Name);
  893.       break;
  894.       case GL_TEXTURE_3D_BINDING_EXT:
  895.      *params = INT_TO_BOOL(ctx->Texture.Current2D->Name);
  896.       break;
  897.       default:
  898.      gl_error( ctx, GL_INVALID_ENUM, "glGetBooleanv" );
  899.    }
  900. }
  901.  
  902.  
  903.  
  904.  
  905. void gl_GetDoublev( GLcontext *ctx, GLenum pname, GLdouble *params )
  906. {
  907.    GLuint i;
  908.  
  909.    if (INSIDE_BEGIN_END(ctx)) {
  910.       gl_error( ctx, GL_INVALID_OPERATION, "glGetDoublev" );
  911.       return;
  912.    }
  913.  
  914.    switch (pname) {
  915.       case GL_ACCUM_RED_BITS:
  916.       case GL_ACCUM_GREEN_BITS:
  917.       case GL_ACCUM_BLUE_BITS:
  918.       case GL_ACCUM_ALPHA_BITS:
  919.      *params = (GLdouble) ctx->Visual->AccumBits;
  920.      break;
  921.       case GL_ACCUM_CLEAR_VALUE:
  922.      params[0] = (GLdouble) ctx->Accum.ClearColor[0];
  923.      params[1] = (GLdouble) ctx->Accum.ClearColor[1];
  924.      params[2] = (GLdouble) ctx->Accum.ClearColor[2];
  925.      params[3] = (GLdouble) ctx->Accum.ClearColor[3];
  926.      break;
  927.       case GL_ALPHA_BIAS:
  928.      *params = (GLdouble) ctx->Pixel.AlphaBias;
  929.      break;
  930.       case GL_ALPHA_BITS:
  931.      *params = (GLdouble) ctx->Visual->AlphaBits;
  932.      break;
  933.       case GL_ALPHA_SCALE:
  934.      *params = (GLdouble) ctx->Pixel.AlphaScale;
  935.      break;
  936.       case GL_ALPHA_TEST:
  937.      *params = (GLdouble) ctx->Color.AlphaEnabled;
  938.      break;
  939.       case GL_ALPHA_TEST_FUNC:
  940.      *params = BOOL_TO_DOUBLE( ctx->Color.AlphaFunc );
  941.      break;
  942.       case GL_ALPHA_TEST_REF:
  943.      *params = (GLdouble) ctx->Color.AlphaRef;
  944.      break;
  945.       case GL_ATTRIB_STACK_DEPTH:
  946.      *params = (GLdouble ) ctx->AttribStackDepth;
  947.      break;
  948.       case GL_AUTO_NORMAL:
  949.      *params = (GLdouble) ctx->Eval.AutoNormal;
  950.      break;
  951.       case GL_AUX_BUFFERS:
  952.      *params = (GLdouble) NUM_AUX_BUFFERS;
  953.      break;
  954.       case GL_BLEND:
  955.      *params = (GLdouble) ctx->Color.BlendEnabled;
  956.      break;
  957.       case GL_BLEND_DST:
  958.      *params = BOOL_TO_DOUBLE( ctx->Color.BlendDst );
  959.      break;
  960.       case GL_BLEND_SRC:
  961.      *params = BOOL_TO_DOUBLE( ctx->Color.BlendSrc );
  962.      break;
  963.       case GL_BLEND_EQUATION_EXT:
  964.      *params = BOOL_TO_DOUBLE( ctx->Color.BlendEquation );
  965.      break;
  966.       case GL_BLEND_COLOR_EXT:
  967.      params[0] = (GLdouble) ctx->Color.BlendColor[0];
  968.      params[1] = (GLdouble) ctx->Color.BlendColor[1];
  969.      params[2] = (GLdouble) ctx->Color.BlendColor[2];
  970.      params[3] = (GLdouble) ctx->Color.BlendColor[3];
  971.      break;
  972.       case GL_BLUE_BIAS:
  973.      *params = (GLdouble) ctx->Pixel.BlueBias;
  974.      break;
  975.       case GL_BLUE_BITS:
  976.      *params = (GLdouble) ctx->Visual->BlueBits;
  977.      break;
  978.       case GL_BLUE_SCALE:
  979.      *params = (GLdouble) ctx->Pixel.BlueScale;
  980.      break;
  981.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  982.      *params = (GLdouble) ctx->ClientAttribStackDepth;
  983.      break;
  984.       case GL_CLIP_PLANE0:
  985.       case GL_CLIP_PLANE1:
  986.       case GL_CLIP_PLANE2:
  987.       case GL_CLIP_PLANE3:
  988.       case GL_CLIP_PLANE4:
  989.       case GL_CLIP_PLANE5:
  990.      *params = (GLdouble) ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  991.      break;
  992.       case GL_COLOR_CLEAR_VALUE:
  993.      params[0] = (GLdouble) ctx->Color.ClearColor[0];
  994.      params[1] = (GLdouble) ctx->Color.ClearColor[1];
  995.      params[2] = (GLdouble) ctx->Color.ClearColor[2];
  996.      params[3] = (GLdouble) ctx->Color.ClearColor[3];
  997.      break;
  998.       case GL_COLOR_MATERIAL:
  999.      *params = (GLdouble) ctx->Light.ColorMaterialEnabled;
  1000.      break;
  1001.       case GL_COLOR_MATERIAL_FACE:
  1002.      *params = BOOL_TO_DOUBLE( ctx->Light.ColorMaterialFace );
  1003.      break;
  1004.       case GL_COLOR_MATERIAL_PARAMETER:
  1005.      *params = BOOL_TO_DOUBLE( ctx->Light.ColorMaterialMode );
  1006.      break;
  1007.       case GL_COLOR_WRITEMASK:
  1008.      params[0] = (ctx->Color.ColorMask & 8) ? 1.0 : 0.0;
  1009.      params[1] = (ctx->Color.ColorMask & 4) ? 1.0 : 0.0;
  1010.      params[2] = (ctx->Color.ColorMask & 2) ? 1.0 : 0.0;
  1011.      params[3] = (ctx->Color.ColorMask & 1) ? 1.0 : 0.0;
  1012.      break;
  1013.       case GL_CULL_FACE:
  1014.      *params = (GLdouble) ctx->Polygon.CullFlag;
  1015.      break;
  1016.       case GL_CULL_FACE_MODE:
  1017.      *params = BOOL_TO_DOUBLE( ctx->Polygon.CullFaceMode );
  1018.      break;
  1019.       case GL_CURRENT_COLOR:
  1020.      params[0] = ctx->Current.ByteColor[0] * ctx->Visual->InvRedScale;
  1021.      params[1] = ctx->Current.ByteColor[1] * ctx->Visual->InvGreenScale;
  1022.      params[2] = ctx->Current.ByteColor[2] * ctx->Visual->InvBlueScale;
  1023.      params[3] = ctx->Current.ByteColor[3] * ctx->Visual->InvAlphaScale;
  1024.      break;
  1025.       case GL_CURRENT_INDEX:
  1026.      *params = (GLdouble) ctx->Current.Index;
  1027.      break;
  1028.       case GL_CURRENT_NORMAL:
  1029.      params[0] = (GLdouble) ctx->Current.Normal[0];
  1030.      params[1] = (GLdouble) ctx->Current.Normal[1];
  1031.      params[2] = (GLdouble) ctx->Current.Normal[2];
  1032.      break;
  1033.       case GL_CURRENT_RASTER_COLOR:
  1034.      params[0] = (GLdouble) ctx->Current.RasterColor[0];
  1035.      params[1] = (GLdouble) ctx->Current.RasterColor[1];
  1036.      params[2] = (GLdouble) ctx->Current.RasterColor[2];
  1037.      params[3] = (GLdouble) ctx->Current.RasterColor[3];
  1038.      break;
  1039.       case GL_CURRENT_RASTER_DISTANCE:
  1040.      params[0] = (GLdouble) ctx->Current.RasterDistance;
  1041.      break;
  1042.       case GL_CURRENT_RASTER_INDEX:
  1043.      *params = (GLdouble) ctx->Current.RasterIndex;
  1044.      break;
  1045.       case GL_CURRENT_RASTER_POSITION:
  1046.      params[0] = (GLdouble) ctx->Current.RasterPos[0];
  1047.      params[1] = (GLdouble) ctx->Current.RasterPos[1];
  1048.      params[2] = (GLdouble) ctx->Current.RasterPos[2];
  1049.      params[3] = (GLdouble) ctx->Current.RasterPos[3];
  1050.      break;
  1051.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  1052.      params[0] = (GLdouble) ctx->Current.RasterTexCoord[0];
  1053.      params[1] = (GLdouble) ctx->Current.RasterTexCoord[1];
  1054.      params[2] = (GLdouble) ctx->Current.RasterTexCoord[2];
  1055.      params[3] = (GLdouble) ctx->Current.RasterTexCoord[3];
  1056.      break;
  1057.       case GL_CURRENT_RASTER_POSITION_VALID:
  1058.      *params = (GLdouble) ctx->Current.RasterPosValid;
  1059.      break;
  1060.       case GL_CURRENT_TEXTURE_COORDS:
  1061.      params[0] = (GLdouble) ctx->Current.TexCoord[0];
  1062.      params[1] = (GLdouble) ctx->Current.TexCoord[1];
  1063.      params[2] = (GLdouble) ctx->Current.TexCoord[2];
  1064.      params[3] = (GLdouble) ctx->Current.TexCoord[3];
  1065.      break;
  1066.       case GL_DEPTH_BIAS:
  1067.      *params = (GLdouble) ctx->Pixel.DepthBias;
  1068.      break;
  1069.       case GL_DEPTH_BITS:
  1070.      *params = (GLdouble) ctx->Visual->DepthBits;
  1071.      break;
  1072.       case GL_DEPTH_CLEAR_VALUE:
  1073.      *params = (GLdouble) ctx->Depth.Clear;
  1074.      break;
  1075.       case GL_DEPTH_FUNC:
  1076.      *params = BOOL_TO_DOUBLE( ctx->Depth.Func );
  1077.      break;
  1078.       case GL_DEPTH_RANGE:
  1079.      params[0] = (GLdouble) ctx->Viewport.Near;
  1080.      params[1] = (GLdouble) ctx->Viewport.Far;
  1081.      break;
  1082.       case GL_DEPTH_SCALE:
  1083.      *params = (GLdouble) ctx->Pixel.DepthScale;
  1084.      break;
  1085.       case GL_DEPTH_TEST:
  1086.      *params = (GLdouble) ctx->Depth.Test;
  1087.      break;
  1088.       case GL_DEPTH_WRITEMASK:
  1089.      *params = (GLdouble) ctx->Depth.Mask;
  1090.      break;
  1091.       case GL_DITHER:
  1092.      *params = (GLdouble) ctx->Color.DitherFlag;
  1093.      break;
  1094.       case GL_DOUBLEBUFFER:
  1095.      *params = (GLdouble) ctx->Visual->DBflag;
  1096.      break;
  1097.       case GL_DRAW_BUFFER:
  1098.      *params = BOOL_TO_DOUBLE( ctx->Color.DrawBuffer );
  1099.      break;
  1100.       case GL_EDGE_FLAG:
  1101.      *params = (GLdouble) ctx->Current.EdgeFlag;
  1102.      break;
  1103.       case GL_FEEDBACK_BUFFER_SIZE:
  1104.      /* TODO: is this right?  Or, return number of entries in buffer? */
  1105.      *params = (GLdouble) ctx->Feedback.BufferSize;
  1106.      break;
  1107.       case GL_FEEDBACK_BUFFER_TYPE:
  1108.      *params = BOOL_TO_DOUBLE( ctx->Feedback.Type );
  1109.      break;
  1110.       case GL_FOG:
  1111.      *params = (GLdouble) ctx->Fog.Enabled;
  1112.      break;
  1113.       case GL_FOG_COLOR:
  1114.      params[0] = (GLdouble) ctx->Fog.Color[0];
  1115.      params[1] = (GLdouble) ctx->Fog.Color[1];
  1116.      params[2] = (GLdouble) ctx->Fog.Color[2];
  1117.      params[3] = (GLdouble) ctx->Fog.Color[3];
  1118.      break;
  1119.       case GL_FOG_DENSITY:
  1120.      *params = (GLdouble) ctx->Fog.Density;
  1121.      break;
  1122.       case GL_FOG_END:
  1123.      *params = (GLdouble) ctx->Fog.End;
  1124.      break;
  1125.       case GL_FOG_HINT:
  1126.      *params = BOOL_TO_DOUBLE( ctx->Hint.Fog );
  1127.      break;
  1128.       case GL_FOG_INDEX:
  1129.      *params = (GLdouble) ctx->Fog.Index;
  1130.      break;
  1131.       case GL_FOG_MODE:
  1132.      *params = BOOL_TO_DOUBLE( ctx->Fog.Mode );
  1133.      break;
  1134.       case GL_FOG_START:
  1135.      *params = (GLdouble) ctx->Fog.Start;
  1136.      break;
  1137.       case GL_FRONT_FACE:
  1138.      *params = BOOL_TO_DOUBLE( ctx->Polygon.FrontFace );
  1139.      break;
  1140.       case GL_GREEN_BIAS:
  1141.      *params = (GLdouble) ctx->Pixel.GreenBias;
  1142.      break;
  1143.       case GL_GREEN_BITS:
  1144.      *params = (GLdouble) ctx->Visual->GreenBits;
  1145.      break;
  1146.       case GL_GREEN_SCALE:
  1147.      *params = (GLdouble) ctx->Pixel.GreenScale;
  1148.      break;
  1149.       case GL_INDEX_BITS:
  1150.      *params = (GLdouble) ctx->Visual->IndexBits;
  1151.      break;
  1152.       case GL_INDEX_CLEAR_VALUE:
  1153.      *params = (GLdouble) ctx->Color.ClearIndex;
  1154.      break;
  1155.       case GL_INDEX_MODE:
  1156.      *params = ctx->Visual->RGBAflag ? 0.0 : 1.0;
  1157.      break;
  1158.       case GL_INDEX_OFFSET:
  1159.      *params = (GLdouble) ctx->Pixel.IndexOffset;
  1160.      break;
  1161.       case GL_INDEX_SHIFT:
  1162.      *params = (GLdouble) ctx->Pixel.IndexShift;
  1163.      break;
  1164.       case GL_INDEX_WRITEMASK:
  1165.      *params = (GLdouble) ctx->Color.IndexMask;
  1166.      break;
  1167.       case GL_LIGHT0:
  1168.       case GL_LIGHT1:
  1169.       case GL_LIGHT2:
  1170.       case GL_LIGHT3:
  1171.       case GL_LIGHT4:
  1172.       case GL_LIGHT5:
  1173.       case GL_LIGHT6:
  1174.       case GL_LIGHT7:
  1175.      *params = (GLdouble) ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  1176.      break;
  1177.       case GL_LIGHTING:
  1178.      *params = (GLdouble) ctx->Light.Enabled;
  1179.      break;
  1180.       case GL_LIGHT_MODEL_AMBIENT:
  1181.      params[0] = (GLdouble) ctx->Light.Model.Ambient[0];
  1182.      params[1] = (GLdouble) ctx->Light.Model.Ambient[1];
  1183.      params[2] = (GLdouble) ctx->Light.Model.Ambient[2];
  1184.      params[3] = (GLdouble) ctx->Light.Model.Ambient[3];
  1185.      break;
  1186.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  1187.      *params = (GLdouble) ctx->Light.Model.LocalViewer;
  1188.      break;
  1189.       case GL_LIGHT_MODEL_TWO_SIDE:
  1190.      *params = (GLdouble) ctx->Light.Model.TwoSide;
  1191.      break;
  1192.       case GL_LINE_SMOOTH:
  1193.      *params = (GLdouble) ctx->Line.SmoothFlag;
  1194.      break;
  1195.       case GL_LINE_SMOOTH_HINT:
  1196.      *params = BOOL_TO_DOUBLE( ctx->Hint.LineSmooth );
  1197.      break;
  1198.       case GL_LINE_STIPPLE:
  1199.      *params = (GLdouble) ctx->Line.StippleFlag;
  1200.      break;
  1201.       case GL_LINE_STIPPLE_PATTERN:
  1202.      *params = (GLdouble) ctx->Line.StipplePattern;
  1203.      break;
  1204.       case GL_LINE_STIPPLE_REPEAT:
  1205.      *params = (GLdouble) ctx->Line.StippleFactor;
  1206.      break;
  1207.       case GL_LINE_WIDTH:
  1208.      *params = (GLdouble) ctx->Line.Width;
  1209.      break;
  1210.       case GL_LINE_WIDTH_GRANULARITY:
  1211.      *params = (GLdouble) LINE_WIDTH_GRANULARITY;
  1212.      break;
  1213.       case GL_LINE_WIDTH_RANGE:
  1214.      params[0] = (GLdouble) MIN_LINE_WIDTH;
  1215.      params[1] = (GLdouble) MAX_LINE_WIDTH;
  1216.      break;
  1217.       case GL_LIST_BASE:
  1218.      *params = (GLdouble) ctx->List.ListBase;
  1219.      break;
  1220.       case GL_LIST_INDEX:
  1221.      *params = (GLdouble) gl_list_index();
  1222.      break;
  1223.       case GL_LIST_MODE:
  1224.      *params = ctx->ExecuteFlag ? BOOL_TO_DOUBLE(GL_COMPILE_AND_EXECUTE)
  1225.                   : BOOL_TO_DOUBLE(GL_COMPILE);
  1226.      break;
  1227.       case GL_INDEX_LOGIC_OP:
  1228.      *params = (GLdouble) ctx->Color.IndexLogicOpEnabled;
  1229.      break;
  1230.       case GL_COLOR_LOGIC_OP:
  1231.      *params = (GLdouble) ctx->Color.ColorLogicOpEnabled;
  1232.      break;
  1233.       case GL_LOGIC_OP_MODE:
  1234.      *params = BOOL_TO_DOUBLE( ctx->Color.LogicOp );
  1235.      break;
  1236.       case GL_MAP1_COLOR_4:
  1237.      *params = (GLdouble) ctx->Eval.Map1Color4;
  1238.      break;
  1239.       case GL_MAP1_GRID_DOMAIN:
  1240.      params[0] = (GLdouble) ctx->Eval.MapGrid1u1;
  1241.      params[1] = (GLdouble) ctx->Eval.MapGrid1u2;
  1242.      break;
  1243.       case GL_MAP1_GRID_SEGMENTS:
  1244.      *params = (GLdouble) ctx->Eval.MapGrid1un;
  1245.      break;
  1246.       case GL_MAP1_INDEX:
  1247.      *params = (GLdouble) ctx->Eval.Map1Index;
  1248.      break;
  1249.       case GL_MAP1_NORMAL:
  1250.      *params = (GLdouble) ctx->Eval.Map1Normal;
  1251.      break;
  1252.       case GL_MAP1_TEXTURE_COORD_1:
  1253.      *params = (GLdouble) ctx->Eval.Map1TextureCoord1;
  1254.      break;
  1255.       case GL_MAP1_TEXTURE_COORD_2:
  1256.      *params = (GLdouble) ctx->Eval.Map1TextureCoord2;
  1257.      break;
  1258.       case GL_MAP1_TEXTURE_COORD_3:
  1259.      *params = (GLdouble) ctx->Eval.Map1TextureCoord3;
  1260.      break;
  1261.       case GL_MAP1_TEXTURE_COORD_4:
  1262.      *params = (GLdouble) ctx->Eval.Map1TextureCoord4;
  1263.      break;
  1264.       case GL_MAP1_VERTEX_3:
  1265.      *params = (GLdouble) ctx->Eval.Map1Vertex3;
  1266.      break;
  1267.       case GL_MAP1_VERTEX_4:
  1268.      *params = (GLdouble) ctx->Eval.Map1Vertex4;
  1269.      break;
  1270.       case GL_MAP2_COLOR_4:
  1271.      *params = (GLdouble) ctx->Eval.Map2Color4;
  1272.      break;
  1273.       case GL_MAP2_GRID_DOMAIN:
  1274.      params[0] = (GLdouble) ctx->Eval.MapGrid2u1;
  1275.      params[1] = (GLdouble) ctx->Eval.MapGrid2u2;
  1276.      params[2] = (GLdouble) ctx->Eval.MapGrid2v1;
  1277.      params[3] = (GLdouble) ctx->Eval.MapGrid2v2;
  1278.      break;
  1279.       case GL_MAP2_GRID_SEGMENTS:
  1280.      params[0] = (GLdouble) ctx->Eval.MapGrid2un;
  1281.      params[1] = (GLdouble) ctx->Eval.MapGrid2vn;
  1282.      break;
  1283.       case GL_MAP2_INDEX:
  1284.      *params = (GLdouble) ctx->Eval.Map2Index;
  1285.      break;
  1286.       case GL_MAP2_NORMAL:
  1287.      *params = (GLdouble) ctx->Eval.Map2Normal;
  1288.      break;
  1289.       case GL_MAP2_TEXTURE_COORD_1:
  1290.      *params = (GLdouble) ctx->Eval.Map2TextureCoord1;
  1291.      break;
  1292.       case GL_MAP2_TEXTURE_COORD_2:
  1293.      *params = (GLdouble) ctx->Eval.Map2TextureCoord2;
  1294.      break;
  1295.       case GL_MAP2_TEXTURE_COORD_3:
  1296.      *params = (GLdouble) ctx->Eval.Map2TextureCoord3;
  1297.      break;
  1298.       case GL_MAP2_TEXTURE_COORD_4:
  1299.      *params = (GLdouble) ctx->Eval.Map2TextureCoord4;
  1300.      break;
  1301.       case GL_MAP2_VERTEX_3:
  1302.      *params = (GLdouble) ctx->Eval.Map2Vertex3;
  1303.      break;
  1304.       case GL_MAP2_VERTEX_4:
  1305.      *params = (GLdouble) ctx->Eval.Map2Vertex4;
  1306.      break;
  1307.       case GL_MAP_COLOR:
  1308.      *params = (GLdouble) ctx->Pixel.MapColorFlag;
  1309.      break;
  1310.       case GL_MAP_STENCIL:
  1311.      *params = (GLdouble) ctx->Pixel.MapStencilFlag;
  1312.      break;
  1313.       case GL_MATRIX_MODE:
  1314.      *params = BOOL_TO_DOUBLE( ctx->Transform.MatrixMode );
  1315.      break;
  1316.       case GL_MAX_ATTRIB_STACK_DEPTH:
  1317.      *params = (GLdouble) MAX_ATTRIB_STACK_DEPTH;
  1318.      break;
  1319.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  1320.      *params = (GLdouble) MAX_CLIENT_ATTRIB_STACK_DEPTH;
  1321.      break;
  1322.       case GL_MAX_CLIP_PLANES:
  1323.      *params = (GLdouble) MAX_CLIP_PLANES;
  1324.      break;
  1325.       case GL_MAX_EVAL_ORDER:
  1326.      *params = (GLdouble) MAX_EVAL_ORDER;
  1327.      break;
  1328.       case GL_MAX_LIGHTS:
  1329.      *params = (GLdouble) MAX_LIGHTS;
  1330.      break;
  1331.       case GL_MAX_LIST_NESTING:
  1332.      *params = (GLdouble) MAX_LIST_NESTING;
  1333.      break;
  1334.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  1335.      *params = (GLdouble) MAX_MODELVIEW_STACK_DEPTH;
  1336.      break;
  1337.       case GL_MAX_NAME_STACK_DEPTH:
  1338.      *params = (GLdouble) MAX_NAME_STACK_DEPTH;
  1339.      break;
  1340.       case GL_MAX_PIXEL_MAP_TABLE:
  1341.      *params = (GLdouble) MAX_PIXEL_MAP_TABLE;
  1342.      break;
  1343.       case GL_MAX_PROJECTION_STACK_DEPTH:
  1344.      *params = (GLdouble) MAX_PROJECTION_STACK_DEPTH;
  1345.      break;
  1346.       case GL_MAX_TEXTURE_SIZE:
  1347.      *params = (GLdouble) MAX_TEXTURE_SIZE;
  1348.      break;
  1349.       case GL_MAX_TEXTURE_STACK_DEPTH:
  1350.      *params = (GLdouble) MAX_TEXTURE_STACK_DEPTH;
  1351.      break;
  1352.       case GL_MAX_VIEWPORT_DIMS:
  1353.      params[0] = (GLdouble) MAX_WIDTH;
  1354.      params[1] = (GLdouble) MAX_HEIGHT;
  1355.      break;
  1356.       case GL_MODELVIEW_MATRIX:
  1357.      for (i=0;i<16;i++) {
  1358.         params[i] = (GLdouble) ctx->ModelViewMatrix[i];
  1359.      }
  1360.      break;
  1361.       case GL_MODELVIEW_STACK_DEPTH:
  1362.      *params = (GLdouble) ctx->ModelViewStackDepth;
  1363.      break;
  1364.       case GL_NAME_STACK_DEPTH:
  1365.      *params = (GLdouble) ctx->Select.NameStackDepth;
  1366.      break;
  1367.       case GL_NORMALIZE:
  1368.      *params = (GLdouble) ctx->Transform.Normalize;
  1369.      break;
  1370.       case GL_PACK_ALIGNMENT:
  1371.      *params = (GLdouble) ctx->Pack.Alignment;
  1372.      break;
  1373.       case GL_PACK_LSB_FIRST:
  1374.      *params = (GLdouble) ctx->Pack.LsbFirst;
  1375.      break;
  1376.       case GL_PACK_ROW_LENGTH:
  1377.      *params = (GLdouble) ctx->Pack.RowLength;
  1378.      break;
  1379.       case GL_PACK_SKIP_PIXELS:
  1380.      *params = (GLdouble) ctx->Pack.SkipPixels;
  1381.      break;
  1382.       case GL_PACK_SKIP_ROWS:
  1383.      *params = (GLdouble) ctx->Pack.SkipRows;
  1384.      break;
  1385.       case GL_PACK_SWAP_BYTES:
  1386.      *params = (GLdouble) ctx->Pack.SwapBytes;
  1387.      break;
  1388.       case GL_PACK_SKIP_IMAGES_EXT:
  1389.      *params = (GLdouble) ctx->Pack.SkipImages;
  1390.      break;
  1391.       case GL_PACK_IMAGE_HEIGHT_EXT:
  1392.      *params = (GLdouble) ctx->Pack.ImageHeight;
  1393.      break;
  1394.       case GL_PERSPECTIVE_CORRECTION_HINT:
  1395.      *params = BOOL_TO_DOUBLE( ctx->Hint.PerspectiveCorrection );
  1396.      break;
  1397.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  1398.      *params = (GLdouble) ctx->Pixel.MapAtoAsize;
  1399.      break;
  1400.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  1401.      *params = (GLdouble) ctx->Pixel.MapBtoBsize;
  1402.      break;
  1403.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  1404.      *params = (GLdouble) ctx->Pixel.MapGtoGsize;
  1405.      break;
  1406.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  1407.      *params = (GLdouble) ctx->Pixel.MapItoAsize;
  1408.      break;
  1409.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  1410.      *params = (GLdouble) ctx->Pixel.MapItoBsize;
  1411.      break;
  1412.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  1413.      *params = (GLdouble) ctx->Pixel.MapItoGsize;
  1414.      break;
  1415.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  1416.      *params = (GLdouble) ctx->Pixel.MapItoIsize;
  1417.      break;
  1418.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  1419.      *params = (GLdouble) ctx->Pixel.MapItoRsize;
  1420.      break;
  1421.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  1422.      *params = (GLdouble) ctx->Pixel.MapRtoRsize;
  1423.      break;
  1424.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  1425.      *params = (GLdouble) ctx->Pixel.MapStoSsize;
  1426.      break;
  1427.       case GL_POINT_SIZE:
  1428.      *params = (GLdouble) ctx->Point.Size;
  1429.      break;
  1430.       case GL_POINT_SIZE_GRANULARITY:
  1431.      *params = (GLdouble) POINT_SIZE_GRANULARITY;
  1432.      break;
  1433.       case GL_POINT_SIZE_RANGE:
  1434.      params[0] = (GLdouble) MIN_POINT_SIZE;
  1435.      params[1] = (GLdouble) MAX_POINT_SIZE;
  1436.      break;
  1437.       case GL_POINT_SMOOTH:
  1438.      *params = (GLdouble) ctx->Point.SmoothFlag;
  1439.      break;
  1440.       case GL_POINT_SMOOTH_HINT:
  1441.      *params = BOOL_TO_DOUBLE( ctx->Hint.PointSmooth );
  1442.      break;
  1443.       case GL_POINT_SIZE_MIN_EXT:
  1444.      *params = (GLdouble) (ctx->Point.MinSize);
  1445.      break;
  1446.       case GL_POINT_SIZE_MAX_EXT:
  1447.      *params = (GLdouble) (ctx->Point.MaxSize);
  1448.      break;
  1449.       case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
  1450.      *params = (GLdouble) (ctx->Point.Threshold);
  1451.      break;
  1452.       case GL_DISTANCE_ATTENUATION_EXT:
  1453.      params[0] = (GLdouble) (ctx->Point.Params[0]);
  1454.      params[1] = (GLdouble) (ctx->Point.Params[1]);
  1455.      params[2] = (GLdouble) (ctx->Point.Params[2]);
  1456.      break;
  1457.       case GL_POLYGON_MODE:
  1458.      params[0] = BOOL_TO_DOUBLE( ctx->Polygon.FrontMode );
  1459.      params[1] = BOOL_TO_DOUBLE( ctx->Polygon.BackMode );
  1460.      break;
  1461. #ifdef GL_EXT_polygon_offset
  1462.       case GL_POLYGON_OFFSET_BIAS_EXT:
  1463.      *params = (GLdouble) ctx->Polygon.OffsetUnits;
  1464.      break;
  1465. #endif
  1466.       case GL_POLYGON_OFFSET_FACTOR:
  1467.      *params = (GLdouble) ctx->Polygon.OffsetFactor;
  1468.      break;
  1469.       case GL_POLYGON_OFFSET_UNITS:
  1470.      *params = (GLdouble) ctx->Polygon.OffsetUnits;
  1471.      break;
  1472.       case GL_POLYGON_SMOOTH:
  1473.      *params = (GLdouble) ctx->Polygon.SmoothFlag;
  1474.      break;
  1475.       case GL_POLYGON_SMOOTH_HINT:
  1476.      *params = BOOL_TO_DOUBLE( ctx->Hint.PolygonSmooth );
  1477.      break;
  1478.       case GL_POLYGON_STIPPLE:
  1479.      for (i=0;i<32;i++) {           /* RIGHT? */
  1480.         params[i] = (GLdouble) ctx->PolygonStipple[i];
  1481.      }
  1482.      break;
  1483.       case GL_PROJECTION_MATRIX:
  1484.      for (i=0;i<16;i++) {
  1485.         params[i] = (GLdouble) ctx->ProjectionMatrix[i];
  1486.      }
  1487.      break;
  1488.       case GL_PROJECTION_STACK_DEPTH:
  1489.      *params = (GLdouble) ctx->ProjectionStackDepth;
  1490.      break;
  1491.       case GL_READ_BUFFER:
  1492.      *params = BOOL_TO_DOUBLE( ctx->Pixel.ReadBuffer );
  1493.      break;
  1494.       case GL_RED_BIAS:
  1495.      *params = (GLdouble) ctx->Pixel.RedBias;
  1496.      break;
  1497.       case GL_RED_BITS:
  1498.      *params = (GLdouble) ctx->Visual->RedBits;
  1499.      break;
  1500.       case GL_RED_SCALE:
  1501.      *params = (GLdouble) ctx->Pixel.RedScale;
  1502.      break;
  1503.       case GL_RENDER_MODE:
  1504.      *params = BOOL_TO_DOUBLE( ctx->RenderMode );
  1505.      break;
  1506.       case GL_RGBA_MODE:
  1507.      *params = (GLdouble) ctx->Visual->RGBAflag;
  1508.      break;
  1509.       case GL_SCISSOR_BOX:
  1510.      params[0] = (GLdouble) ctx->Scissor.X;
  1511.      params[1] = (GLdouble) ctx->Scissor.Y;
  1512.      params[2] = (GLdouble) ctx->Scissor.Width;
  1513.      params[3] = (GLdouble) ctx->Scissor.Height;
  1514.      break;
  1515.       case GL_SCISSOR_TEST:
  1516.      *params = (GLdouble) ctx->Scissor.Enabled;
  1517.      break;
  1518.       case GL_SHADE_MODEL:
  1519.      *params = BOOL_TO_DOUBLE( ctx->Light.ShadeModel );
  1520.      break;
  1521.       case GL_SHARED_TEXTURE_PALETTE_EXT:
  1522.      *params = (GLdouble) ctx->Texture.SharedPalette;
  1523.      break;
  1524.       case GL_STENCIL_BITS:
  1525.      *params = (GLdouble) ctx->Visual->StencilBits;
  1526.      break;
  1527.       case GL_STENCIL_CLEAR_VALUE:
  1528.      *params = (GLdouble) ctx->Stencil.Clear;
  1529.      break;
  1530.       case GL_STENCIL_FAIL:
  1531.      *params = BOOL_TO_DOUBLE( ctx->Stencil.FailFunc );
  1532.      break;
  1533.       case GL_STENCIL_FUNC:
  1534.      *params = BOOL_TO_DOUBLE( ctx->Stencil.Function );
  1535.      break;
  1536.       case GL_STENCIL_PASS_DEPTH_FAIL:
  1537.      *params = BOOL_TO_DOUBLE( ctx->Stencil.ZFailFunc );
  1538.      break;
  1539.       case GL_STENCIL_PASS_DEPTH_PASS:
  1540.      *params = BOOL_TO_DOUBLE( ctx->Stencil.ZPassFunc );
  1541.      break;
  1542.       case GL_STENCIL_REF:
  1543.      *params = (GLdouble) ctx->Stencil.Ref;
  1544.      break;
  1545.       case GL_STENCIL_TEST:
  1546.      *params = (GLdouble) ctx->Stencil.Enabled;
  1547.      break;
  1548.       case GL_STENCIL_VALUE_MASK:
  1549.      *params = (GLdouble) ctx->Stencil.ValueMask;
  1550.      break;
  1551.       case GL_STENCIL_WRITEMASK:
  1552.      *params = (GLdouble) ctx->Stencil.WriteMask;
  1553.      break;
  1554.       case GL_STEREO:
  1555.      *params = 0.0;   /* TODO */
  1556.      break;
  1557.       case GL_SUBPIXEL_BITS:
  1558.      *params = 0.0;   /* TODO */
  1559.      break;
  1560.       case GL_TEXTURE_1D:
  1561.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? 1.0 : 0.0;
  1562.      break;
  1563.       case GL_TEXTURE_2D:
  1564.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? 1.0 : 0.0;
  1565.      break;
  1566.       case GL_TEXTURE_3D_EXT:
  1567.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? 1.0 : 0.0;
  1568.      break;
  1569.       case GL_TEXTURE_ENV_COLOR:
  1570.      params[0] = (GLdouble) ctx->Texture.EnvColor[0];
  1571.      params[1] = (GLdouble) ctx->Texture.EnvColor[1];
  1572.      params[2] = (GLdouble) ctx->Texture.EnvColor[2];
  1573.      params[3] = (GLdouble) ctx->Texture.EnvColor[3];
  1574.      break;
  1575.       case GL_TEXTURE_ENV_MODE:
  1576.      *params = BOOL_TO_DOUBLE( ctx->Texture.EnvMode );
  1577.      break;
  1578.       case GL_TEXTURE_GEN_S:
  1579.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? 1.0 : 0.0;
  1580.      break;
  1581.       case GL_TEXTURE_GEN_T:
  1582.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? 1.0 : 0.0;
  1583.      break;
  1584.       case GL_TEXTURE_GEN_R:
  1585.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? 1.0 : 0.0;
  1586.      break;
  1587.       case GL_TEXTURE_GEN_Q:
  1588.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? 1.0 : 0.0;
  1589.      break;
  1590.       case GL_TEXTURE_MATRIX:
  1591.      for (i=0;i<16;i++) {
  1592.         params[i] = (GLdouble) ctx->TextureMatrix[i];
  1593.      }
  1594.      break;
  1595.       case GL_TEXTURE_STACK_DEPTH:
  1596.      *params = (GLdouble) ctx->TextureStackDepth;
  1597.      break;
  1598.       case GL_UNPACK_ALIGNMENT:
  1599.      *params = (GLdouble) ctx->Unpack.Alignment;
  1600.      break;
  1601.       case GL_UNPACK_LSB_FIRST:
  1602.      *params = (GLdouble) ctx->Unpack.LsbFirst;
  1603.      break;
  1604.       case GL_UNPACK_ROW_LENGTH:
  1605.      *params = (GLdouble) ctx->Unpack.RowLength;
  1606.      break;
  1607.       case GL_UNPACK_SKIP_PIXELS:
  1608.      *params = (GLdouble) ctx->Unpack.SkipPixels;
  1609.      break;
  1610.       case GL_UNPACK_SKIP_ROWS:
  1611.      *params = (GLdouble) ctx->Unpack.SkipRows;
  1612.      break;
  1613.       case GL_UNPACK_SWAP_BYTES:
  1614.      *params = (GLdouble) ctx->Unpack.SwapBytes;
  1615.      break;
  1616.       case GL_UNPACK_SKIP_IMAGES_EXT:
  1617.      *params = (GLdouble) ctx->Unpack.SkipImages;
  1618.      break;
  1619.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  1620.      *params = (GLdouble) ctx->Unpack.ImageHeight;
  1621.      break;
  1622.       case GL_VIEWPORT:
  1623.      params[0] = (GLdouble) ctx->Viewport.X;
  1624.      params[1] = (GLdouble) ctx->Viewport.Y;
  1625.      params[2] = (GLdouble) ctx->Viewport.Width;
  1626.      params[3] = (GLdouble) ctx->Viewport.Height;
  1627.      break;
  1628.       case GL_ZOOM_X:
  1629.      *params = (GLdouble) ctx->Pixel.ZoomX;
  1630.      break;
  1631.       case GL_ZOOM_Y:
  1632.      *params = (GLdouble) ctx->Pixel.ZoomY;
  1633.      break;
  1634.       case GL_VERTEX_ARRAY_SIZE:
  1635.      *params = (GLdouble) ctx->Array.VertexSize;
  1636.      break;
  1637.       case GL_VERTEX_ARRAY_TYPE:
  1638.      *params = BOOL_TO_DOUBLE( ctx->Array.VertexType );
  1639.      break;
  1640.       case GL_VERTEX_ARRAY_STRIDE:
  1641.      *params = (GLdouble) ctx->Array.VertexStride;
  1642.      break;
  1643.       case GL_VERTEX_ARRAY_COUNT_EXT:
  1644.      *params = 0.0;
  1645.      break;
  1646.       case GL_NORMAL_ARRAY_TYPE:
  1647.      *params = BOOL_TO_DOUBLE( ctx->Array.NormalType );
  1648.      break;
  1649.       case GL_NORMAL_ARRAY_STRIDE:
  1650.      *params = (GLdouble) ctx->Array.NormalStride;
  1651.      break;
  1652.       case GL_NORMAL_ARRAY_COUNT_EXT:
  1653.      *params = 0.0;
  1654.      break;
  1655.       case GL_COLOR_ARRAY_SIZE:
  1656.      *params = (GLdouble) ctx->Array.ColorSize;
  1657.      break;
  1658.       case GL_COLOR_ARRAY_TYPE:
  1659.      *params = BOOL_TO_DOUBLE( ctx->Array.ColorType );
  1660.      break;
  1661.       case GL_COLOR_ARRAY_STRIDE:
  1662.      *params = (GLdouble) ctx->Array.ColorStride;
  1663.      break;
  1664.       case GL_COLOR_ARRAY_COUNT_EXT:
  1665.      *params = 0.0;
  1666.      break;
  1667.       case GL_INDEX_ARRAY_TYPE:
  1668.      *params = BOOL_TO_DOUBLE( ctx->Array.IndexType );
  1669.      break;
  1670.       case GL_INDEX_ARRAY_STRIDE:
  1671.      *params = (GLdouble) ctx->Array.IndexStride;
  1672.      break;
  1673.       case GL_INDEX_ARRAY_COUNT_EXT:
  1674.      *params = 0.0;
  1675.      break;
  1676.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  1677.      *params = (GLdouble) ctx->Array.TexCoordSize;
  1678.      break;
  1679.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  1680.      *params = BOOL_TO_DOUBLE( ctx->Array.TexCoordType );
  1681.      break;
  1682.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  1683.      *params = (GLdouble) ctx->Array.TexCoordStride;
  1684.      break;
  1685.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  1686.      *params = 0.0;
  1687.      break;
  1688.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  1689.      *params = (GLdouble) ctx->Array.EdgeFlagStride;
  1690.      break;
  1691.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  1692.      *params = 0.0;
  1693.      break;
  1694.       case GL_TEXTURE_BINDING_1D:
  1695.      *params = (GLdouble) ctx->Texture.Current1D->Name;
  1696.       break;
  1697.       case GL_TEXTURE_BINDING_2D:
  1698.      *params = (GLdouble) ctx->Texture.Current2D->Name;
  1699.       break;
  1700.       case GL_TEXTURE_3D_BINDING_EXT:
  1701.      *params = (GLdouble) ctx->Texture.Current3D->Name;
  1702.       break;
  1703.  
  1704.       default:
  1705.      gl_error( ctx, GL_INVALID_ENUM, "glGetDoublev" );
  1706.    }
  1707. }
  1708.  
  1709.  
  1710.  
  1711.  
  1712. void gl_GetFloatv( GLcontext *ctx, GLenum pname, GLfloat *params )
  1713. {
  1714.    GLuint i;
  1715.  
  1716.    if (INSIDE_BEGIN_END(ctx)) {
  1717.       gl_error( ctx, GL_INVALID_OPERATION, "glGetFloatv" );
  1718.       return;
  1719.    }
  1720.    switch (pname) {
  1721.       case GL_ACCUM_RED_BITS:
  1722.       case GL_ACCUM_GREEN_BITS:
  1723.       case GL_ACCUM_BLUE_BITS:
  1724.       case GL_ACCUM_ALPHA_BITS:
  1725.      *params = (GLfloat) ctx->Visual->AccumBits;
  1726.      break;
  1727.       case GL_ACCUM_CLEAR_VALUE:
  1728.      params[0] = ctx->Accum.ClearColor[0];
  1729.      params[1] = ctx->Accum.ClearColor[1];
  1730.      params[2] = ctx->Accum.ClearColor[2];
  1731.      params[3] = ctx->Accum.ClearColor[3];
  1732.      break;
  1733.       case GL_ALPHA_BIAS:
  1734.      *params = ctx->Pixel.AlphaBias;
  1735.      break;
  1736.       case GL_ALPHA_BITS:
  1737.      *params = (GLfloat) ctx->Visual->AlphaBits;
  1738.      break;
  1739.       case GL_ALPHA_SCALE:
  1740.      *params = ctx->Pixel.AlphaScale;
  1741.      break;
  1742.       case GL_ALPHA_TEST:
  1743.      *params = (GLfloat) ctx->Color.AlphaEnabled;
  1744.      break;
  1745.       case GL_ALPHA_TEST_FUNC:
  1746.      *params = BOOL_TO_FLOAT( ctx->Color.AlphaFunc );
  1747.      break;
  1748.       case GL_ALPHA_TEST_REF:
  1749.      *params = (GLfloat) ctx->Color.AlphaRef;
  1750.      break;
  1751.       case GL_ATTRIB_STACK_DEPTH:
  1752.      *params = (GLfloat ) ctx->AttribStackDepth;
  1753.      break;
  1754.       case GL_AUTO_NORMAL:
  1755.      *params = (GLfloat) ctx->Eval.AutoNormal;
  1756.      break;
  1757.       case GL_AUX_BUFFERS:
  1758.      *params = (GLfloat) NUM_AUX_BUFFERS;
  1759.      break;
  1760.       case GL_BLEND:
  1761.      *params = (GLfloat) ctx->Color.BlendEnabled;
  1762.      break;
  1763.       case GL_BLEND_DST:
  1764.      *params = BOOL_TO_FLOAT( ctx->Color.BlendDst );
  1765.      break;
  1766.       case GL_BLEND_SRC:
  1767.      *params = BOOL_TO_FLOAT( ctx->Color.BlendSrc );
  1768.      break;
  1769.       case GL_BLEND_EQUATION_EXT:
  1770.      *params = BOOL_TO_FLOAT( ctx->Color.BlendEquation );
  1771.      break;
  1772.       case GL_BLEND_COLOR_EXT:
  1773.      params[0] = ctx->Color.BlendColor[0];
  1774.      params[1] = ctx->Color.BlendColor[1];
  1775.      params[2] = ctx->Color.BlendColor[2];
  1776.      params[3] = ctx->Color.BlendColor[3];
  1777.      break;
  1778.       case GL_BLUE_BIAS:
  1779.      *params = ctx->Pixel.BlueBias;
  1780.      break;
  1781.       case GL_BLUE_BITS:
  1782.      *params = (GLfloat) ctx->Visual->BlueBits;
  1783.      break;
  1784.       case GL_BLUE_SCALE:
  1785.      *params = ctx->Pixel.BlueScale;
  1786.      break;
  1787.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  1788.      *params = (GLfloat) ctx->ClientAttribStackDepth;
  1789.      break;
  1790.       case GL_CLIP_PLANE0:
  1791.       case GL_CLIP_PLANE1:
  1792.       case GL_CLIP_PLANE2:
  1793.       case GL_CLIP_PLANE3:
  1794.       case GL_CLIP_PLANE4:
  1795.       case GL_CLIP_PLANE5:
  1796.      *params = (GLfloat) ctx->Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  1797.      break;
  1798.       case GL_COLOR_CLEAR_VALUE:
  1799.      params[0] = (GLfloat) ctx->Color.ClearColor[0];
  1800.      params[1] = (GLfloat) ctx->Color.ClearColor[1];
  1801.      params[2] = (GLfloat) ctx->Color.ClearColor[2];
  1802.      params[3] = (GLfloat) ctx->Color.ClearColor[3];
  1803.      break;
  1804.       case GL_COLOR_MATERIAL:
  1805.      *params = (GLfloat) ctx->Light.ColorMaterialEnabled;
  1806.      break;
  1807.       case GL_COLOR_MATERIAL_FACE:
  1808.      *params = BOOL_TO_FLOAT( ctx->Light.ColorMaterialFace );
  1809.      break;
  1810.       case GL_COLOR_MATERIAL_PARAMETER:
  1811.      *params = BOOL_TO_FLOAT( ctx->Light.ColorMaterialMode );
  1812.      break;
  1813.       case GL_COLOR_WRITEMASK:
  1814.      params[0] = (ctx->Color.ColorMask & 8) ? 1.0F : 0.0F;
  1815.      params[1] = (ctx->Color.ColorMask & 4) ? 1.0F : 0.0F;
  1816.      params[2] = (ctx->Color.ColorMask & 2) ? 1.0F : 0.0F;
  1817.      params[3] = (ctx->Color.ColorMask & 1) ? 1.0F : 0.0F;
  1818.      break;
  1819.       case GL_CULL_FACE:
  1820.      *params = (GLfloat) ctx->Polygon.CullFlag;
  1821.      break;
  1822.       case GL_CULL_FACE_MODE:
  1823.      *params = BOOL_TO_FLOAT( ctx->Polygon.CullFaceMode );
  1824.      break;
  1825.       case GL_CURRENT_COLOR:
  1826.      params[0] = ctx->Current.ByteColor[0] * ctx->Visual->InvRedScale;
  1827.      params[1] = ctx->Current.ByteColor[1] * ctx->Visual->InvGreenScale;
  1828.      params[2] = ctx->Current.ByteColor[2] * ctx->Visual->InvBlueScale;
  1829.      params[3] = ctx->Current.ByteColor[3] * ctx->Visual->InvAlphaScale;
  1830.      break;
  1831.       case GL_CURRENT_INDEX:
  1832.      *params = (GLfloat) ctx->Current.Index;
  1833.      break;
  1834.       case GL_CURRENT_NORMAL:
  1835.      params[0] = ctx->Current.Normal[0];
  1836.      params[1] = ctx->Current.Normal[1];
  1837.      params[2] = ctx->Current.Normal[2];
  1838.      break;
  1839.       case GL_CURRENT_RASTER_COLOR:
  1840.      params[0] = ctx->Current.RasterColor[0];
  1841.      params[1] = ctx->Current.RasterColor[1];
  1842.      params[2] = ctx->Current.RasterColor[2];
  1843.      params[3] = ctx->Current.RasterColor[3];
  1844.      break;
  1845.       case GL_CURRENT_RASTER_DISTANCE:
  1846.      params[0] = ctx->Current.RasterDistance;
  1847.      break;
  1848.       case GL_CURRENT_RASTER_INDEX:
  1849.      *params = (GLfloat) ctx->Current.RasterIndex;
  1850.      break;
  1851.       case GL_CURRENT_RASTER_POSITION:
  1852.      params[0] = ctx->Current.RasterPos[0];
  1853.      params[1] = ctx->Current.RasterPos[1];
  1854.      params[2] = ctx->Current.RasterPos[2];
  1855.      params[3] = ctx->Current.RasterPos[3];
  1856.      break;
  1857.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  1858.      params[0] = ctx->Current.RasterTexCoord[0];
  1859.      params[1] = ctx->Current.RasterTexCoord[1];
  1860.      params[2] = ctx->Current.RasterTexCoord[2];
  1861.      params[3] = ctx->Current.RasterTexCoord[3];
  1862.      break;
  1863.       case GL_CURRENT_RASTER_POSITION_VALID:
  1864.      *params = (GLfloat) ctx->Current.RasterPosValid;
  1865.      break;
  1866.       case GL_CURRENT_TEXTURE_COORDS:
  1867.      params[0] = (GLfloat) ctx->Current.TexCoord[0];
  1868.      params[1] = (GLfloat) ctx->Current.TexCoord[1];
  1869.      params[2] = (GLfloat) ctx->Current.TexCoord[2];
  1870.      params[3] = (GLfloat) ctx->Current.TexCoord[3];
  1871.      break;
  1872.       case GL_DEPTH_BIAS:
  1873.      *params = (GLfloat) ctx->Pixel.DepthBias;
  1874.      break;
  1875.       case GL_DEPTH_BITS:
  1876.      *params = (GLfloat) ctx->Visual->DepthBits;
  1877.      break;
  1878.       case GL_DEPTH_CLEAR_VALUE:
  1879.      *params = (GLfloat) ctx->Depth.Clear;
  1880.      break;
  1881.       case GL_DEPTH_FUNC:
  1882.      *params = BOOL_TO_FLOAT( ctx->Depth.Func );
  1883.      break;
  1884.       case GL_DEPTH_RANGE:
  1885.      params[0] = (GLfloat) ctx->Viewport.Near;
  1886.      params[1] = (GLfloat) ctx->Viewport.Far;
  1887.      break;
  1888.       case GL_DEPTH_SCALE:
  1889.      *params = (GLfloat) ctx->Pixel.DepthScale;
  1890.      break;
  1891.       case GL_DEPTH_TEST:
  1892.      *params = (GLfloat) ctx->Depth.Test;
  1893.      break;
  1894.       case GL_DEPTH_WRITEMASK:
  1895.      *params = (GLfloat) ctx->Depth.Mask;
  1896.      break;
  1897.       case GL_DITHER:
  1898.      *params = (GLfloat) ctx->Color.DitherFlag;
  1899.      break;
  1900.       case GL_DOUBLEBUFFER:
  1901.      *params = (GLfloat) ctx->Visual->DBflag;
  1902.      break;
  1903.       case GL_DRAW_BUFFER:
  1904.      *params = BOOL_TO_FLOAT( ctx->Color.DrawBuffer );
  1905.      break;
  1906.       case GL_EDGE_FLAG:
  1907.      *params = (GLfloat) ctx->Current.EdgeFlag;
  1908.      break;
  1909.       case GL_FEEDBACK_BUFFER_SIZE:
  1910.      /* TODO: is this right?  Or, return number of entries in buffer? */
  1911.      *params = (GLfloat) ctx->Feedback.BufferSize;
  1912.      break;
  1913.       case GL_FEEDBACK_BUFFER_TYPE:
  1914.      *params = BOOL_TO_FLOAT( ctx->Feedback.Type );
  1915.      break;
  1916.       case GL_FOG:
  1917.      *params = (GLfloat) ctx->Fog.Enabled;
  1918.      break;
  1919.       case GL_FOG_COLOR:
  1920.      params[0] = ctx->Fog.Color[0];
  1921.      params[1] = ctx->Fog.Color[1];
  1922.      params[2] = ctx->Fog.Color[2];
  1923.      params[3] = ctx->Fog.Color[3];
  1924.      break;
  1925.       case GL_FOG_DENSITY:
  1926.      *params = ctx->Fog.Density;
  1927.      break;
  1928.       case GL_FOG_END:
  1929.      *params = ctx->Fog.End;
  1930.      break;
  1931.       case GL_FOG_HINT:
  1932.      *params = BOOL_TO_FLOAT( ctx->Hint.Fog );
  1933.      break;
  1934.       case GL_FOG_INDEX:
  1935.      *params = ctx->Fog.Index;
  1936.      break;
  1937.       case GL_FOG_MODE:
  1938.      *params = BOOL_TO_FLOAT( ctx->Fog.Mode );
  1939.      break;
  1940.       case GL_FOG_START:
  1941.      *params = ctx->Fog.Start;
  1942.      break;
  1943.       case GL_FRONT_FACE:
  1944.      *params = BOOL_TO_FLOAT( ctx->Polygon.FrontFace );
  1945.      break;
  1946.       case GL_GREEN_BIAS:
  1947.      *params = (GLfloat) ctx->Pixel.GreenBias;
  1948.      break;
  1949.       case GL_GREEN_BITS:
  1950.      *params = (GLfloat) ctx->Visual->GreenBits;
  1951.      break;
  1952.       case GL_GREEN_SCALE:
  1953.      *params = (GLfloat) ctx->Pixel.GreenScale;
  1954.      break;
  1955.       case GL_INDEX_BITS:
  1956.      *params = (GLfloat) ctx->Visual->IndexBits;
  1957.      break;
  1958.       case GL_INDEX_CLEAR_VALUE:
  1959.      *params = (GLfloat) ctx->Color.ClearIndex;
  1960.      break;
  1961.       case GL_INDEX_MODE:
  1962.      *params = ctx->Visual->RGBAflag ? 0.0F : 1.0F;
  1963.      break;
  1964.       case GL_INDEX_OFFSET:
  1965.      *params = (GLfloat) ctx->Pixel.IndexOffset;
  1966.      break;
  1967.       case GL_INDEX_SHIFT:
  1968.      *params = (GLfloat) ctx->Pixel.IndexShift;
  1969.      break;
  1970.       case GL_INDEX_WRITEMASK:
  1971.      *params = (GLfloat) ctx->Color.IndexMask;
  1972.      break;
  1973.       case GL_LIGHT0:
  1974.       case GL_LIGHT1:
  1975.       case GL_LIGHT2:
  1976.       case GL_LIGHT3:
  1977.       case GL_LIGHT4:
  1978.       case GL_LIGHT5:
  1979.       case GL_LIGHT6:
  1980.       case GL_LIGHT7:
  1981.      *params = (GLfloat) ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  1982.      break;
  1983.       case GL_LIGHTING:
  1984.      *params = (GLfloat) ctx->Light.Enabled;
  1985.      break;
  1986.       case GL_LIGHT_MODEL_AMBIENT:
  1987.      params[0] = ctx->Light.Model.Ambient[0];
  1988.      params[1] = ctx->Light.Model.Ambient[1];
  1989.      params[2] = ctx->Light.Model.Ambient[2];
  1990.      params[3] = ctx->Light.Model.Ambient[3];
  1991.      break;
  1992.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  1993.      *params = (GLfloat) ctx->Light.Model.LocalViewer;
  1994.      break;
  1995.       case GL_LIGHT_MODEL_TWO_SIDE:
  1996.      *params = (GLfloat) ctx->Light.Model.TwoSide;
  1997.      break;
  1998.       case GL_LINE_SMOOTH:
  1999.      *params = (GLfloat) ctx->Line.SmoothFlag;
  2000.      break;
  2001.       case GL_LINE_SMOOTH_HINT:
  2002.      *params = BOOL_TO_FLOAT( ctx->Hint.LineSmooth );
  2003.      break;
  2004.       case GL_LINE_STIPPLE:
  2005.      *params = (GLfloat) ctx->Line.StippleFlag;
  2006.      break;
  2007.       case GL_LINE_STIPPLE_PATTERN:
  2008.      *params = (GLfloat) ctx->Line.StipplePattern;
  2009.      break;
  2010.       case GL_LINE_STIPPLE_REPEAT:
  2011.      *params = (GLfloat) ctx->Line.StippleFactor;
  2012.      break;
  2013.       case GL_LINE_WIDTH:
  2014.      *params = (GLfloat) ctx->Line.Width;
  2015.      break;
  2016.       case GL_LINE_WIDTH_GRANULARITY:
  2017.      *params = (GLfloat) LINE_WIDTH_GRANULARITY;
  2018.      break;
  2019.       case GL_LINE_WIDTH_RANGE:
  2020.      params[0] = (GLfloat) MIN_LINE_WIDTH;
  2021.      params[1] = (GLfloat) MAX_LINE_WIDTH;
  2022.      break;
  2023.       case GL_LIST_BASE:
  2024.      *params = (GLfloat) ctx->List.ListBase;
  2025.      break;
  2026.       case GL_LIST_INDEX:
  2027.      *params = (GLfloat) gl_list_index();
  2028.      break;
  2029.       case GL_LIST_MODE:
  2030.      *params = ctx->ExecuteFlag ? BOOL_TO_FLOAT(GL_COMPILE_AND_EXECUTE)
  2031.                   : BOOL_TO_FLOAT(GL_COMPILE);
  2032.      break;
  2033.       case GL_INDEX_LOGIC_OP:
  2034.      *params = (GLfloat) ctx->Color.IndexLogicOpEnabled;
  2035.      break;
  2036.       case GL_COLOR_LOGIC_OP:
  2037.      *params = (GLfloat) ctx->Color.ColorLogicOpEnabled;
  2038.      break;
  2039.       case GL_LOGIC_OP_MODE:
  2040.      *params = BOOL_TO_FLOAT( ctx->Color.LogicOp );
  2041.      break;
  2042.       case GL_MAP1_COLOR_4:
  2043.      *params = (GLfloat) ctx->Eval.Map1Color4;
  2044.      break;
  2045.       case GL_MAP1_GRID_DOMAIN:
  2046.      params[0] = ctx->Eval.MapGrid1u1;
  2047.      params[1] = ctx->Eval.MapGrid1u2;
  2048.      break;
  2049.       case GL_MAP1_GRID_SEGMENTS:
  2050.      *params = (GLfloat) ctx->Eval.MapGrid1un;
  2051.      break;
  2052.       case GL_MAP1_INDEX:
  2053.      *params = (GLfloat) ctx->Eval.Map1Index;
  2054.      break;
  2055.       case GL_MAP1_NORMAL:
  2056.      *params = (GLfloat) ctx->Eval.Map1Normal;
  2057.      break;
  2058.       case GL_MAP1_TEXTURE_COORD_1:
  2059.      *params = (GLfloat) ctx->Eval.Map1TextureCoord1;
  2060.      break;
  2061.       case GL_MAP1_TEXTURE_COORD_2:
  2062.      *params = (GLfloat) ctx->Eval.Map1TextureCoord2;
  2063.      break;
  2064.       case GL_MAP1_TEXTURE_COORD_3:
  2065.      *params = (GLfloat) ctx->Eval.Map1TextureCoord3;
  2066.      break;
  2067.       case GL_MAP1_TEXTURE_COORD_4:
  2068.      *params = (GLfloat) ctx->Eval.Map1TextureCoord4;
  2069.      break;
  2070.       case GL_MAP1_VERTEX_3:
  2071.      *params = (GLfloat) ctx->Eval.Map1Vertex3;
  2072.      break;
  2073.       case GL_MAP1_VERTEX_4:
  2074.      *params = (GLfloat) ctx->Eval.Map1Vertex4;
  2075.      break;
  2076.       case GL_MAP2_COLOR_4:
  2077.      *params = (GLfloat) ctx->Eval.Map2Color4;
  2078.      break;
  2079.       case GL_MAP2_GRID_DOMAIN:
  2080.      params[0] = ctx->Eval.MapGrid2u1;
  2081.      params[1] = ctx->Eval.MapGrid2u2;
  2082.      params[2] = ctx->Eval.MapGrid2v1;
  2083.      params[3] = ctx->Eval.MapGrid2v2;
  2084.      break;
  2085.       case GL_MAP2_GRID_SEGMENTS:
  2086.      params[0] = (GLfloat) ctx->Eval.MapGrid2un;
  2087.      params[1] = (GLfloat) ctx->Eval.MapGrid2vn;
  2088.      break;
  2089.       case GL_MAP2_INDEX:
  2090.      *params = (GLfloat) ctx->Eval.Map2Index;
  2091.      break;
  2092.       case GL_MAP2_NORMAL:
  2093.      *params = (GLfloat) ctx->Eval.Map2Normal;
  2094.      break;
  2095.       case GL_MAP2_TEXTURE_COORD_1:
  2096.      *params = ctx->Eval.Map2TextureCoord1;
  2097.      break;
  2098.       case GL_MAP2_TEXTURE_COORD_2:
  2099.      *params = ctx->Eval.Map2TextureCoord2;
  2100.      break;
  2101.       case GL_MAP2_TEXTURE_COORD_3:
  2102.      *params = ctx->Eval.Map2TextureCoord3;
  2103.      break;
  2104.       case GL_MAP2_TEXTURE_COORD_4:
  2105.      *params = ctx->Eval.Map2TextureCoord4;
  2106.      break;
  2107.       case GL_MAP2_VERTEX_3:
  2108.      *params = (GLfloat) ctx->Eval.Map2Vertex3;
  2109.      break;
  2110.       case GL_MAP2_VERTEX_4:
  2111.      *params = (GLfloat) ctx->Eval.Map2Vertex4;
  2112.      break;
  2113.       case GL_MAP_COLOR:
  2114.      *params = (GLfloat) ctx->Pixel.MapColorFlag;
  2115.      break;
  2116.       case GL_MAP_STENCIL:
  2117.      *params = (GLfloat) ctx->Pixel.MapStencilFlag;
  2118.      break;
  2119.       case GL_MATRIX_MODE:
  2120.      *params = BOOL_TO_FLOAT( ctx->Transform.MatrixMode );
  2121.      break;
  2122.       case GL_MAX_ATTRIB_STACK_DEPTH:
  2123.      *params = (GLfloat) MAX_ATTRIB_STACK_DEPTH;
  2124.      break;
  2125.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  2126.      *params = (GLfloat) MAX_CLIENT_ATTRIB_STACK_DEPTH;
  2127.      break;
  2128.       case GL_MAX_CLIP_PLANES:
  2129.      *params = (GLfloat) MAX_CLIP_PLANES;
  2130.      break;
  2131.       case GL_MAX_EVAL_ORDER:
  2132.      *params = (GLfloat) MAX_EVAL_ORDER;
  2133.      break;
  2134.       case GL_MAX_LIGHTS:
  2135.      *params = (GLfloat) MAX_LIGHTS;
  2136.      break;
  2137.       case GL_MAX_LIST_NESTING:
  2138.      *params = (GLfloat) MAX_LIST_NESTING;
  2139.      break;
  2140.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  2141.      *params = (GLfloat) MAX_MODELVIEW_STACK_DEPTH;
  2142.      break;
  2143.       case GL_MAX_NAME_STACK_DEPTH:
  2144.      *params = (GLfloat) MAX_NAME_STACK_DEPTH;
  2145.      break;
  2146.       case GL_MAX_PIXEL_MAP_TABLE:
  2147.      *params = (GLfloat) MAX_PIXEL_MAP_TABLE;
  2148.      break;
  2149.       case GL_MAX_PROJECTION_STACK_DEPTH:
  2150.      *params = (GLfloat) MAX_PROJECTION_STACK_DEPTH;
  2151.      break;
  2152.       case GL_MAX_TEXTURE_SIZE:
  2153.      *params = (GLfloat) MAX_TEXTURE_SIZE;
  2154.      break;
  2155.       case GL_MAX_TEXTURE_STACK_DEPTH:
  2156.      *params = (GLfloat) MAX_TEXTURE_STACK_DEPTH;
  2157.      break;
  2158.       case GL_MAX_VIEWPORT_DIMS:
  2159.      params[0] = (GLfloat) MAX_WIDTH;
  2160.      params[1] = (GLfloat) MAX_HEIGHT;
  2161.      break;
  2162.       case GL_MODELVIEW_MATRIX:
  2163.      for (i=0;i<16;i++) {
  2164.         params[i] = ctx->ModelViewMatrix[i];
  2165.      }
  2166.      break;
  2167.       case GL_MODELVIEW_STACK_DEPTH:
  2168.      *params = (GLfloat) ctx->ModelViewStackDepth;
  2169.      break;
  2170.       case GL_NAME_STACK_DEPTH:
  2171.      *params = (GLfloat) ctx->Select.NameStackDepth;
  2172.      break;
  2173.       case GL_NORMALIZE:
  2174.      *params = (GLfloat) ctx->Transform.Normalize;
  2175.      break;
  2176.       case GL_PACK_ALIGNMENT:
  2177.      *params = (GLfloat) ctx->Pack.Alignment;
  2178.      break;
  2179.       case GL_PACK_LSB_FIRST:
  2180.      *params = (GLfloat) ctx->Pack.LsbFirst;
  2181.      break;
  2182.       case GL_PACK_ROW_LENGTH:
  2183.      *params = (GLfloat) ctx->Pack.RowLength;
  2184.      break;
  2185.       case GL_PACK_SKIP_PIXELS:
  2186.      *params = (GLfloat) ctx->Pack.SkipPixels;
  2187.      break;
  2188.       case GL_PACK_SKIP_ROWS:
  2189.      *params = (GLfloat) ctx->Pack.SkipRows;
  2190.      break;
  2191.       case GL_PACK_SWAP_BYTES:
  2192.      *params = (GLfloat) ctx->Pack.SwapBytes;
  2193.      break;
  2194.       case GL_PACK_SKIP_IMAGES_EXT:
  2195.      *params = (GLfloat) ctx->Pack.SkipImages;
  2196.      break;
  2197.       case GL_PACK_IMAGE_HEIGHT_EXT:
  2198.      *params = (GLfloat) ctx->Pack.ImageHeight;
  2199.      break;
  2200.       case GL_PERSPECTIVE_CORRECTION_HINT:
  2201.      *params = BOOL_TO_FLOAT( ctx->Hint.PerspectiveCorrection );
  2202.      break;
  2203.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  2204.      *params = (GLfloat) ctx->Pixel.MapAtoAsize;
  2205.      break;
  2206.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  2207.      *params = (GLfloat) ctx->Pixel.MapBtoBsize;
  2208.      break;
  2209.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  2210.      *params = (GLfloat) ctx->Pixel.MapGtoGsize;
  2211.      break;
  2212.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  2213.      *params = (GLfloat) ctx->Pixel.MapItoAsize;
  2214.      break;
  2215.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  2216.      *params = (GLfloat) ctx->Pixel.MapItoBsize;
  2217.      break;
  2218.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  2219.      *params = (GLfloat) ctx->Pixel.MapItoGsize;
  2220.      break;
  2221.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  2222.      *params = (GLfloat) ctx->Pixel.MapItoIsize;
  2223.      break;
  2224.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  2225.      *params = (GLfloat) ctx->Pixel.MapItoRsize;
  2226.      break;
  2227.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  2228.      *params = (GLfloat) ctx->Pixel.MapRtoRsize;
  2229.      break;
  2230.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  2231.      *params = (GLfloat) ctx->Pixel.MapStoSsize;
  2232.      break;
  2233.       case GL_POINT_SIZE:
  2234.      *params = (GLfloat) ctx->Point.Size;
  2235.      break;
  2236.       case GL_POINT_SIZE_GRANULARITY:
  2237.      *params = (GLfloat) POINT_SIZE_GRANULARITY;
  2238.      break;
  2239.       case GL_POINT_SIZE_RANGE:
  2240.      params[0] = (GLfloat) MIN_POINT_SIZE;
  2241.      params[1] = (GLfloat) MAX_POINT_SIZE;
  2242.      break;
  2243.       case GL_POINT_SMOOTH:
  2244.      *params = (GLfloat) ctx->Point.SmoothFlag;
  2245.      break;
  2246.       case GL_POINT_SMOOTH_HINT:
  2247.      *params = BOOL_TO_FLOAT( ctx->Hint.PointSmooth );
  2248.      break;
  2249.       case GL_POINT_SIZE_MIN_EXT:
  2250.      *params = (GLfloat) (ctx->Point.MinSize);
  2251.      break;
  2252.       case GL_POINT_SIZE_MAX_EXT:
  2253.      *params = (GLfloat) (ctx->Point.MaxSize);
  2254.      break;
  2255.       case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
  2256.      *params = (GLfloat) (ctx->Point.Threshold);
  2257.      break;
  2258.       case GL_DISTANCE_ATTENUATION_EXT:
  2259.      params[0] = (GLfloat) (ctx->Point.Params[0]);
  2260.      params[1] = (GLfloat) (ctx->Point.Params[1]);
  2261.      params[2] = (GLfloat) (ctx->Point.Params[2]);
  2262.      break;
  2263.       case GL_POLYGON_MODE:
  2264.      params[0] = BOOL_TO_FLOAT( ctx->Polygon.FrontMode );
  2265.      params[1] = BOOL_TO_FLOAT( ctx->Polygon.BackMode );
  2266.      break;
  2267. #ifdef GL_EXT_polygon_offset
  2268.       case GL_POLYGON_OFFSET_BIAS_EXT:
  2269.      *params = ctx->Polygon.OffsetUnits;
  2270.      break;
  2271. #endif
  2272.       case GL_POLYGON_OFFSET_FACTOR:
  2273.      *params = ctx->Polygon.OffsetFactor;
  2274.      break;
  2275.       case GL_POLYGON_OFFSET_UNITS:
  2276.      *params = ctx->Polygon.OffsetUnits;
  2277.      break;
  2278.       case GL_POLYGON_SMOOTH:
  2279.      *params = (GLfloat) ctx->Polygon.SmoothFlag;
  2280.      break;
  2281.       case GL_POLYGON_SMOOTH_HINT:
  2282.      *params = BOOL_TO_FLOAT( ctx->Hint.PolygonSmooth );
  2283.      break;
  2284.       case GL_POLYGON_STIPPLE:
  2285.      for (i=0;i<32;i++) {           /* RIGHT? */
  2286.         params[i] = (GLfloat) ctx->PolygonStipple[i];
  2287.      }
  2288.      break;
  2289.       case GL_PROJECTION_MATRIX:
  2290.      for (i=0;i<16;i++) {
  2291.         params[i] = ctx->ProjectionMatrix[i];
  2292.      }
  2293.      break;
  2294.       case GL_PROJECTION_STACK_DEPTH:
  2295.      *params = (GLfloat) ctx->ProjectionStackDepth;
  2296.      break;
  2297.       case GL_READ_BUFFER:
  2298.      *params = BOOL_TO_FLOAT( ctx->Pixel.ReadBuffer );
  2299.      break;
  2300.       case GL_RED_BIAS:
  2301.      *params = ctx->Pixel.RedBias;
  2302.      break;
  2303.       case GL_RED_BITS:
  2304.      *params = (GLfloat) ctx->Visual->RedBits;
  2305.      break;
  2306.       case GL_RED_SCALE:
  2307.      *params = ctx->Pixel.RedScale;
  2308.      break;
  2309.       case GL_RENDER_MODE:
  2310.      *params = BOOL_TO_FLOAT( ctx->RenderMode );
  2311.      break;
  2312.       case GL_RGBA_MODE:
  2313.      *params = (GLfloat) ctx->Visual->RGBAflag;
  2314.      break;
  2315.       case GL_SCISSOR_BOX:
  2316.      params[0] = (GLfloat) ctx->Scissor.X;
  2317.      params[1] = (GLfloat) ctx->Scissor.Y;
  2318.      params[2] = (GLfloat) ctx->Scissor.Width;
  2319.      params[3] = (GLfloat) ctx->Scissor.Height;
  2320.      break;
  2321.       case GL_SCISSOR_TEST:
  2322.      *params = (GLfloat) ctx->Scissor.Enabled;
  2323.      break;
  2324.       case GL_SHADE_MODEL:
  2325.      *params = BOOL_TO_FLOAT( ctx->Light.ShadeModel );
  2326.      break;
  2327.       case GL_SHARED_TEXTURE_PALETTE_EXT:
  2328.      *params = (GLfloat) ctx->Texture.SharedPalette;
  2329.      break;
  2330.       case GL_STENCIL_BITS:
  2331.      *params = (GLfloat) ctx->Visual->StencilBits;
  2332.      break;
  2333.       case GL_STENCIL_CLEAR_VALUE:
  2334.      *params = (GLfloat) ctx->Stencil.Clear;
  2335.      break;
  2336.       case GL_STENCIL_FAIL:
  2337.      *params = BOOL_TO_FLOAT( ctx->Stencil.FailFunc );
  2338.      break;
  2339.       case GL_STENCIL_FUNC:
  2340.      *params = BOOL_TO_FLOAT( ctx->Stencil.Function );
  2341.      break;
  2342.       case GL_STENCIL_PASS_DEPTH_FAIL:
  2343.      *params = BOOL_TO_FLOAT( ctx->Stencil.ZFailFunc );
  2344.      break;
  2345.       case GL_STENCIL_PASS_DEPTH_PASS:
  2346.      *params = BOOL_TO_FLOAT( ctx->Stencil.ZPassFunc );
  2347.      break;
  2348.       case GL_STENCIL_REF:
  2349.      *params = (GLfloat) ctx->Stencil.Ref;
  2350.      break;
  2351.       case GL_STENCIL_TEST:
  2352.      *params = (GLfloat) ctx->Stencil.Enabled;
  2353.      break;
  2354.       case GL_STENCIL_VALUE_MASK:
  2355.      *params = (GLfloat) ctx->Stencil.ValueMask;
  2356.      break;
  2357.       case GL_STENCIL_WRITEMASK:
  2358.      *params = (GLfloat) ctx->Stencil.WriteMask;
  2359.      break;
  2360.       case GL_STEREO:
  2361.      *params = 0.0F;  /* TODO */
  2362.      break;
  2363.       case GL_SUBPIXEL_BITS:
  2364.      *params = 0.0F;  /* TODO */
  2365.      break;
  2366.       case GL_TEXTURE_1D:
  2367.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? 1.0 : 0.0;
  2368.      break;
  2369.       case GL_TEXTURE_2D:
  2370.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? 1.0 : 0.0;
  2371.      break;
  2372.       case GL_TEXTURE_3D_EXT:
  2373.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? 1.0 : 0.0;
  2374.      break;
  2375.       case GL_TEXTURE_ENV_COLOR:
  2376.      params[0] = ctx->Texture.EnvColor[0];
  2377.      params[1] = ctx->Texture.EnvColor[1];
  2378.      params[2] = ctx->Texture.EnvColor[2];
  2379.      params[3] = ctx->Texture.EnvColor[3];
  2380.      break;
  2381.       case GL_TEXTURE_ENV_MODE:
  2382.      *params = BOOL_TO_FLOAT( ctx->Texture.EnvMode );
  2383.      break;
  2384.       case GL_TEXTURE_GEN_S:
  2385.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? 1.0 : 0.0;
  2386.      break;
  2387.       case GL_TEXTURE_GEN_T:
  2388.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? 1.0 : 0.0;
  2389.      break;
  2390.       case GL_TEXTURE_GEN_R:
  2391.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? 1.0 : 0.0;
  2392.      break;
  2393.       case GL_TEXTURE_GEN_Q:
  2394.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? 1.0 : 0.0;
  2395.      break;
  2396.       case GL_TEXTURE_MATRIX:
  2397.      for (i=0;i<16;i++) {
  2398.         params[i] = ctx->TextureMatrix[i];
  2399.      }
  2400.      break;
  2401.       case GL_TEXTURE_STACK_DEPTH:
  2402.      *params = (GLfloat) ctx->TextureStackDepth;
  2403.      break;
  2404.       case GL_UNPACK_ALIGNMENT:
  2405.      *params = (GLfloat) ctx->Unpack.Alignment;
  2406.      break;
  2407.       case GL_UNPACK_LSB_FIRST:
  2408.      *params = (GLfloat) ctx->Unpack.LsbFirst;
  2409.      break;
  2410.       case GL_UNPACK_ROW_LENGTH:
  2411.      *params = (GLfloat) ctx->Unpack.RowLength;
  2412.      break;
  2413.       case GL_UNPACK_SKIP_PIXELS:
  2414.      *params = (GLfloat) ctx->Unpack.SkipPixels;
  2415.      break;
  2416.       case GL_UNPACK_SKIP_ROWS:
  2417.      *params = (GLfloat) ctx->Unpack.SkipRows;
  2418.      break;
  2419.       case GL_UNPACK_SWAP_BYTES:
  2420.      *params = (GLfloat) ctx->Unpack.SwapBytes;
  2421.      break;
  2422.       case GL_UNPACK_SKIP_IMAGES_EXT:
  2423.      *params = (GLfloat) ctx->Unpack.SkipImages;
  2424.      break;
  2425.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  2426.      *params = (GLfloat) ctx->Unpack.ImageHeight;
  2427.      break;
  2428.       case GL_VIEWPORT:
  2429.      params[0] = (GLfloat) ctx->Viewport.X;
  2430.      params[1] = (GLfloat) ctx->Viewport.Y;
  2431.      params[2] = (GLfloat) ctx->Viewport.Width;
  2432.      params[3] = (GLfloat) ctx->Viewport.Height;
  2433.      break;
  2434.       case GL_ZOOM_X:
  2435.      *params = (GLfloat) ctx->Pixel.ZoomX;
  2436.      break;
  2437.       case GL_ZOOM_Y:
  2438.      *params = (GLfloat) ctx->Pixel.ZoomY;
  2439.      break;
  2440.       case GL_VERTEX_ARRAY_SIZE:
  2441.      *params = (GLfloat) ctx->Array.VertexSize;
  2442.      break;
  2443.       case GL_VERTEX_ARRAY_TYPE:
  2444.      *params = BOOL_TO_FLOAT( ctx->Array.VertexType );
  2445.      break;
  2446.       case GL_VERTEX_ARRAY_STRIDE:
  2447.      *params = (GLfloat) ctx->Array.VertexStride;
  2448.      break;
  2449.       case GL_VERTEX_ARRAY_COUNT_EXT:
  2450.      *params = 0.0;
  2451.      break;
  2452.       case GL_NORMAL_ARRAY_TYPE:
  2453.      *params = BOOL_TO_FLOAT( ctx->Array.NormalType );
  2454.      break;
  2455.       case GL_NORMAL_ARRAY_STRIDE:
  2456.      *params = (GLfloat) ctx->Array.NormalStride;
  2457.      break;
  2458.       case GL_NORMAL_ARRAY_COUNT_EXT:
  2459.      *params = 0.0;
  2460.      break;
  2461.       case GL_COLOR_ARRAY_SIZE:
  2462.      *params = (GLfloat) ctx->Array.ColorSize;
  2463.      break;
  2464.       case GL_COLOR_ARRAY_TYPE:
  2465.      *params = BOOL_TO_FLOAT( ctx->Array.ColorType );
  2466.      break;
  2467.       case GL_COLOR_ARRAY_STRIDE:
  2468.      *params = (GLfloat) ctx->Array.ColorStride;
  2469.      break;
  2470.       case GL_COLOR_ARRAY_COUNT_EXT:
  2471.      *params = 0.0;
  2472.      break;
  2473.       case GL_INDEX_ARRAY_TYPE:
  2474.      *params = BOOL_TO_FLOAT( ctx->Array.IndexType );
  2475.      break;
  2476.       case GL_INDEX_ARRAY_STRIDE:
  2477.      *params = (GLfloat) ctx->Array.IndexStride;
  2478.      break;
  2479.       case GL_INDEX_ARRAY_COUNT_EXT:
  2480.      *params = 0.0;
  2481.      break;
  2482.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  2483.      *params = (GLfloat) ctx->Array.TexCoordSize;
  2484.      break;
  2485.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  2486.      *params = BOOL_TO_FLOAT( ctx->Array.TexCoordType );
  2487.      break;
  2488.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  2489.      *params = (GLfloat) ctx->Array.TexCoordStride;
  2490.      break;
  2491.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  2492.      *params = 0.0;
  2493.      break;
  2494.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  2495.      *params = (GLfloat) ctx->Array.EdgeFlagStride;
  2496.      break;
  2497.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  2498.      *params = 0.0;
  2499.      break;
  2500.       case GL_TEXTURE_BINDING_1D:
  2501.      *params = (GLfloat) ctx->Texture.Current1D->Name;
  2502.       break;
  2503.       case GL_TEXTURE_BINDING_2D:
  2504.      *params = (GLfloat) ctx->Texture.Current2D->Name;
  2505.       break;
  2506.       case GL_TEXTURE_3D_BINDING_EXT:
  2507.      *params = (GLfloat) ctx->Texture.Current2D->Name;
  2508.       break;
  2509.  
  2510.       default:
  2511.      gl_error( ctx, GL_INVALID_ENUM, "glGetFloatv" );
  2512.    }
  2513. }
  2514.  
  2515.  
  2516.  
  2517.  
  2518. void gl_GetIntegerv( GLcontext *ctx, GLenum pname, GLint *params )
  2519. {
  2520.    GLuint i;
  2521.  
  2522.    if (INSIDE_BEGIN_END(ctx)) {
  2523.       gl_error( ctx, GL_INVALID_OPERATION, "glGetIntegerv" );
  2524.       return;
  2525.    }
  2526.    switch (pname) {
  2527.       case GL_ACCUM_RED_BITS:
  2528.       case GL_ACCUM_GREEN_BITS:
  2529.       case GL_ACCUM_BLUE_BITS:
  2530.       case GL_ACCUM_ALPHA_BITS:
  2531.      *params = (GLint) ctx->Visual->AccumBits;
  2532.      break;
  2533.       case GL_ACCUM_CLEAR_VALUE:
  2534.      params[0] = FLOAT_TO_INT( ctx->Accum.ClearColor[0] );
  2535.      params[1] = FLOAT_TO_INT( ctx->Accum.ClearColor[1] );
  2536.      params[2] = FLOAT_TO_INT( ctx->Accum.ClearColor[2] );
  2537.      params[3] = FLOAT_TO_INT( ctx->Accum.ClearColor[3] );
  2538.      break;
  2539.       case GL_ALPHA_BIAS:
  2540.      *params = (GLint) ctx->Pixel.AlphaBias;
  2541.      break;
  2542.       case GL_ALPHA_BITS:
  2543.      *params = ctx->Visual->AlphaBits;
  2544.      break;
  2545.       case GL_ALPHA_SCALE:
  2546.      *params = (GLint) ctx->Pixel.AlphaScale;
  2547.      break;
  2548.       case GL_ALPHA_TEST:
  2549.      *params = (GLint) ctx->Color.AlphaEnabled;
  2550.      break;
  2551.       case GL_ALPHA_TEST_REF:
  2552.      *params = FLOAT_TO_INT( ctx->Color.AlphaRef );
  2553.      break;
  2554.       case GL_ALPHA_TEST_FUNC:
  2555.      *params = (GLint) ctx->Color.AlphaFunc;
  2556.      break;
  2557.       case GL_ATTRIB_STACK_DEPTH:
  2558.      *params = (GLint) ctx->AttribStackDepth;
  2559.      break;
  2560.       case GL_AUTO_NORMAL:
  2561.      *params = (GLint) ctx->Eval.AutoNormal;
  2562.      break;
  2563.       case GL_AUX_BUFFERS:
  2564.      *params = (GLint) NUM_AUX_BUFFERS;
  2565.      break;
  2566.       case GL_BLEND:
  2567.      *params = (GLint) ctx->Color.BlendEnabled;
  2568.      break;
  2569.       case GL_BLEND_DST:
  2570.      *params = (GLint) ctx->Color.BlendDst;
  2571.      break;
  2572.       case GL_BLEND_SRC:
  2573.      *params = (GLint) ctx->Color.BlendSrc;
  2574.      break;
  2575.       case GL_BLEND_EQUATION_EXT:
  2576.      *params = (GLint) ctx->Color.BlendEquation;
  2577.      break;
  2578.       case GL_BLEND_COLOR_EXT:
  2579.      params[0] = FLOAT_TO_INT( ctx->Color.BlendColor[0] );
  2580.      params[1] = FLOAT_TO_INT( ctx->Color.BlendColor[1] );
  2581.      params[2] = FLOAT_TO_INT( ctx->Color.BlendColor[2] );
  2582.      params[3] = FLOAT_TO_INT( ctx->Color.BlendColor[3] );
  2583.      break;
  2584.       case GL_BLUE_BIAS:
  2585.      *params = (GLint) ctx->Pixel.BlueBias;
  2586.      break;
  2587.       case GL_BLUE_BITS:
  2588.      *params = (GLint) ctx->Visual->BlueBits;
  2589.      break;
  2590.       case GL_BLUE_SCALE:
  2591.      *params = (GLint) ctx->Pixel.BlueScale;
  2592.      break;
  2593.       case GL_CLIENT_ATTRIB_STACK_DEPTH:
  2594.      *params = ctx->ClientAttribStackDepth;
  2595.      break;
  2596.       case GL_CLIP_PLANE0:
  2597.       case GL_CLIP_PLANE1:
  2598.       case GL_CLIP_PLANE2:
  2599.       case GL_CLIP_PLANE3:
  2600.       case GL_CLIP_PLANE4:
  2601.       case GL_CLIP_PLANE5:
  2602.      i = (GLint) (pname - GL_CLIP_PLANE0);
  2603.      *params = (GLint) ctx->Transform.ClipEnabled[i];
  2604.      break;
  2605.       case GL_COLOR_CLEAR_VALUE:
  2606.      params[0] = FLOAT_TO_INT( ctx->Color.ClearColor[0] );
  2607.      params[1] = FLOAT_TO_INT( ctx->Color.ClearColor[1] );
  2608.      params[2] = FLOAT_TO_INT( ctx->Color.ClearColor[2] );
  2609.      params[3] = FLOAT_TO_INT( ctx->Color.ClearColor[3] );
  2610.      break;
  2611.       case GL_COLOR_MATERIAL:
  2612.      *params = (GLint) ctx->Light.ColorMaterialEnabled;
  2613.      break;
  2614.       case GL_COLOR_MATERIAL_FACE:
  2615.      *params = (GLint) ctx->Light.ColorMaterialFace;
  2616.      break;
  2617.       case GL_COLOR_MATERIAL_PARAMETER:
  2618.      *params = (GLint) ctx->Light.ColorMaterialMode;
  2619.      break;
  2620.       case GL_COLOR_WRITEMASK:
  2621.      params[0] = (ctx->Color.ColorMask & 8) ? 1 : 0;
  2622.      params[1] = (ctx->Color.ColorMask & 4) ? 1 : 0;
  2623.      params[2] = (ctx->Color.ColorMask & 2) ? 1 : 0;
  2624.      params[3] = (ctx->Color.ColorMask & 1) ? 1 : 0;
  2625.      break;
  2626.       case GL_CULL_FACE:
  2627.      *params = (GLint) ctx->Polygon.CullFlag;
  2628.      break;
  2629.       case GL_CULL_FACE_MODE:
  2630.      *params = (GLint) ctx->Polygon.CullFaceMode;
  2631.      break;
  2632.       case GL_CURRENT_COLOR:
  2633.      params[0] = FLOAT_TO_INT( (ctx->Current.ByteColor[0]*ctx->Visual->InvRedScale) );
  2634.      params[1] = FLOAT_TO_INT( (ctx->Current.ByteColor[1]*ctx->Visual->InvGreenScale) );
  2635.      params[2] = FLOAT_TO_INT( (ctx->Current.ByteColor[2]*ctx->Visual->InvBlueScale) );
  2636.      params[3] = FLOAT_TO_INT( (ctx->Current.ByteColor[3]*ctx->Visual->InvAlphaScale) );
  2637.      break;
  2638.       case GL_CURRENT_INDEX:
  2639.      *params = (GLint) ctx->Current.Index;
  2640.      break;
  2641.       case GL_CURRENT_NORMAL:
  2642.      params[0] = FLOAT_TO_INT( ctx->Current.Normal[0] );
  2643.      params[1] = FLOAT_TO_INT( ctx->Current.Normal[1] );
  2644.      params[2] = FLOAT_TO_INT( ctx->Current.Normal[2] );
  2645.      break;
  2646.       case GL_CURRENT_RASTER_COLOR:
  2647.      params[0] = FLOAT_TO_INT( ctx->Current.RasterColor[0] );
  2648.      params[1] = FLOAT_TO_INT( ctx->Current.RasterColor[1] );
  2649.      params[2] = FLOAT_TO_INT( ctx->Current.RasterColor[2] );
  2650.      params[3] = FLOAT_TO_INT( ctx->Current.RasterColor[3] );
  2651.      break;
  2652.       case GL_CURRENT_RASTER_DISTANCE:
  2653.      params[0] = (GLint) ctx->Current.RasterDistance;
  2654.      break;
  2655.       case GL_CURRENT_RASTER_INDEX:
  2656.      *params = (GLint) ctx->Current.RasterIndex;
  2657.      break;
  2658.       case GL_CURRENT_RASTER_POSITION:
  2659.      params[0] = (GLint) ctx->Current.RasterPos[0];
  2660.      params[1] = (GLint) ctx->Current.RasterPos[1];
  2661.      params[2] = (GLint) ctx->Current.RasterPos[2];
  2662.      params[3] = (GLint) ctx->Current.RasterPos[3];
  2663.      break;
  2664.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  2665.      params[0] = (GLint) ctx->Current.RasterTexCoord[0];
  2666.      params[1] = (GLint) ctx->Current.RasterTexCoord[1];
  2667.      params[2] = (GLint) ctx->Current.RasterTexCoord[2];
  2668.      params[3] = (GLint) ctx->Current.RasterTexCoord[3];
  2669.      break;
  2670.       case GL_CURRENT_RASTER_POSITION_VALID:
  2671.      *params = (GLint) ctx->Current.RasterPosValid;
  2672.      break;
  2673.       case GL_CURRENT_TEXTURE_COORDS:
  2674.      params[0] = (GLint) ctx->Current.TexCoord[0];
  2675.      params[1] = (GLint) ctx->Current.TexCoord[1];
  2676.      params[2] = (GLint) ctx->Current.TexCoord[2];
  2677.      params[3] = (GLint) ctx->Current.TexCoord[3];
  2678.      break;
  2679.       case GL_DEPTH_BIAS:
  2680.      *params = (GLint) ctx->Pixel.DepthBias;
  2681.      break;
  2682.       case GL_DEPTH_BITS:
  2683.      *params = ctx->Visual->DepthBits;
  2684.      break;
  2685.       case GL_DEPTH_CLEAR_VALUE:
  2686.      *params = (GLint) ctx->Depth.Clear;
  2687.      break;
  2688.       case GL_DEPTH_FUNC:
  2689.      *params = (GLint) ctx->Depth.Func;
  2690.      break;
  2691.       case GL_DEPTH_RANGE:
  2692.      params[0] = (GLint) ctx->Viewport.Near;
  2693.      params[1] = (GLint) ctx->Viewport.Far;
  2694.      break;
  2695.       case GL_DEPTH_SCALE:
  2696.      *params = (GLint) ctx->Pixel.DepthScale;
  2697.      break;
  2698.       case GL_DEPTH_TEST:
  2699.      *params = (GLint) ctx->Depth.Test;
  2700.      break;
  2701.       case GL_DEPTH_WRITEMASK:
  2702.      *params = (GLint) ctx->Depth.Mask;
  2703.      break;
  2704.       case GL_DITHER:
  2705.      *params = (GLint) ctx->Color.DitherFlag;
  2706.      break;
  2707.       case GL_DOUBLEBUFFER:
  2708.      *params = (GLint) ctx->Visual->DBflag;
  2709.      break;
  2710.       case GL_DRAW_BUFFER:
  2711.      *params = (GLint) ctx->Color.DrawBuffer;
  2712.      break;
  2713.       case GL_EDGE_FLAG:
  2714.      *params = (GLint) ctx->Current.EdgeFlag;
  2715.      break;
  2716.       case GL_FEEDBACK_BUFFER_SIZE:
  2717.      /* TODO: is this right?  Or, return number of entries in buffer? */
  2718.      *params = ctx->Feedback.BufferSize;
  2719.      break;
  2720.       case GL_FEEDBACK_BUFFER_TYPE:
  2721.      *params = ctx->Feedback.Type;
  2722.      break;
  2723.       case GL_FOG:
  2724.      *params = (GLint) ctx->Fog.Enabled;
  2725.      break;
  2726.       case GL_FOG_COLOR:
  2727.      params[0] = FLOAT_TO_INT( ctx->Fog.Color[0] );
  2728.      params[1] = FLOAT_TO_INT( ctx->Fog.Color[1] );
  2729.      params[2] = FLOAT_TO_INT( ctx->Fog.Color[2] );
  2730.      params[3] = FLOAT_TO_INT( ctx->Fog.Color[3] );
  2731.      break;
  2732.       case GL_FOG_DENSITY:
  2733.      *params = (GLint) ctx->Fog.Density;
  2734.      break;
  2735.       case GL_FOG_END:
  2736.      *params = (GLint) ctx->Fog.End;
  2737.      break;
  2738.       case GL_FOG_HINT:
  2739.      *params = (GLint) ctx->Hint.Fog;
  2740.      break;
  2741.       case GL_FOG_INDEX:
  2742.      *params = (GLint) ctx->Fog.Index;
  2743.      break;
  2744.       case GL_FOG_MODE:
  2745.      *params = (GLint) ctx->Fog.Mode;
  2746.      break;
  2747.       case GL_FOG_START:
  2748.      *params = (GLint) ctx->Fog.Start;
  2749.      break;
  2750.       case GL_FRONT_FACE:
  2751.      *params = (GLint) ctx->Polygon.FrontFace;
  2752.      break;
  2753.       case GL_GREEN_BIAS:
  2754.      *params = (GLint) ctx->Pixel.GreenBias;
  2755.      break;
  2756.       case GL_GREEN_BITS:
  2757.      *params = (GLint) ctx->Visual->GreenBits;
  2758.      break;
  2759.       case GL_GREEN_SCALE:
  2760.      *params = (GLint) ctx->Pixel.GreenScale;
  2761.      break;
  2762.       case GL_INDEX_BITS:
  2763.      *params = (GLint) ctx->Visual->IndexBits;
  2764.      break;
  2765.       case GL_INDEX_CLEAR_VALUE:
  2766.      *params = (GLint) ctx->Color.ClearIndex;
  2767.      break;
  2768.       case GL_INDEX_MODE:
  2769.      *params = ctx->Visual->RGBAflag ? 0 : 1;
  2770.      break;
  2771.       case GL_INDEX_OFFSET:
  2772.      *params = ctx->Pixel.IndexOffset;
  2773.      break;
  2774.       case GL_INDEX_SHIFT:
  2775.      *params = ctx->Pixel.IndexShift;
  2776.      break;
  2777.       case GL_INDEX_WRITEMASK:
  2778.      *params = (GLint) ctx->Color.IndexMask;
  2779.      break;
  2780.       case GL_LIGHT0:
  2781.       case GL_LIGHT1:
  2782.       case GL_LIGHT2:
  2783.       case GL_LIGHT3:
  2784.       case GL_LIGHT4:
  2785.       case GL_LIGHT5:
  2786.       case GL_LIGHT6:
  2787.       case GL_LIGHT7:
  2788.      *params = (GLint) ctx->Light.Light[pname-GL_LIGHT0].Enabled;
  2789.      break;
  2790.       case GL_LIGHTING:
  2791.      *params = (GLint) ctx->Light.Enabled;
  2792.      break;
  2793.       case GL_LIGHT_MODEL_AMBIENT:
  2794.      params[0] = FLOAT_TO_INT( ctx->Light.Model.Ambient[0] );
  2795.      params[1] = FLOAT_TO_INT( ctx->Light.Model.Ambient[1] );
  2796.      params[2] = FLOAT_TO_INT( ctx->Light.Model.Ambient[2] );
  2797.      params[3] = FLOAT_TO_INT( ctx->Light.Model.Ambient[3] );
  2798.      break;
  2799.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  2800.      *params = (GLint) ctx->Light.Model.LocalViewer;
  2801.      break;
  2802.       case GL_LIGHT_MODEL_TWO_SIDE:
  2803.      *params = (GLint) ctx->Light.Model.TwoSide;
  2804.      break;
  2805.       case GL_LINE_SMOOTH:
  2806.      *params = (GLint) ctx->Line.SmoothFlag;
  2807.      break;
  2808.       case GL_LINE_SMOOTH_HINT:
  2809.      *params = (GLint) ctx->Hint.LineSmooth;
  2810.      break;
  2811.       case GL_LINE_STIPPLE:
  2812.      *params = (GLint) ctx->Line.StippleFlag;
  2813.      break;
  2814.       case GL_LINE_STIPPLE_PATTERN:
  2815.      *params = (GLint) ctx->Line.StipplePattern;
  2816.      break;
  2817.       case GL_LINE_STIPPLE_REPEAT:
  2818.      *params = (GLint) ctx->Line.StippleFactor;
  2819.      break;
  2820.       case GL_LINE_WIDTH:
  2821.      *params = (GLint) ctx->Line.Width;
  2822.      break;
  2823.       case GL_LINE_WIDTH_GRANULARITY:
  2824.      *params = (GLint) LINE_WIDTH_GRANULARITY;
  2825.      break;
  2826.       case GL_LINE_WIDTH_RANGE:
  2827.      params[0] = (GLint) MIN_LINE_WIDTH;
  2828.      params[1] = (GLint) MAX_LINE_WIDTH;
  2829.      break;
  2830.       case GL_LIST_BASE:
  2831.      *params = (GLint) ctx->List.ListBase;
  2832.      break;
  2833.       case GL_LIST_INDEX:
  2834.      *params = (GLint) gl_list_index();
  2835.      break;
  2836.       case GL_LIST_MODE:
  2837.      *params = ctx->ExecuteFlag ? (GLint) GL_COMPILE_AND_EXECUTE
  2838.                   : (GLint) GL_COMPILE;
  2839.      break;
  2840.       case GL_INDEX_LOGIC_OP:
  2841.      *params = (GLint) ctx->Color.IndexLogicOpEnabled;
  2842.      break;
  2843.       case GL_COLOR_LOGIC_OP:
  2844.      *params = (GLint) ctx->Color.ColorLogicOpEnabled;
  2845.      break;
  2846.       case GL_LOGIC_OP_MODE:
  2847.      *params = (GLint) ctx->Color.LogicOp;
  2848.      break;
  2849.       case GL_MAP1_COLOR_4:
  2850.      *params = (GLint) ctx->Eval.Map1Color4;
  2851.      break;
  2852.       case GL_MAP1_GRID_DOMAIN:
  2853.      params[0] = (GLint) ctx->Eval.MapGrid1u1;
  2854.      params[1] = (GLint) ctx->Eval.MapGrid1u2;
  2855.      break;
  2856.       case GL_MAP1_GRID_SEGMENTS:
  2857.      *params = (GLint) ctx->Eval.MapGrid1un;
  2858.      break;
  2859.       case GL_MAP1_INDEX:
  2860.      *params = (GLint) ctx->Eval.Map1Index;
  2861.      break;
  2862.       case GL_MAP1_NORMAL:
  2863.      *params = (GLint) ctx->Eval.Map1Normal;
  2864.      break;
  2865.       case GL_MAP1_TEXTURE_COORD_1:
  2866.      *params = (GLint) ctx->Eval.Map1TextureCoord1;
  2867.      break;
  2868.       case GL_MAP1_TEXTURE_COORD_2:
  2869.      *params = (GLint) ctx->Eval.Map1TextureCoord2;
  2870.      break;
  2871.       case GL_MAP1_TEXTURE_COORD_3:
  2872.      *params = (GLint) ctx->Eval.Map1TextureCoord3;
  2873.      break;
  2874.       case GL_MAP1_TEXTURE_COORD_4:
  2875.      *params = (GLint) ctx->Eval.Map1TextureCoord4;
  2876.      break;
  2877.       case GL_MAP1_VERTEX_3:
  2878.      *params = (GLint) ctx->Eval.Map1Vertex3;
  2879.      break;
  2880.       case GL_MAP1_VERTEX_4:
  2881.      *params = (GLint) ctx->Eval.Map1Vertex4;
  2882.      break;
  2883.       case GL_MAP2_COLOR_4:
  2884.      *params = (GLint) ctx->Eval.Map2Color4;
  2885.      break;
  2886.       case GL_MAP2_GRID_DOMAIN:
  2887.      params[0] = (GLint) ctx->Eval.MapGrid2u1;
  2888.      params[1] = (GLint) ctx->Eval.MapGrid2u2;
  2889.      params[2] = (GLint) ctx->Eval.MapGrid2v1;
  2890.      params[3] = (GLint) ctx->Eval.MapGrid2v2;
  2891.      break;
  2892.       case GL_MAP2_GRID_SEGMENTS:
  2893.      params[0] = (GLint) ctx->Eval.MapGrid2un;
  2894.      params[1] = (GLint) ctx->Eval.MapGrid2vn;
  2895.      break;
  2896.       case GL_MAP2_INDEX:
  2897.      *params = (GLint) ctx->Eval.Map2Index;
  2898.      break;
  2899.       case GL_MAP2_NORMAL:
  2900.      *params = (GLint) ctx->Eval.Map2Normal;
  2901.      break;
  2902.       case GL_MAP2_TEXTURE_COORD_1:
  2903.      *params = (GLint) ctx->Eval.Map2TextureCoord1;
  2904.      break;
  2905.       case GL_MAP2_TEXTURE_COORD_2:
  2906.      *params = (GLint) ctx->Eval.Map2TextureCoord2;
  2907.      break;
  2908.       case GL_MAP2_TEXTURE_COORD_3:
  2909.      *params = (GLint) ctx->Eval.Map2TextureCoord3;
  2910.      break;
  2911.       case GL_MAP2_TEXTURE_COORD_4:
  2912.      *params = (GLint) ctx->Eval.Map2TextureCoord4;
  2913.      break;
  2914.       case GL_MAP2_VERTEX_3:
  2915.      *params = (GLint) ctx->Eval.Map2Vertex3;
  2916.      break;
  2917.       case GL_MAP2_VERTEX_4:
  2918.      *params = (GLint) ctx->Eval.Map2Vertex4;
  2919.      break;
  2920.       case GL_MAP_COLOR:
  2921.      *params = (GLint) ctx->Pixel.MapColorFlag;
  2922.      break;
  2923.       case GL_MAP_STENCIL:
  2924.      *params = (GLint) ctx->Pixel.MapStencilFlag;
  2925.      break;
  2926.       case GL_MATRIX_MODE:
  2927.      *params = (GLint) ctx->Transform.MatrixMode;
  2928.      break;
  2929.       case GL_MAX_ATTRIB_STACK_DEPTH:
  2930.      *params = (GLint) MAX_ATTRIB_STACK_DEPTH;
  2931.      break;
  2932.       case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
  2933.      *params = (GLint) MAX_CLIENT_ATTRIB_STACK_DEPTH;
  2934.      break;
  2935.       case GL_MAX_CLIP_PLANES:
  2936.      *params = (GLint) MAX_CLIP_PLANES;
  2937.      break;
  2938.       case GL_MAX_EVAL_ORDER:
  2939.      *params = (GLint) MAX_EVAL_ORDER;
  2940.      break;
  2941.       case GL_MAX_LIGHTS:
  2942.      *params = (GLint) MAX_LIGHTS;
  2943.      break;
  2944.       case GL_MAX_LIST_NESTING:
  2945.      *params = (GLint) MAX_LIST_NESTING;
  2946.      break;
  2947.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  2948.      *params = (GLint) MAX_MODELVIEW_STACK_DEPTH;
  2949.      break;
  2950.       case GL_MAX_NAME_STACK_DEPTH:
  2951.      *params = (GLint) MAX_NAME_STACK_DEPTH;
  2952.      break;
  2953.       case GL_MAX_PIXEL_MAP_TABLE:
  2954.      *params = (GLint) MAX_PIXEL_MAP_TABLE;
  2955.      break;
  2956.       case GL_MAX_PROJECTION_STACK_DEPTH:
  2957.      *params = (GLint) MAX_PROJECTION_STACK_DEPTH;
  2958.      break;
  2959.       case GL_MAX_TEXTURE_SIZE:
  2960.      *params = (GLint) MAX_TEXTURE_SIZE;
  2961.      break;
  2962.       case GL_MAX_TEXTURE_STACK_DEPTH:
  2963.      *params = (GLint) MAX_TEXTURE_STACK_DEPTH;
  2964.      break;
  2965.       case GL_MAX_VIEWPORT_DIMS:
  2966.      params[0] = (GLint) MAX_WIDTH;
  2967.      params[1] = (GLint) MAX_HEIGHT;
  2968.      break;
  2969.       case GL_MODELVIEW_MATRIX:
  2970.      for (i=0;i<16;i++) {
  2971.         params[i] = (GLint) ctx->ModelViewMatrix[i];
  2972.      }
  2973.      break;
  2974.       case GL_MODELVIEW_STACK_DEPTH:
  2975.      *params = (GLint) ctx->ModelViewStackDepth;
  2976.      break;
  2977.       case GL_NAME_STACK_DEPTH:
  2978.      *params = (GLint) ctx->Select.NameStackDepth;
  2979.      break;
  2980.       case GL_NORMALIZE:
  2981.      *params = (GLint) ctx->Transform.Normalize;
  2982.      break;
  2983.       case GL_PACK_ALIGNMENT:
  2984.      *params = ctx->Pack.Alignment;
  2985.      break;
  2986.       case GL_PACK_LSB_FIRST:
  2987.      *params = (GLint) ctx->Pack.LsbFirst;
  2988.      break;
  2989.       case GL_PACK_ROW_LENGTH:
  2990.      *params = ctx->Pack.RowLength;
  2991.      break;
  2992.       case GL_PACK_SKIP_PIXELS:
  2993.      *params = ctx->Pack.SkipPixels;
  2994.      break;
  2995.       case GL_PACK_SKIP_ROWS:
  2996.      *params = ctx->Pack.SkipRows;
  2997.      break;
  2998.       case GL_PACK_SWAP_BYTES:
  2999.      *params = (GLint) ctx->Pack.SwapBytes;
  3000.      break;
  3001.       case GL_PACK_SKIP_IMAGES_EXT:
  3002.      *params = ctx->Pack.SkipImages;
  3003.      break;
  3004.       case GL_PACK_IMAGE_HEIGHT_EXT:
  3005.      *params = ctx->Pack.ImageHeight;
  3006.      break;
  3007.       case GL_PERSPECTIVE_CORRECTION_HINT:
  3008.      *params = (GLint) ctx->Hint.PerspectiveCorrection;
  3009.      break;
  3010.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  3011.      *params = ctx->Pixel.MapAtoAsize;
  3012.      break;
  3013.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  3014.      *params = ctx->Pixel.MapBtoBsize;
  3015.      break;
  3016.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  3017.      *params = ctx->Pixel.MapGtoGsize;
  3018.      break;
  3019.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  3020.      *params = ctx->Pixel.MapItoAsize;
  3021.      break;
  3022.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  3023.      *params = ctx->Pixel.MapItoBsize;
  3024.      break;
  3025.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  3026.      *params = ctx->Pixel.MapItoGsize;
  3027.      break;
  3028.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  3029.      *params = ctx->Pixel.MapItoIsize;
  3030.      break;
  3031.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  3032.      *params = ctx->Pixel.MapItoRsize;
  3033.      break;
  3034.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  3035.      *params = ctx->Pixel.MapRtoRsize;
  3036.      break;
  3037.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  3038.      *params = ctx->Pixel.MapStoSsize;
  3039.      break;
  3040.       case GL_POINT_SIZE:
  3041.      *params = (GLint) ctx->Point.Size;
  3042.      break;
  3043.       case GL_POINT_SIZE_GRANULARITY:
  3044.      *params = (GLint) POINT_SIZE_GRANULARITY;
  3045.      break;
  3046.       case GL_POINT_SIZE_RANGE:
  3047.      params[0] = (GLint) MIN_POINT_SIZE;
  3048.      params[1] = (GLint) MAX_POINT_SIZE;
  3049.      break;
  3050.       case GL_POINT_SMOOTH:
  3051.      *params = (GLint) ctx->Point.SmoothFlag;
  3052.      break;
  3053.       case GL_POINT_SMOOTH_HINT:
  3054.      *params = (GLint) ctx->Hint.PointSmooth;
  3055.      break;
  3056.       case GL_POINT_SIZE_MIN_EXT:
  3057.      *params = (GLint) (ctx->Point.MinSize);
  3058.      break;
  3059.       case GL_POINT_SIZE_MAX_EXT:
  3060.      *params = (GLint) (ctx->Point.MaxSize);
  3061.      break;
  3062.       case GL_POINT_FADE_THRESHOLD_SIZE_EXT:
  3063.      *params = (GLint) (ctx->Point.Threshold);
  3064.      break;
  3065.       case GL_DISTANCE_ATTENUATION_EXT:
  3066.      params[0] = (GLint) (ctx->Point.Params[0]);
  3067.      params[1] = (GLint) (ctx->Point.Params[1]);
  3068.      params[2] = (GLint) (ctx->Point.Params[2]);
  3069.      break;
  3070.       case GL_POLYGON_MODE:
  3071.      params[0] = (GLint) ctx->Polygon.FrontMode;
  3072.      params[1] = (GLint) ctx->Polygon.BackMode;
  3073.      break;
  3074. #ifdef GL_EXT_polygon_offset
  3075.       case GL_POLYGON_OFFSET_BIAS_EXT:
  3076.      *params = (GLint) ctx->Polygon.OffsetUnits;
  3077.      break;
  3078. #endif
  3079.       case GL_POLYGON_OFFSET_FACTOR:
  3080.      *params = (GLint) ctx->Polygon.OffsetFactor;
  3081.      break;
  3082.       case GL_POLYGON_OFFSET_UNITS:
  3083.      *params = (GLint) ctx->Polygon.OffsetUnits;
  3084.      break;
  3085.       case GL_POLYGON_SMOOTH:
  3086.      *params = (GLint) ctx->Polygon.SmoothFlag;
  3087.      break;
  3088.       case GL_POLYGON_SMOOTH_HINT:
  3089.      *params = (GLint) ctx->Hint.PolygonSmooth;
  3090.      break;
  3091.       case GL_POLYGON_STIPPLE:
  3092.      for (i=0;i<32;i++) {           /* RIGHT? */
  3093.         params[i] = (GLint) ctx->PolygonStipple[i];
  3094.      }
  3095.      break;
  3096.       case GL_PROJECTION_MATRIX:
  3097.      for (i=0;i<16;i++) {
  3098.         params[i] = (GLint) ctx->ProjectionMatrix[i];
  3099.      }
  3100.      break;
  3101.       case GL_PROJECTION_STACK_DEPTH:
  3102.      *params = (GLint) ctx->ProjectionStackDepth;
  3103.      break;
  3104.       case GL_READ_BUFFER:
  3105.      *params = (GLint) ctx->Pixel.ReadBuffer;
  3106.      break;
  3107.       case GL_RED_BIAS:
  3108.      *params = (GLint) ctx->Pixel.RedBias;
  3109.      break;
  3110.       case GL_RED_BITS:
  3111.      *params = (GLint) ctx->Visual->RedBits;
  3112.      break;
  3113.       case GL_RED_SCALE:
  3114.      *params = (GLint) ctx->Pixel.RedScale;
  3115.      break;
  3116.       case GL_RENDER_MODE:
  3117.      *params = (GLint) ctx->RenderMode;
  3118.      break;
  3119.       case GL_RGBA_MODE:
  3120.      *params = (GLint) ctx->Visual->RGBAflag;
  3121.      break;
  3122.       case GL_SCISSOR_BOX:
  3123.      params[0] = (GLint) ctx->Scissor.X;
  3124.      params[1] = (GLint) ctx->Scissor.Y;
  3125.      params[2] = (GLint) ctx->Scissor.Width;
  3126.      params[3] = (GLint) ctx->Scissor.Height;
  3127.      break;
  3128.       case GL_SCISSOR_TEST:
  3129.      *params = (GLint) ctx->Scissor.Enabled;
  3130.      break;
  3131.       case GL_SHADE_MODEL:
  3132.      *params = (GLint) ctx->Light.ShadeModel;
  3133.      break;
  3134.       case GL_SHARED_TEXTURE_PALETTE_EXT:
  3135.      *params = (GLint) ctx->Texture.SharedPalette;
  3136.      break;
  3137.       case GL_STENCIL_BITS:
  3138.      *params = ctx->Visual->StencilBits;
  3139.      break;
  3140.       case GL_STENCIL_CLEAR_VALUE:
  3141.      *params = (GLint) ctx->Stencil.Clear;
  3142.      break;
  3143.       case GL_STENCIL_FAIL:
  3144.      *params = (GLint) ctx->Stencil.FailFunc;
  3145.      break;
  3146.       case GL_STENCIL_FUNC:
  3147.      *params = (GLint) ctx->Stencil.Function;
  3148.      break;
  3149.       case GL_STENCIL_PASS_DEPTH_FAIL:
  3150.      *params = (GLint) ctx->Stencil.ZFailFunc;
  3151.      break;
  3152.       case GL_STENCIL_PASS_DEPTH_PASS:
  3153.      *params = (GLint) ctx->Stencil.ZPassFunc;
  3154.      break;
  3155.       case GL_STENCIL_REF:
  3156.      *params = (GLint) ctx->Stencil.Ref;
  3157.      break;
  3158.       case GL_STENCIL_TEST:
  3159.      *params = (GLint) ctx->Stencil.Enabled;
  3160.      break;
  3161.       case GL_STENCIL_VALUE_MASK:
  3162.      *params = (GLint) ctx->Stencil.ValueMask;
  3163.      break;
  3164.       case GL_STENCIL_WRITEMASK:
  3165.      *params = (GLint) ctx->Stencil.WriteMask;
  3166.      break;
  3167.       case GL_STEREO:
  3168.      *params = 0;  /* TODO */
  3169.      break;
  3170.       case GL_SUBPIXEL_BITS:
  3171.      *params = 0;  /* TODO */
  3172.      break;
  3173.       case GL_TEXTURE_1D:
  3174.      *params = (ctx->Texture.Enabled & TEXTURE_1D) ? 1.0 : 0.0;
  3175.      break;
  3176.       case GL_TEXTURE_2D:
  3177.      *params = (ctx->Texture.Enabled & TEXTURE_2D) ? 1.0 : 0.0;
  3178.      break;
  3179.       case GL_TEXTURE_3D_EXT:
  3180.      *params = (ctx->Texture.Enabled & TEXTURE_3D) ? 1.0 : 0.0;
  3181.      break;
  3182.       case GL_TEXTURE_ENV_COLOR:
  3183.      params[0] = FLOAT_TO_INT( ctx->Texture.EnvColor[0] );
  3184.      params[1] = FLOAT_TO_INT( ctx->Texture.EnvColor[1] );
  3185.      params[2] = FLOAT_TO_INT( ctx->Texture.EnvColor[2] );
  3186.      params[3] = FLOAT_TO_INT( ctx->Texture.EnvColor[3] );
  3187.      break;
  3188.       case GL_TEXTURE_ENV_MODE:
  3189.      *params = (GLint) ctx->Texture.EnvMode;
  3190.      break;
  3191.       case GL_TEXTURE_GEN_S:
  3192.      *params = (ctx->Texture.TexGenEnabled & S_BIT) ? 1 : 0;
  3193.      break;
  3194.       case GL_TEXTURE_GEN_T:
  3195.      *params = (ctx->Texture.TexGenEnabled & T_BIT) ? 1 : 0;
  3196.      break;
  3197.       case GL_TEXTURE_GEN_R:
  3198.      *params = (ctx->Texture.TexGenEnabled & R_BIT) ? 1 : 0;
  3199.      break;
  3200.       case GL_TEXTURE_GEN_Q:
  3201.      *params = (ctx->Texture.TexGenEnabled & Q_BIT) ? 1 : 0;
  3202.      break;
  3203.       case GL_TEXTURE_MATRIX:
  3204.      for (i=0;i<16;i++) {
  3205.         params[i] = (GLint) ctx->TextureMatrix[i];
  3206.      }
  3207.      break;
  3208.       case GL_TEXTURE_STACK_DEPTH:
  3209.      *params = (GLint) ctx->TextureStackDepth;
  3210.      break;
  3211.       case GL_UNPACK_ALIGNMENT:
  3212.      *params = ctx->Unpack.Alignment;
  3213.      break;
  3214.       case GL_UNPACK_LSB_FIRST:
  3215.      *params = (GLint) ctx->Unpack.LsbFirst;
  3216.      break;
  3217.       case GL_UNPACK_ROW_LENGTH:
  3218.      *params = ctx->Unpack.RowLength;
  3219.      break;
  3220.       case GL_UNPACK_SKIP_PIXELS:
  3221.      *params = ctx->Unpack.SkipPixels;
  3222.      break;
  3223.       case GL_UNPACK_SKIP_ROWS:
  3224.      *params = ctx->Unpack.SkipRows;
  3225.      break;
  3226.       case GL_UNPACK_SWAP_BYTES:
  3227.      *params = (GLint) ctx->Unpack.SwapBytes;
  3228.      break;
  3229.       case GL_UNPACK_SKIP_IMAGES_EXT:
  3230.      *params = ctx->Unpack.SkipImages;
  3231.      break;
  3232.       case GL_UNPACK_IMAGE_HEIGHT_EXT:
  3233.      *params = ctx->Unpack.ImageHeight;
  3234.      break;
  3235.       case GL_VIEWPORT:
  3236.      params[0] = (GLint) ctx->Viewport.X;
  3237.      params[1] = (GLint) ctx->Viewport.Y;
  3238.      params[2] = (GLint) ctx->Viewport.Width;
  3239.      params[3] = (GLint) ctx->Viewport.Height;
  3240.      break;
  3241.       case GL_ZOOM_X:
  3242.      *params = (GLint) ctx->Pixel.ZoomX;
  3243.      break;
  3244.       case GL_ZOOM_Y:
  3245.      *params = (GLint) ctx->Pixel.ZoomY;
  3246.      break;
  3247.       case GL_VERTEX_ARRAY_SIZE:
  3248.      *params = ctx->Array.VertexSize;
  3249.      break;
  3250.       case GL_VERTEX_ARRAY_TYPE:
  3251.      *params = ctx->Array.VertexType;
  3252.      break;
  3253.       case GL_VERTEX_ARRAY_STRIDE:
  3254.      *params = ctx->Array.VertexStride;
  3255.      break;
  3256.       case GL_VERTEX_ARRAY_COUNT_EXT:
  3257.      *params = 0;
  3258.      break;
  3259.       case GL_NORMAL_ARRAY_TYPE:
  3260.      *params = ctx->Array.NormalType;
  3261.      break;
  3262.       case GL_NORMAL_ARRAY_STRIDE:
  3263.      *params = ctx->Array.NormalStride;
  3264.      break;
  3265.       case GL_NORMAL_ARRAY_COUNT_EXT:
  3266.      *params = 0;
  3267.      break;
  3268.       case GL_COLOR_ARRAY_SIZE:
  3269.      *params = ctx->Array.ColorSize;
  3270.      break;
  3271.       case GL_COLOR_ARRAY_TYPE:
  3272.      *params = ctx->Array.ColorType;
  3273.      break;
  3274.       case GL_COLOR_ARRAY_STRIDE:
  3275.      *params = ctx->Array.ColorStride;
  3276.      break;
  3277.       case GL_COLOR_ARRAY_COUNT_EXT:
  3278.      *params = 0;
  3279.      break;
  3280.       case GL_INDEX_ARRAY_TYPE:
  3281.      *params = ctx->Array.IndexType;
  3282.      break;
  3283.       case GL_INDEX_ARRAY_STRIDE:
  3284.      *params = ctx->Array.IndexStride;
  3285.      break;
  3286.       case GL_INDEX_ARRAY_COUNT_EXT:
  3287.      *params = 0;
  3288.      break;
  3289.       case GL_TEXTURE_COORD_ARRAY_SIZE:
  3290.      *params = ctx->Array.TexCoordSize;
  3291.      break;
  3292.       case GL_TEXTURE_COORD_ARRAY_TYPE:
  3293.      *params = ctx->Array.TexCoordType;
  3294.      break;
  3295.       case GL_TEXTURE_COORD_ARRAY_STRIDE:
  3296.      *params = ctx->Array.TexCoordStride;
  3297.      break;
  3298.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  3299.      *params = 0;
  3300.      break;
  3301.       case GL_EDGE_FLAG_ARRAY_STRIDE:
  3302.      *params = ctx->Array.EdgeFlagStride;
  3303.      break;
  3304.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  3305.      *params = 0;
  3306.      break;
  3307.       case GL_TEXTURE_BINDING_1D:
  3308.      *params = ctx->Texture.Current1D->Name;
  3309.       break;
  3310.       case GL_TEXTURE_BINDING_2D:
  3311.      *params = ctx->Texture.Current2D->Name;
  3312.       break;
  3313.       case GL_TEXTURE_3D_BINDING_EXT:
  3314.      *params = ctx->Texture.Current3D->Name;
  3315.       break;
  3316.  
  3317.       default:
  3318.      gl_error( ctx, GL_INVALID_ENUM, "glGetIntegerv" );
  3319.    }
  3320. }
  3321.  
  3322.  
  3323.  
  3324. void gl_GetPointerv( GLcontext *ctx, GLenum pname, GLvoid **params )
  3325. {
  3326.    switch (pname) {
  3327.       case GL_VERTEX_ARRAY_POINTER:
  3328.      *params = ctx->Array.VertexPtr;
  3329.      break;
  3330.       case GL_NORMAL_ARRAY_POINTER:
  3331.      *params = ctx->Array.NormalPtr;
  3332.      break;
  3333.       case GL_COLOR_ARRAY_POINTER:
  3334.      *params = ctx->Array.ColorPtr;
  3335.      break;
  3336.       case GL_INDEX_ARRAY_POINTER:
  3337.      *params = ctx->Array.IndexPtr;
  3338.      break;
  3339.       case GL_TEXTURE_COORD_ARRAY_POINTER:
  3340.      *params = ctx->Array.TexCoordPtr;
  3341.      break;
  3342.       case GL_EDGE_FLAG_ARRAY_POINTER:
  3343.      *params = ctx->Array.EdgeFlagPtr;
  3344.      break;
  3345.       case GL_FEEDBACK_BUFFER_POINTER:
  3346.      *params = ctx->Feedback.Buffer;
  3347.      break;
  3348.       default:
  3349.      gl_error( ctx, GL_INVALID_ENUM, "glGetPointerv" );
  3350.      return;
  3351.    }
  3352. }
  3353.