| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 | 
							- /* $Id: glstate.c,v 1.1 1999/08/19 00:55:42 jtg Exp $ */
 - 
 - /*
 -  * Print GL state information (for debugging)
 -  * Copyright (C) 1998  Brian Paul
 -  *
 -  * This library is free software; you can redistribute it and/or
 -  * modify it under the terms of the GNU Library General Public
 -  * License as published by the Free Software Foundation; either
 -  * version 2 of the License, or (at your option) any later version.
 -  *
 -  * This library is distributed in the hope that it will be useful,
 -  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 -  * Library General Public License for more details.
 -  *
 -  * You should have received a copy of the GNU Library General Public
 -  * License along with this library; if not, write to the Free
 -  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 -  */
 - 
 - 
 - /*
 -  * $Log: glstate.c,v $
 -  * Revision 1.1  1999/08/19 00:55:42  jtg
 -  * Initial revision
 -  *
 -  * Revision 1.4  1999/06/19 01:36:43  brianp
 -  * more features added
 -  *
 -  * Revision 1.3  1999/02/24 05:16:20  brianp
 -  * added still more records to EnumTable
 -  *
 -  * Revision 1.2  1998/11/24 03:47:54  brianp
 -  * added more records to EnumTable
 -  *
 -  * Revision 1.1  1998/11/24 03:41:16  brianp
 -  * Initial revision
 -  *
 -  */
 - 
 - 
 - 
 - #include <assert.h>
 - #include <GL/gl.h>
 - #include <stdio.h>
 - #include <stdlib.h>
 - #include "glstate.h"
 - 
 - 
 - #define FLOAT       1
 - #define INT         2
 - #define DOUBLE      3
 - #define BOOLEAN     4
 - #define ENUM        5
 - #define VOID        6
 - #define LAST_TOKEN ~0
 - 
 - 
 - struct EnumRecord {
 -    GLenum enumerator;   /* GLenum constant */
 -    const char *string;  /* string name */
 -    int getType;         /* INT, FLOAT, DOUBLE, BOOLEAN, ENUM, or VOID */
 -    int getCount;      /* number of values returned by the glGet*v() call */
 - };
 - 
 - 
 - /* XXX Lots more records to add here!  Help, anyone? */
 - 
 - static struct EnumRecord EnumTable[] = {
 -    { GL_ACCUM_RED_BITS, "GL_ACCUM_RED_BITS", INT, 1 },
 -    { GL_ACCUM_GREEN_BITS, "GL_ACCUM_GREEN_BITS", INT, 1 },
 -    { GL_ACCUM_BLUE_BITS, "GL_ACCUM_BLUE_BITS", INT, 1 },
 -    { GL_ACCUM_ALPHA_BITS, "GL_ACCUM_ALPHA_BITS", INT, 1 },
 -    { GL_ACCUM_CLEAR_VALUE, "GL_ACCUM_CLEAR_VALUE", FLOAT, 4 },
 -    { GL_ALPHA_BIAS, "GL_ALPHA_BIAS", FLOAT, 1 },
 -    { GL_ALPHA_BITS, "GL_ALPHA_BITS", INT, 1 },
 -    { GL_ALPHA_SCALE, "GL_ALPHA_SCALE", FLOAT, 1 },
 -    { GL_ALPHA_TEST, "GL_ALPHA_TEST", BOOLEAN, 1 },
 -    { GL_ALPHA_TEST_FUNC, "GL_ALPHA_TEST_FUNC", ENUM, 1 },
 -    { GL_ALWAYS, "GL_ALWAYS", ENUM, 0 },
 -    { GL_ALPHA_TEST_REF, "GL_ALPHA_TEST_REF", FLOAT, 1 },
 -    { GL_ATTRIB_STACK_DEPTH, "GL_ATTRIB_STACK_DEPTH", INT, 1 },
 -    { GL_AUTO_NORMAL, "GL_AUTO_NORMAL", BOOLEAN, 1 },
 -    { GL_AUX_BUFFERS, "GL_AUX_BUFFERS", INT, 1 },
 -    { GL_BLEND, "GL_BLEND", BOOLEAN, 1 },
 -    { GL_BLEND_DST, "GL_BLEND_DST", ENUM, 1 },
 -    { GL_BLEND_SRC, "GL_BLEND_SRC", ENUM, 1 },
 -    { GL_BLUE_BIAS, "GL_BLUE_BIAS", FLOAT, 1 },
 -    { GL_BLUE_BITS, "GL_BLUE_BITS", INT, 1 },
 -    { GL_BLUE_SCALE, "GL_BLUE_SCALE", FLOAT, 1 },
 - 
 -    { GL_CLAMP_TO_EDGE, "GL_CLAMP_TO_EDGE", ENUM, 0 },
 -    { GL_CLEAR, "GL_CLEAR", ENUM, 0 },
 -    { GL_CLIENT_ATTRIB_STACK_DEPTH, "GL_CLIENT_ATTRIB_STACK_DEPTH", INT, 1 },
 -    { GL_CLIP_PLANE0, "GL_CLIP_PLANE0", BOOLEAN, 1 },
 -    { GL_CLIP_PLANE1, "GL_CLIP_PLANE1", BOOLEAN, 1 },
 -    { GL_CLIP_PLANE2, "GL_CLIP_PLANE2", BOOLEAN, 1 },
 -    { GL_CLIP_PLANE3, "GL_CLIP_PLANE3", BOOLEAN, 1 },
 -    { GL_CLIP_PLANE4, "GL_CLIP_PLANE4", BOOLEAN, 1 },
 -    { GL_CLIP_PLANE5, "GL_CLIP_PLANE5", BOOLEAN, 1 },
 -    { GL_COEFF, "GL_COEEF", ENUM, 0 },
 -    { GL_COLOR, "GL_COLOR", ENUM, 0 },
 -    { GL_COLOR_BUFFER_BIT, "GL_COLOR_BUFFER_BIT", ENUM, 0 },
 -    { GL_COLOR_CLEAR_VALUE, "GL_COLOR_CLEAR_VALUE", FLOAT, 4 },
 -    { GL_COLOR_INDEX, "GL_COLOR_INDEX", ENUM, 0 },
 -    { GL_COLOR_MATERIAL, "GL_COLOR_MATERIAL", BOOLEAN, 1 },
 -    { GL_COLOR_MATERIAL_FACE, "GL_COLOR_MATERIAL_FACE", ENUM, 1 },
 -    { GL_COLOR_MATERIAL_PARAMETER, "GL_COLOR_MATERIAL_PARAMETER", ENUM, 1 },
 -    { GL_COLOR_WRITEMASK, "GL_COLOR_WRITEMASK", BOOLEAN, 4 },
 -    { GL_COMPILE, "GL_COMPILE", ENUM, 0 },
 -    { GL_COMPILE_AND_EXECUTE, "GL_COMPILE_AND_EXECUTE", ENUM, 0 },
 -    { GL_COPY, "GL_COPY", ENUM, 0 },
 -    { GL_COPY_INVERTED, "GL_COPY_INVERTED", ENUM, 0 },
 -    { GL_COPY_PIXEL_TOKEN, "GL_COPY_PIXEL_TOKEN", ENUM, 0 },
 -    { GL_CULL_FACE, "GL_CULL_FACE", BOOLEAN, 1 },
 -    { GL_CULL_FACE_MODE, "GL_CULL_FACE_MODE", ENUM, 1 },
 -    { GL_CURRENT_BIT, "GL_CURRENT_BIT", ENUM, 0 },
 -    { GL_CURRENT_COLOR, "GL_CURRENT_COLOR", FLOAT, 4 },
 -    { GL_CURRENT_INDEX, "GL_CURRENT_INDEX", INT, 1 },
 -    { GL_CURRENT_NORMAL, "GL_CURRENT_NORMAL", FLOAT, 3 },
 -    { GL_CURRENT_RASTER_COLOR, "GL_CURRENT_RASTER_COLOR", FLOAT, 4 },
 -    { GL_CURRENT_RASTER_DISTANCE, "GL_CURRENT_RASTER_DISTANCE", FLOAT, 1 },
 -    { GL_CURRENT_RASTER_INDEX, "GL_CURRENT_RASTER_INDEX", INT, 1 },
 -    { GL_CURRENT_RASTER_POSITION, "GL_CURRENT_RASTER_POSITION", FLOAT, 4 },
 -    { GL_CURRENT_RASTER_TEXTURE_COORDS, "GL_CURRENT_RASTER_TEXTURE_COORDS", FLOAT, 4 },
 -    { GL_CURRENT_RASTER_POSITION_VALID, "GL_CURRENT_RASTER_POSITION_VALID", BOOLEAN, 1 },
 -    { GL_CURRENT_TEXTURE_COORDS, "GL_CURRENT_TEXTURE_COORDS", FLOAT, 4 },
 -    { GL_CW, "GL_CW", ENUM, 0 },
 -    { GL_CCW, "GL_CCW", ENUM, 0 },
 - 
 -    { GL_DECAL, "GL_DECAL", ENUM, 0 },
 -    { GL_DECR, "GL_DECR", ENUM, 0 },
 -    { GL_DEPTH, "GL_DEPTH", ENUM, 0 },
 -    { GL_DEPTH_BIAS, "GL_DEPTH_BIAS", FLOAT, 1 },
 -    { GL_DEPTH_BITS, "GL_DEPTH_BITS", INT, 1 },
 -    { GL_DEPTH_BUFFER_BIT, "GL_DEPTH_BUFFER_BIT", ENUM, 0 },
 -    { GL_DEPTH_CLEAR_VALUE, "GL_DEPTH_CLEAR_VALUE", FLOAT, 1 },
 -    { GL_DEPTH_COMPONENT, "GL_DEPTH_COMPONENT", ENUM, 0 },
 -    { GL_DEPTH_FUNC, "GL_DEPTH_FUNC", ENUM, 1 },
 -    { GL_DEPTH_RANGE, "GL_DEPTH_RANGE", FLOAT, 2 },
 -    { GL_DEPTH_SCALE, "GL_DEPTH_SCALE", FLOAT, 1 },
 -    { GL_DEPTH_TEST, "GL_DEPTH_TEST", ENUM, 1 },
 -    { GL_DEPTH_WRITEMASK, "GL_DEPTH_WRITEMASK", BOOLEAN, 1 },
 -    { GL_DIFFUSE, "GL_DIFFUSE", ENUM, 0 },  /*XXX*/
 -    { GL_DITHER, "GL_DITHER", BOOLEAN, 1 },
 -    { GL_DOMAIN, "GL_DOMAIN", ENUM, 0 },
 -    { GL_DONT_CARE, "GL_DONT_CARE", ENUM, 0 },
 -    { GL_DOUBLE, "GL_DOUBLE", ENUM, 0 },
 -    { GL_DOUBLEBUFFER, "GL_DOUBLEBUFFER", BOOLEAN, 1},
 -    { GL_DRAW_BUFFER, "GL_DRAW_BUFFER", ENUM, 1 },
 -    { GL_DRAW_PIXEL_TOKEN, "GL_DRAW_PIXEL_TOKEN", ENUM, 0 },
 -    { GL_DST_ALPHA, "GL_DST_ALPHA", ENUM, 0 },
 -    { GL_DST_COLOR, "GL_DST_COLOR", ENUM, 0 },
 - 
 -    { GL_EDGE_FLAG, "GL_EDGE_FLAG", BOOLEAN, 1 },
 -    /* XXX GL_EDGE_FLAG_ARRAY_* */
 -    { GL_EMISSION, "GL_EMISSION", ENUM, 0 }, /* XXX */
 -    { GL_ENABLE_BIT, "GL_ENABLE_BIT", ENUM, 0 },
 -    { GL_EQUAL, "GL_EQUAL", ENUM, 0 },
 -    { GL_EQUIV, "GL_EQUIV", ENUM, 0 },
 -    { GL_EVAL_BIT, "GL_EVAL_BIT", ENUM, 0 },
 -    { GL_EXP, "GL_EXP", ENUM, 0 },
 -    { GL_EXP2, "GL_EXP2", ENUM, 0 },
 -    { GL_EXTENSIONS, "GL_EXTENSIONS", ENUM, 0 },
 -    { GL_EYE_LINEAR, "GL_EYE_LINEAR", ENUM, 0 },
 -    { GL_EYE_PLANE, "GL_EYE_PLANE", ENUM, 0 },
 - 
 -    { GL_FALSE, "GL_FALSE", ENUM, 0 },
 -    { GL_FASTEST, "GL_FASTEST", ENUM, 0 },
 -    { GL_FEEDBACK, "GL_FEEDBACK", ENUM, 0 },
 -    { GL_FEEDBACK_BUFFER_POINTER, "GL_FEEDBACK_BUFFER_POINTER", VOID, 0 },
 -    { GL_FEEDBACK_BUFFER_SIZE, "GL_FEEDBACK_BUFFER_SIZE", INT, 1 },
 -    { GL_FEEDBACK_BUFFER_TYPE, "GL_FEEDBACK_BUFFER_TYPE", INT, 1 },
 -    { GL_FILL, "GL_FILL", ENUM, 0 },
 -    { GL_FLAT, "GL_FLAT", ENUM, 0 },
 -    { GL_FLOAT, "GL_FLOAT", ENUM, 0 },
 -    { GL_FOG, "GL_FOG", BOOLEAN, 1 },
 -    { GL_FOG_BIT, "GL_FOG_BIT", ENUM, 0 },
 -    { GL_FOG_COLOR, "GL_FOG_COLOR", FLOAT, 4 },
 -    { GL_FOG_DENSITY, "GL_FOG_DENSITY", FLOAT, 1 },
 -    { GL_FOG_END, "GL_FOG_END", FLOAT, 1 },
 -    { GL_FOG_HINT, "GL_FOG_HINT", ENUM, 1 },
 -    { GL_FOG_INDEX, "GL_FOG_INDEX", INT, 1 },
 -    { GL_FOG_MODE, "GL_FOG_MODE", ENUM, 1 },
 -    { GL_FOG_START, "GL_FOG_START", FLOAT, 1 },
 -    { GL_FRONT, "GL_FRONT", ENUM, 0 },
 -    { GL_FRONT_AND_BACK, "GL_FRONT_AND_BACK", ENUM, 0 },
 -    { GL_FRONT_FACE, "GL_FRONT_FACE", ENUM, 1 },
 -    { GL_FRONT_LEFT, "GL_FRONT_LEFT", ENUM, 0 },
 -    { GL_FRONT_RIGHT, "GL_FRONT_RIGHT", ENUM, 0 },
 - 
 -    { GL_GEQUAL, "GL_GEQUAL", ENUM, 0 },
 -    { GL_GREATER, "GL_GREATER", ENUM, 0 },
 -    { GL_GREEN, "GL_GREEN", ENUM, 0 },
 -    { GL_GREEN_BIAS, "GL_GREEN_BIAS", FLOAT, 1 },
 -    { GL_GREEN_BITS, "GL_GREEN_BITS", INT, 1 },
 -    { GL_GREEN_SCALE, "GL_GREEN_SCALE", FLOAT, 1 },
 - 
 - 
 - 
 -    { GL_LESS, "GL_LESS", ENUM, 0 },
 -    { GL_LEQUAL, "GL_LEQUAL", ENUM, 0 },
 -    { GL_LIGHTING, "GL_LIGHTING", BOOLEAN, 1 },
 -    { GL_LINE_SMOOTH, "GL_LINE_SMOOTH", BOOLEAN, 1 },
 -    { GL_LINE_STIPPLE, "GL_LINE_STIPPLE", BOOLEAN, 1 },
 -    { GL_LINE_STIPPLE_PATTERN, "GL_LINE_STIPPLE_PATTERN", INT, 1 },
 -    { GL_LINE_STIPPLE_REPEAT, "GL_LINE_STIPPLE_REPEAT", INT, 1 },
 -    { GL_LINE_WIDTH, "GL_LINE_WIDTH", FLOAT, 1 },
 - 
 -    { GL_MODELVIEW_MATRIX, "GL_MODELVIEW_MATRIX", DOUBLE, 16 },
 - 
 -    { GL_NEVER, "GL_NEVER", ENUM, 0 },
 -    { GL_NOTEQUAL, "GL_NOTEQUAL", ENUM, 0 },
 - 
 -    { GL_PROJECTION_MATRIX, "GL_PROJECTION_MATRIX", FLOAT, 16 },
 - 
 -    { GL_PACK_SWAP_BYTES, "GL_PACK_SWAP_BYTES", INT, 1 },
 -    { GL_PACK_LSB_FIRST, "GL_PACK_LSB_FIRST", INT, 1 },
 -    { GL_PACK_ROW_LENGTH, "GL_PACK_ROW_LENGTH", INT, 1 },
 -    { GL_PACK_SKIP_PIXELS, "GL_PACK_SKIP_PIXELS", INT, 1 },
 -    { GL_PACK_SKIP_ROWS, "GL_PACK_SKIP_ROWS", INT, 1 },
 -    { GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT", INT, 1 },
 - 
 -    { GL_TRUE, "GL_TRUE", ENUM, 0 },
 - 
 -    { GL_UNPACK_SWAP_BYTES, "GL_UNPACK_SWAP_BYTES", INT, 1 },
 -    { GL_UNPACK_LSB_FIRST, "GL_UNPACK_LSB_FIRST", INT, 1 },
 -    { GL_UNPACK_ROW_LENGTH, "GL_UNPACK_ROW_LENGTH", INT, 1 },
 -    { GL_UNPACK_SKIP_PIXELS, "GL_UNPACK_SKIP_PIXELS", INT, 1 },
 -    { GL_UNPACK_SKIP_ROWS, "GL_UNPACK_SKIP_ROWS", INT, 1 },
 -    { GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT", INT, 1 },
 - 
 -    { GL_VIEWPORT, "GL_VIEWPORT", INT, 4 },
 - 
 - 
 -    /*
 -     * Extensions
 -     */
 - 
 - #if defined(GL_EXT_blend_minmax)
 -    { GL_BLEND_EQUATION_EXT, "GL_BLEND_EQUATION_EXT", ENUM, 1 },
 - #endif
 - #if defined(GL_EXT_blend_color)
 -    { GL_BLEND_COLOR_EXT, "GL_BLEND_COLOR_EXT", FLOAT, 4 },
 - #endif
 - #if defined(GL_EXT_point_parameters)
 -    { GL_DISTANCE_ATTENUATION_EXT, "GL_DISTANCE_ATTENUATION_EXT", FLOAT, 1 },
 - #endif
 - #if defined(GL_INGR_blend_func_separate)
 -    { GL_BLEND_SRC_RGB_INGR, "GL_BLEND_SRC_RGB_INGR", ENUM, 1 },
 -    { GL_BLEND_DST_RGB_INGR, "GL_BLEND_DST_RGB_INGR", ENUM, 1 },
 -    { GL_BLEND_SRC_ALPHA_INGR, "GL_BLEND_SRC_ALPHA_INGR", ENUM, 1 },
 -    { GL_BLEND_DST_ALPHA_INGR, "GL_BLEND_DST_ALPHA_INGR", ENUM, 1 },
 - #endif
 - 
 - 
 -    { LAST_TOKEN, "", 0, 0 }
 - };
 - 
 - 
 - static const struct EnumRecord *FindRecord( GLenum var )
 - {
 -    int i;
 -    for (i = 0; EnumTable[i].enumerator != LAST_TOKEN; i++) {
 -       if (EnumTable[i].enumerator == var) {
 - 	 return &EnumTable[i];
 -       }
 -    }
 -    return NULL;
 - }
 - 
 - 
 - 
 - /*
 -  * Return the string label for the given enum.
 -  */
 - const char *GetEnumString( GLenum var )
 - {
 -    const struct EnumRecord *rec = FindRecord(var);
 -    if (rec)
 -       return rec->string;
 -    else
 -       return NULL;
 - }
 - 
 - 
 - 
 - /*
 -  * Print current value of the given state variable.
 -  */
 - void PrintState( int indent, GLenum var )
 - {
 -    const struct EnumRecord *rec = FindRecord(var);
 - 
 -    while (indent-- > 0)
 -       putchar(' ');
 - 
 -    if (rec) {
 -       if (rec->getCount <= 0) {
 -          assert(rec->getType == ENUM);
 -          printf("%s is not a state variable\n", rec->string);
 -       }
 -       else {
 -          switch (rec->getType) {
 -              case INT:
 -                 {
 -                    GLint values[100];
 -                    int i;
 -                    glGetIntegerv(rec->enumerator, values);
 -                    printf("%s = ", rec->string);
 -                    for (i = 0; i < rec->getCount; i++)
 -                       printf("%d ", values[i]);
 -                    printf("\n");
 -                 }
 -                 break;
 -              case FLOAT:
 -                 {
 -                    GLfloat values[100];
 -                    int i;
 -                    glGetFloatv(rec->enumerator, values);
 -                    printf("%s = ", rec->string);
 -                    for (i = 0; i < rec->getCount; i++)
 -                       printf("%f ", values[i]);
 -                    printf("\n");
 -                 }
 -                 break;
 -              case DOUBLE:
 -                 {
 -                    GLdouble values[100];
 -                    int i;
 -                    glGetDoublev(rec->enumerator, values);
 -                    printf("%s = ", rec->string);
 -                    for (i = 0; i < rec->getCount; i++)
 -                       printf("%f ", (float) values[i]);
 -                    printf("\n");
 -                 }
 -                 break;
 -              case BOOLEAN:
 -                 {
 -                    GLboolean values[100];
 -                    int i;
 -                    glGetBooleanv(rec->enumerator, values);
 -                    printf("%s = ", rec->string);
 -                    for (i = 0; i < rec->getCount; i++)
 -                       printf("%s ", values[i] ? "GL_TRUE" : "GL_FALSE");
 -                    printf("\n");
 -                 }
 -                 break;
 -              case ENUM:
 -                 {
 -                    GLint values[100];
 -                    int i;
 -                    glGetIntegerv(rec->enumerator, values);
 -                    printf("%s = ", rec->string);
 -                    for (i = 0; i < rec->getCount; i++) {
 -                       const char *str = GetEnumString((GLenum) values[i]);
 -                       if (str)
 -                          printf("%s ", str);
 -                       else
 -                          printf("??? ");
 -                    }
 -                    printf("\n");
 -                 }
 -                 break;
 -              case VOID:
 -                 {
 -                    GLvoid *values[100];
 -                    int i;
 -                    glGetPointerv(rec->enumerator, values);
 -                    printf("%s = ", rec->string);
 -                    for (i = 0; i < rec->getCount; i++) {
 - 		       printf("%p ", values[i]);
 -                    }
 -                    printf("\n");
 -                 }
 -                 break;
 -              default:
 -                 printf("fatal error in PrintState()\n");
 -                 abort();
 -          }
 -       }
 -    }
 -    else {
 -       printf("Unknown GLenum passed to PrintState()\n");
 -    }
 - }
 - 
 - 
 - 
 - /*
 -  * Print all glPixelStore-related state.
 -  * NOTE: Should write similar functions for lighting, texturing, etc.
 -  */
 - void PrintPixelStoreState( void )
 - {
 -    const GLenum enums[] = {
 -       GL_PACK_SWAP_BYTES,
 -       GL_PACK_LSB_FIRST,
 -       GL_PACK_ROW_LENGTH,
 -       GL_PACK_SKIP_PIXELS,
 -       GL_PACK_SKIP_ROWS,
 -       GL_PACK_ALIGNMENT,
 -       GL_UNPACK_SWAP_BYTES,
 -       GL_UNPACK_LSB_FIRST,
 -       GL_UNPACK_ROW_LENGTH,
 -       GL_UNPACK_SKIP_PIXELS,
 -       GL_UNPACK_SKIP_ROWS,
 -       GL_UNPACK_ALIGNMENT,
 -       0
 -    };
 -    int i;
 -    printf("Pixel pack/unpack state:\n");
 -    for (i = 0; enums[i]; i++) {
 -       PrintState(3, enums[i]);
 -    }
 - }
 - 
 - 
 - 
 - 
 - /*
 -  * Print all state for the given attribute group.
 -  */
 - void PrintAttribState( GLbitfield attrib )
 - {
 -    static const GLenum depth_buffer_enums[] = {
 -       GL_DEPTH_FUNC,
 -       GL_DEPTH_CLEAR_VALUE,
 -       GL_DEPTH_TEST,
 -       GL_DEPTH_WRITEMASK,
 -       0
 -    };
 -    static const GLenum fog_enums[] = {
 -       GL_FOG,
 -       GL_FOG_COLOR,
 -       GL_FOG_DENSITY,
 -       GL_FOG_START,
 -       GL_FOG_END,
 -       GL_FOG_INDEX,
 -       GL_FOG_MODE,
 -       0
 -    };
 -    static const GLenum line_enums[] = {
 -       GL_LINE_SMOOTH,
 -       GL_LINE_STIPPLE,
 -       GL_LINE_STIPPLE_PATTERN,
 -       GL_LINE_STIPPLE_REPEAT,
 -       GL_LINE_WIDTH,
 -       0
 -    };
 - 
 -    const GLenum *enumList = NULL;
 - 
 -    switch (attrib) {
 -       case GL_DEPTH_BUFFER_BIT:
 -          enumList = depth_buffer_enums;
 -          printf("GL_DEPTH_BUFFER_BIT state:\n");
 -          break;
 -       case GL_FOG_BIT:
 -          enumList = fog_enums;
 -          printf("GL_FOG_BIT state:\n");
 -          break;
 -       case GL_LINE_BIT:
 -          enumList = line_enums;
 -          printf("GL_LINE_BIT state:\n");
 -          break;
 -       default:
 -          printf("Bad value in PrintAttribState()\n");
 -    }
 - 
 -    if (enumList) {
 -       int i;
 -       for (i = 0; enumList[i]; i++)
 -          PrintState(3, enumList[i]);
 -    }
 - }
 - 
 - 
 - /*#define TEST*/
 - #ifdef TEST
 - 
 - #include <GL/glut.h>
 - 
 - int main( int argc, char *argv[] )
 - {
 -    glutInit( &argc, argv );
 -    glutInitWindowPosition(0, 0);
 -    glutInitWindowSize(400, 300);
 -    glutInitDisplayMode(GLUT_RGB);
 -    glutCreateWindow(argv[0]);
 -    PrintAttribState(GL_DEPTH_BUFFER_BIT);
 -    PrintAttribState(GL_FOG_BIT);
 -    PrintAttribState(GL_LINE_BIT);
 -    PrintState(0, GL_ALPHA_BITS);
 -    PrintState(0, GL_VIEWPORT);
 -    PrintState(0, GL_ALPHA_TEST_FUNC);
 -    PrintState(0, GL_MODELVIEW_MATRIX);
 -    PrintState(0, GL_ALWAYS);
 -    PrintPixelStoreState();
 -    return 0;
 - }
 - 
 - #endif
 
 
  |