//========= Copyright Valve Corporation, All rights reserved. ============// // TOGL CODE LICENSE // // Copyright 2011-2014 Valve Corporation // All Rights Reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // // glmgrbasics.cpp // //=============================================================================== #include "togles/rendermechanism.h" #include "tier0/icommandline.h" #include "tier1/utlhash.h" #include "tier1/utlmap.h" #include "tier0/vprof.h" #ifdef OSX #include #ifdef CGLPROFILER_ENABLE #include #endif #endif #include "tier0/valve_minmax_off.h" #include // memdbgon -must- be the last include file in a .cpp file. #include "tier0/memdbgon.h" //=============================================================================== // decoding tables for debug typedef struct { unsigned long value; const char *name; } GLMValueEntry_t; #define TERMVALUE 0x31415926 // terminator for value tables #define VE( x ) { x, #x } // "value entry" const GLMValueEntry_t g_d3d_devtypes[] = { VE( D3DDEVTYPE_HAL ), VE( D3DDEVTYPE_REF ), VE( TERMVALUE ) }; const GLMValueEntry_t g_d3d_formats[] = { VE( D3DFMT_INDEX16 ), VE( D3DFMT_D16 ), VE( D3DFMT_D24S8 ), VE( D3DFMT_A8R8G8B8 ), VE( D3DFMT_A4R4G4B4 ), VE( D3DFMT_X8R8G8B8 ), VE( D3DFMT_R5G6R5 ), VE( D3DFMT_X1R5G5B5 ), VE( D3DFMT_A1R5G5B5 ), VE( D3DFMT_L8 ), VE( D3DFMT_A8L8 ), VE( D3DFMT_A ), VE( D3DFMT_DXT1 ), VE( D3DFMT_DXT3 ), VE( D3DFMT_DXT5 ), VE( D3DFMT_V8U8 ), VE( D3DFMT_Q8W8V8U8 ), VE( D3DFMT_X8L8V8U8 ), VE( D3DFMT_A16B16G16R16F ), VE( D3DFMT_A16B16G16R16 ), VE( D3DFMT_R32F ), VE( D3DFMT_A32B32G32R32F ), VE( D3DFMT_R8G8B8 ), VE( D3DFMT_D24X4S4 ), VE( D3DFMT_A8 ), VE( D3DFMT_R5G6B5 ), VE( D3DFMT_D15S1 ), VE( D3DFMT_D24X8 ), VE( D3DFMT_VERTEXDATA ), VE( D3DFMT_INDEX32 ), // vendor specific formats (fourcc's) VE( D3DFMT_NV_INTZ ), VE( D3DFMT_NV_RAWZ ), VE( D3DFMT_NV_NULL ), VE( D3DFMT_ATI_D16 ), VE( D3DFMT_ATI_D24S8 ), VE( D3DFMT_ATI_2N ), VE( D3DFMT_ATI_1N ), VE( D3DFMT_UNKNOWN ), VE( TERMVALUE ) }; const GLMValueEntry_t g_d3d_rtypes[] = { VE( D3DRTYPE_SURFACE ), VE( D3DRTYPE_TEXTURE ), VE( D3DRTYPE_VOLUMETEXTURE ), VE( D3DRTYPE_CUBETEXTURE ), VE( D3DRTYPE_VERTEXBUFFER ), VE( D3DRTYPE_INDEXBUFFER ), VE( TERMVALUE ) }; const GLMValueEntry_t g_d3d_usages[] = { VE( D3DUSAGE_RENDERTARGET ), VE( D3DUSAGE_DEPTHSTENCIL ), VE( D3DUSAGE_DYNAMIC ), VE( D3DUSAGE_AUTOGENMIPMAP ), //VE( D3DUSAGE_DMAP ), //VE( D3DUSAGE_QUERY_LEGACYBUMPMAP ), VE( D3DUSAGE_QUERY_SRGBREAD ), VE( D3DUSAGE_QUERY_FILTER ), VE( D3DUSAGE_QUERY_SRGBWRITE ), VE( D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING ), VE( D3DUSAGE_QUERY_VERTEXTEXTURE ), //VE( D3DUSAGE_QUERY_WRAPANDMIP ), VE( D3DUSAGE_WRITEONLY ), VE( D3DUSAGE_SOFTWAREPROCESSING ), VE( D3DUSAGE_DONOTCLIP ), VE( D3DUSAGE_POINTS ), VE( D3DUSAGE_RTPATCHES ), VE( D3DUSAGE_NPATCHES ), VE( TERMVALUE ) }; const GLMValueEntry_t g_d3d_rstates[] = { VE( D3DRS_ZENABLE ), VE( D3DRS_FILLMODE ), VE( D3DRS_SHADEMODE ), VE( D3DRS_ZWRITEENABLE ), VE( D3DRS_ALPHATESTENABLE ), VE( D3DRS_LASTPIXEL ), VE( D3DRS_SRCBLEND ), VE( D3DRS_DESTBLEND ), VE( D3DRS_CULLMODE ), VE( D3DRS_ZFUNC ), VE( D3DRS_ALPHAREF ), VE( D3DRS_ALPHAFUNC ), VE( D3DRS_DITHERENABLE ), VE( D3DRS_ALPHABLENDENABLE ), VE( D3DRS_FOGENABLE ), VE( D3DRS_SPECULARENABLE ), VE( D3DRS_FOGCOLOR ), VE( D3DRS_FOGTABLEMODE ), VE( D3DRS_FOGSTART ), VE( D3DRS_FOGEND ), VE( D3DRS_FOGDENSITY ), VE( D3DRS_RANGEFOGENABLE ), VE( D3DRS_STENCILENABLE ), VE( D3DRS_STENCILFAIL ), VE( D3DRS_STENCILZFAIL ), VE( D3DRS_STENCILPASS ), VE( D3DRS_STENCILFUNC ), VE( D3DRS_STENCILREF ), VE( D3DRS_STENCILMASK ), VE( D3DRS_STENCILWRITEMASK ), VE( D3DRS_TEXTUREFACTOR ), VE( D3DRS_WRAP0 ), VE( D3DRS_WRAP1 ), VE( D3DRS_WRAP2 ), VE( D3DRS_WRAP3 ), VE( D3DRS_WRAP4 ), VE( D3DRS_WRAP5 ), VE( D3DRS_WRAP6 ), VE( D3DRS_WRAP7 ), VE( D3DRS_CLIPPING ), VE( D3DRS_LIGHTING ), VE( D3DRS_AMBIENT ), VE( D3DRS_FOGVERTEXMODE ), VE( D3DRS_COLORVERTEX ), VE( D3DRS_LOCALVIEWER ), VE( D3DRS_NORMALIZENORMALS ), VE( D3DRS_DIFFUSEMATERIALSOURCE ), VE( D3DRS_SPECULARMATERIALSOURCE ), VE( D3DRS_AMBIENTMATERIALSOURCE ), VE( D3DRS_EMISSIVEMATERIALSOURCE ), VE( D3DRS_VERTEXBLEND ), VE( D3DRS_CLIPPLANEENABLE ), VE( D3DRS_POINTSIZE ), VE( D3DRS_POINTSIZE_MIN ), VE( D3DRS_POINTSPRITEENABLE ), VE( D3DRS_POINTSCALEENABLE ), VE( D3DRS_POINTSCALE_A ), VE( D3DRS_POINTSCALE_B ), VE( D3DRS_POINTSCALE_C ), VE( D3DRS_MULTISAMPLEANTIALIAS ), VE( D3DRS_MULTISAMPLEMASK ), VE( D3DRS_PATCHEDGESTYLE ), VE( D3DRS_DEBUGMONITORTOKEN ), VE( D3DRS_POINTSIZE_MAX ), VE( D3DRS_INDEXEDVERTEXBLENDENABLE ), VE( D3DRS_COLORWRITEENABLE ), VE( D3DRS_TWEENFACTOR ), VE( D3DRS_BLENDOP ), VE( D3DRS_POSITIONDEGREE ), VE( D3DRS_NORMALDEGREE ), VE( D3DRS_SCISSORTESTENABLE ), VE( D3DRS_SLOPESCALEDEPTHBIAS ), VE( D3DRS_ANTIALIASEDLINEENABLE ), VE( D3DRS_MINTESSELLATIONLEVEL ), VE( D3DRS_MAXTESSELLATIONLEVEL ), VE( D3DRS_ADAPTIVETESS_X ), VE( D3DRS_ADAPTIVETESS_Y ), VE( D3DRS_ADAPTIVETESS_Z ), VE( D3DRS_ADAPTIVETESS_W ), VE( D3DRS_ENABLEADAPTIVETESSELLATION ), VE( D3DRS_TWOSIDEDSTENCILMODE ), VE( D3DRS_CCW_STENCILFAIL ), VE( D3DRS_CCW_STENCILZFAIL ), VE( D3DRS_CCW_STENCILPASS ), VE( D3DRS_CCW_STENCILFUNC ), VE( D3DRS_COLORWRITEENABLE1 ), VE( D3DRS_COLORWRITEENABLE2 ), VE( D3DRS_COLORWRITEENABLE3 ), VE( D3DRS_BLENDFACTOR ), VE( D3DRS_SRGBWRITEENABLE ), VE( D3DRS_DEPTHBIAS ), VE( D3DRS_WRAP8 ), VE( D3DRS_WRAP9 ), VE( D3DRS_WRAP10 ), VE( D3DRS_WRAP11 ), VE( D3DRS_WRAP12 ), VE( D3DRS_WRAP13 ), VE( D3DRS_WRAP14 ), VE( D3DRS_WRAP15 ), VE( D3DRS_SEPARATEALPHABLENDENABLE ), VE( D3DRS_SRCBLENDALPHA ), VE( D3DRS_DESTBLENDALPHA ), VE( D3DRS_BLENDOPALPHA ), VE( TERMVALUE ) }; const GLMValueEntry_t g_d3d_opcodes[] = { VE( D3DSIO_NOP ), VE( D3DSIO_PHASE ), VE( D3DSIO_RET ), VE( D3DSIO_ELSE ), VE( D3DSIO_ENDIF ), VE( D3DSIO_ENDLOOP ), VE( D3DSIO_ENDREP ), VE( D3DSIO_BREAK ), VE( D3DSIO_TEXDEPTH ), VE( D3DSIO_TEXKILL ), VE( D3DSIO_BEM ), VE( D3DSIO_TEXBEM ), VE( D3DSIO_TEXBEML ), VE( D3DSIO_TEXDP3 ), VE( D3DSIO_TEXDP3TEX ), VE( D3DSIO_TEXM3x2DEPTH ), VE( D3DSIO_TEXM3x2TEX ), VE( D3DSIO_TEXM3x3 ), VE( D3DSIO_TEXM3x3PAD ), VE( D3DSIO_TEXM3x3TEX ), VE( D3DSIO_TEXM3x3VSPEC ), VE( D3DSIO_TEXREG2AR ), VE( D3DSIO_TEXREG2GB ), VE( D3DSIO_TEXREG2RGB ), VE( D3DSIO_LABEL ), VE( D3DSIO_CALL ), VE( D3DSIO_IF ), VE( D3DSIO_LOOP ), VE( D3DSIO_REP ), VE( D3DSIO_BREAKP ), VE( D3DSIO_DSX ), VE( D3DSIO_DSY ), VE( D3DSIO_NRM ), VE( D3DSIO_MOVA ), VE( D3DSIO_MOV ), VE( D3DSIO_RCP ), VE( D3DSIO_RSQ ), VE( D3DSIO_EXP ), VE( D3DSIO_EXPP ), VE( D3DSIO_LOG ), VE( D3DSIO_LOGP ), VE( D3DSIO_FRC ), VE( D3DSIO_LIT ), VE( D3DSIO_ABS ), VE( D3DSIO_TEXM3x3SPEC ), VE( D3DSIO_M4x4 ), VE( D3DSIO_M4x3 ), VE( D3DSIO_M3x4 ), VE( D3DSIO_M3x3 ), VE( D3DSIO_M3x2 ), VE( D3DSIO_CALLNZ ), VE( D3DSIO_IFC ), VE( D3DSIO_BREAKC ), VE( D3DSIO_SETP ), VE( D3DSIO_TEXLDL ), VE( D3DSIO_ADD ), VE( D3DSIO_SUB ), VE( D3DSIO_MUL ), VE( D3DSIO_DP3 ), VE( D3DSIO_DP4 ), VE( D3DSIO_MIN ), VE( D3DSIO_MAX ), VE( D3DSIO_DST ), VE( D3DSIO_SLT ), VE( D3DSIO_SGE ), VE( D3DSIO_CRS ), VE( D3DSIO_POW ), VE( D3DSIO_DP2ADD ), VE( D3DSIO_LRP ), VE( D3DSIO_SGN ), VE( D3DSIO_CND ), VE( D3DSIO_CMP ), VE( D3DSIO_SINCOS ), VE( D3DSIO_MAD ), VE( D3DSIO_TEXLDD ), VE( D3DSIO_TEXCOORD ), VE( D3DSIO_TEX ), VE( D3DSIO_DCL ), VE( D3DSTT_UNKNOWN ), VE( D3DSTT_2D ), VE( D3DSTT_CUBE ), VE( D3DSTT_VOLUME ), VE( D3DSIO_DEFB ), VE( D3DSIO_DEFI ), VE( D3DSIO_DEF ), VE( D3DSIO_COMMENT ), VE( D3DSIO_END ), }; const GLMValueEntry_t g_d3d_vtxdeclusages[] = { { D3DDECLUSAGE_POSITION ,"POSN" }, // P { D3DDECLUSAGE_BLENDWEIGHT ,"BLWT" }, // W { D3DDECLUSAGE_BLENDINDICES ,"BLIX" }, // I { D3DDECLUSAGE_NORMAL ,"NORM" }, // N { D3DDECLUSAGE_PSIZE ,"PSIZ" }, // S { D3DDECLUSAGE_TEXCOORD ,"TEXC" }, // T { D3DDECLUSAGE_TANGENT ,"TANG" }, // G { D3DDECLUSAGE_BINORMAL ,"BINO" }, // B { D3DDECLUSAGE_TESSFACTOR ,"TESS" }, // S { D3DDECLUSAGE_PLUGH ,"????" }, // ? { D3DDECLUSAGE_COLOR ,"COLR" }, // C { D3DDECLUSAGE_FOG ,"FOG " }, // F { D3DDECLUSAGE_DEPTH ,"DEPT" }, // D { D3DDECLUSAGE_SAMPLE ,"SAMP" } // M }; const GLMValueEntry_t g_d3d_vtxdeclusages_short[] = { { D3DDECLUSAGE_POSITION ,"P" }, { D3DDECLUSAGE_BLENDWEIGHT ,"W" }, { D3DDECLUSAGE_BLENDINDICES ,"I" }, { D3DDECLUSAGE_NORMAL ,"N" }, { D3DDECLUSAGE_PSIZE ,"S" }, { D3DDECLUSAGE_TEXCOORD ,"T" }, { D3DDECLUSAGE_TANGENT ,"G" }, { D3DDECLUSAGE_BINORMAL ,"B" }, { D3DDECLUSAGE_TESSFACTOR ,"S" }, { D3DDECLUSAGE_PLUGH ,"?" }, { D3DDECLUSAGE_COLOR ,"C" }, { D3DDECLUSAGE_FOG ,"F" }, { D3DDECLUSAGE_DEPTH ,"D" }, { D3DDECLUSAGE_SAMPLE ,"M" } }; const GLMValueEntry_t g_cgl_rendids[] = // need to mask with 0xFFFFFF00 to match on these (ex: 8800GT == 0x00022608 { #ifdef OSX VE( kCGLRendererGenericID ), VE( kCGLRendererGenericFloatID ), VE( kCGLRendererAppleSWID ), VE( kCGLRendererATIRage128ID ), VE( kCGLRendererATIRadeonID ), VE( kCGLRendererATIRageProID ), VE( kCGLRendererATIRadeon8500ID ), VE( kCGLRendererATIRadeon9700ID ), VE( kCGLRendererATIRadeonX1000ID ), VE( kCGLRendererATIRadeonX2000ID ), VE( kCGLRendererGeForce2MXID ), VE( kCGLRendererGeForce3ID ), VE( kCGLRendererGeForceFXID ), // also for GF6 and GF7 VE( kCGLRendererGeForce8xxxID ), VE( kCGLRendererVTBladeXP2ID ), VE( kCGLRendererIntel900ID ), VE( kCGLRendererMesa3DFXID ), #endif VE( TERMVALUE ) }; const GLMValueEntry_t g_gl_errors[] = { VE( GL_INVALID_ENUM ), VE( GL_INVALID_VALUE ), VE( GL_INVALID_OPERATION ), VE( GL_STACK_OVERFLOW ), VE( GL_STACK_UNDERFLOW ), VE( GL_OUT_OF_MEMORY ), VE( GL_INVALID_FRAMEBUFFER_OPERATION_EXT ), VE( GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT ), VE( GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT ), VE( GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT ), VE( GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT ), VE( GL_FRAMEBUFFER_UNSUPPORTED_EXT ), VE( GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT ), VE( GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT ) }; // there are some ARB/EXT dupes in this table but that doesn't matter too much const GLMValueEntry_t g_gl_enums[] = { { 0x0000, "GL_ZERO" }, { 0x0001, "GL_ONE" }, { 0x0004, "GL_TRIANGLES" }, { 0x0005, "GL_TRIANGLE_STRIP" }, { 0x0006, "GL_TRIANGLE_FAN" }, { 0x0007, "GL_QUADS" }, { 0x0008, "GL_QUAD_STRIP" }, { 0x0009, "GL_POLYGON" }, { 0x0200, "GL_NEVER" }, { 0x0201, "GL_LESS" }, { 0x0202, "GL_EQUAL" }, { 0x0203, "GL_LEQUAL" }, { 0x0204, "GL_GREATER" }, { 0x0205, "GL_NOTEQUAL" }, { 0x0206, "GL_GEQUAL" }, { 0x0207, "GL_ALWAYS" }, { 0x0300, "GL_SRC_COLOR" }, { 0x0301, "GL_ONE_MINUS_SRC_COLOR" }, { 0x0302, "GL_SRC_ALPHA" }, { 0x0303, "GL_ONE_MINUS_SRC_ALPHA" }, { 0x0304, "GL_DST_ALPHA" }, { 0x0305, "GL_ONE_MINUS_DST_ALPHA" }, { 0x0306, "GL_DST_COLOR" }, { 0x0307, "GL_ONE_MINUS_DST_COLOR" }, { 0x0308, "GL_SRC_ALPHA_SATURATE" }, { 0x0400, "GL_FRONT_LEFT" }, { 0x0401, "GL_FRONT_RIGHT" }, { 0x0402, "GL_BACK_LEFT" }, { 0x0403, "GL_BACK_RIGHT" }, { 0x0404, "GL_FRONT" }, { 0x0405, "GL_BACK" }, { 0x0406, "GL_LEFT" }, { 0x0407, "GL_RIGHT" }, { 0x0408, "GL_FRONT_AND_BACK" }, { 0x0409, "GL_AUX0" }, { 0x040A, "GL_AUX1" }, { 0x040B, "GL_AUX2" }, { 0x040C, "GL_AUX3" }, { 0x0500, "GL_INVALID_ENUM" }, { 0x0501, "GL_INVALID_VALUE" }, { 0x0502, "GL_INVALID_OPERATION" }, { 0x0503, "GL_STACK_OVERFLOW" }, { 0x0504, "GL_STACK_UNDERFLOW" }, { 0x0505, "GL_OUT_OF_MEMORY" }, { 0x0506, "GL_INVALID_FRAMEBUFFER_OPERATION" }, { 0x0600, "GL_2D" }, { 0x0601, "GL_3D" }, { 0x0602, "GL_3D_COLOR" }, { 0x0603, "GL_3D_COLOR_TEXTURE" }, { 0x0604, "GL_4D_COLOR_TEXTURE" }, { 0x0700, "GL_PASS_THROUGH_TOKEN" }, { 0x0701, "GL_POINT_TOKEN" }, { 0x0702, "GL_LINE_TOKEN" }, { 0x0703, "GL_POLYGON_TOKEN" }, { 0x0704, "GL_BITMAP_TOKEN" }, { 0x0705, "GL_DRAW_PIXEL_TOKEN" }, { 0x0706, "GL_COPY_PIXEL_TOKEN" }, { 0x0707, "GL_LINE_RESET_TOKEN" }, { 0x0800, "GL_EXP" }, { 0x0801, "GL_EXP2" }, { 0x0900, "GL_CW" }, { 0x0901, "GL_CCW" }, { 0x0A00, "GL_COEFF" }, { 0x0A01, "GL_ORDER" }, { 0x0A02, "GL_DOMAIN" }, { 0x0B00, "GL_CURRENT_COLOR" }, { 0x0B01, "GL_CURRENT_INDEX" }, { 0x0B02, "GL_CURRENT_NORMAL" }, { 0x0B03, "GL_CURRENT_TEXTURE_COORDS" }, { 0x0B04, "GL_CURRENT_RASTER_COLOR" }, { 0x0B05, "GL_CURRENT_RASTER_INDEX" }, { 0x0B06, "GL_CURRENT_RASTER_TEXTURE_COORDS" }, { 0x0B07, "GL_CURRENT_RASTER_POSITION" }, { 0x0B08, "GL_CURRENT_RASTER_POSITION_VALID" }, { 0x0B09, "GL_CURRENT_RASTER_DISTANCE" }, { 0x0B10, "GL_POINT_SMOOTH" }, { 0x0B11, "GL_POINT_SIZE" }, { 0x0B12, "GL_POINT_SIZE_RANGE" }, { 0x0B12, "GL_SMOOTH_POINT_SIZE_RANGE" }, { 0x0B13, "GL_POINT_SIZE_GRANULARITY" }, { 0x0B13, "GL_SMOOTH_POINT_SIZE_GRANULARITY" }, { 0x0B20, "GL_LINE_SMOOTH" }, { 0x0B21, "GL_LINE_WIDTH" }, { 0x0B22, "GL_LINE_WIDTH_RANGE" }, { 0x0B22, "GL_SMOOTH_LINE_WIDTH_RANGE" }, { 0x0B23, "GL_LINE_WIDTH_GRANULARITY" }, { 0x0B23, "GL_SMOOTH_LINE_WIDTH_GRANULARITY" }, { 0x0B24, "GL_LINE_STIPPLE" }, { 0x0B25, "GL_LINE_STIPPLE_PATTERN" }, { 0x0B26, "GL_LINE_STIPPLE_REPEAT" }, { 0x0B30, "GL_LIST_MODE" }, { 0x0B31, "GL_MAX_LIST_NESTING" }, { 0x0B32, "GL_LIST_BASE" }, { 0x0B33, "GL_LIST_INDEX" }, { 0x0B40, "GL_POLYGON_MODE" }, { 0x0B41, "GL_POLYGON_SMOOTH" }, { 0x0B42, "GL_POLYGON_STIPPLE" }, { 0x0B43, "GL_EDGE_FLAG" }, { 0x0B44, "GL_CULL_FACE" }, { 0x0B45, "GL_CULL_FACE_MODE" }, { 0x0B46, "GL_FRONT_FACE" }, { 0x0B50, "GL_LIGHTING" }, { 0x0B51, "GL_LIGHT_MODEL_LOCAL_VIEWER" }, { 0x0B52, "GL_LIGHT_MODEL_TWO_SIDE" }, { 0x0B53, "GL_LIGHT_MODEL_AMBIENT" }, { 0x0B54, "GL_SHADE_MODEL" }, { 0x0B55, "GL_COLOR_MATERIAL_FACE" }, { 0x0B56, "GL_COLOR_MATERIAL_PARAMETER" }, { 0x0B57, "GL_COLOR_MATERIAL" }, { 0x0B60, "GL_FOG" }, { 0x0B61, "GL_FOG_INDEX" }, { 0x0B62, "GL_FOG_DENSITY" }, { 0x0B63, "GL_FOG_START" }, { 0x0B64, "GL_FOG_END" }, { 0x0B65, "GL_FOG_MODE" }, { 0x0B66, "GL_FOG_COLOR" }, { 0x0B70, "GL_DEPTH_RANGE" }, { 0x0B71, "GL_DEPTH_TEST" }, { 0x0B72, "GL_DEPTH_WRITEMASK" }, { 0x0B73, "GL_DEPTH_CLEAR_VALUE" }, { 0x0B74, "GL_DEPTH_FUNC" }, { 0x0B80, "GL_ACCUM_CLEAR_VALUE" }, { 0x0B90, "GL_STENCIL_TEST" }, { 0x0B91, "GL_STENCIL_CLEAR_VALUE" }, { 0x0B92, "GL_STENCIL_FUNC" }, { 0x0B93, "GL_STENCIL_VALUE_MASK" }, { 0x0B94, "GL_STENCIL_FAIL" }, { 0x0B95, "GL_STENCIL_PASS_DEPTH_FAIL" }, { 0x0B96, "GL_STENCIL_PASS_DEPTH_PASS" }, { 0x0B97, "GL_STENCIL_REF" }, { 0x0B98, "GL_STENCIL_WRITEMASK" }, { 0x0BA0, "GL_MATRIX_MODE" }, { 0x0BA1, "GL_NORMALIZE" }, { 0x0BA2, "GL_VIEWPORT" }, { 0x0BA3, "GL_MODELVIEW_STACK_DEPTH" }, { 0x0BA4, "GL_PROJECTION_STACK_DEPTH" }, { 0x0BA5, "GL_TEXTURE_STACK_DEPTH" }, { 0x0BA6, "GL_MODELVIEW_MATRIX" }, { 0x0BA7, "GL_PROJECTION_MATRIX" }, { 0x0BA8, "GL_TEXTURE_MATRIX" }, { 0x0BB0, "GL_ATTRIB_STACK_DEPTH" }, { 0x0BB1, "GL_CLIENT_ATTRIB_STACK_DEPTH" }, { 0x0BC0, "GL_ALPHA_TEST" }, { 0x0BC1, "GL_ALPHA_TEST_FUNC" }, { 0x0BC2, "GL_ALPHA_TEST_REF" }, { 0x0BD0, "GL_DITHER" }, { 0x0BE0, "GL_BLEND_DST" }, { 0x0BE1, "GL_BLEND_SRC" }, { 0x0BE2, "GL_BLEND" }, { 0x0BF0, "GL_LOGIC_OP_MODE" }, { 0x0BF1, "GL_INDEX_LOGIC_OP" }, { 0x0BF2, "GL_COLOR_LOGIC_OP" }, { 0x0C00, "GL_AUX_BUFFERS" }, { 0x0C01, "GL_DRAW_BUFFER" }, { 0x0C02, "GL_READ_BUFFER" }, { 0x0C10, "GL_SCISSOR_BOX" }, { 0x0C11, "GL_SCISSOR_TEST" }, { 0x0C20, "GL_INDEX_CLEAR_VALUE" }, { 0x0C21, "GL_INDEX_WRITEMASK" }, { 0x0C22, "GL_COLOR_CLEAR_VALUE" }, { 0x0C23, "GL_COLOR_WRITEMASK" }, { 0x0C30, "GL_INDEX_MODE" }, { 0x0C31, "GL_RGBA_MODE" }, { 0x0C32, "GL_DOUBLEBUFFER" }, { 0x0C33, "GL_STEREO" }, { 0x0C40, "GL_RENDER_MODE" }, { 0x0C50, "GL_PERSPECTIVE_CORRECTION_HINT" }, { 0x0C51, "GL_POINT_SMOOTH_HINT" }, { 0x0C52, "GL_LINE_SMOOTH_HINT" }, { 0x0C53, "GL_POLYGON_SMOOTH_HINT" }, { 0x0C54, "GL_FOG_HINT" }, { 0x0C60, "GL_TEXTURE_GEN_S" }, { 0x0C61, "GL_TEXTURE_GEN_T" }, { 0x0C62, "GL_TEXTURE_GEN_R" }, { 0x0C63, "GL_TEXTURE_GEN_Q" }, { 0x0C70, "GL_PIXEL_MAP_I_TO_I" }, { 0x0C71, "GL_PIXEL_MAP_S_TO_S" }, { 0x0C72, "GL_PIXEL_MAP_I_TO_R" }, { 0x0C73, "GL_PIXEL_MAP_I_TO_G" }, { 0x0C74, "GL_PIXEL_MAP_I_TO_B" }, { 0x0C75, "GL_PIXEL_MAP_I_TO_A" }, { 0x0C76, "GL_PIXEL_MAP_R_TO_R" }, { 0x0C77, "GL_PIXEL_MAP_G_TO_G" }, { 0x0C78, "GL_PIXEL_MAP_B_TO_B" }, { 0x0C79, "GL_PIXEL_MAP_A_TO_A" }, { 0x0CB0, "GL_PIXEL_MAP_I_TO_I_SIZE" }, { 0x0CB1, "GL_PIXEL_MAP_S_TO_S_SIZE" }, { 0x0CB2, "GL_PIXEL_MAP_I_TO_R_SIZE" }, { 0x0CB3, "GL_PIXEL_MAP_I_TO_G_SIZE" }, { 0x0CB4, "GL_PIXEL_MAP_I_TO_B_SIZE" }, { 0x0CB5, "GL_PIXEL_MAP_I_TO_A_SIZE" }, { 0x0CB6, "GL_PIXEL_MAP_R_TO_R_SIZE" }, { 0x0CB7, "GL_PIXEL_MAP_G_TO_G_SIZE" }, { 0x0CB8, "GL_PIXEL_MAP_B_TO_B_SIZE" }, { 0x0CB9, "GL_PIXEL_MAP_A_TO_A_SIZE" }, { 0x0CF0, "GL_UNPACK_SWAP_BYTES" }, { 0x0CF1, "GL_UNPACK_LSB_FIRST" }, { 0x0CF2, "GL_UNPACK_ROW_LENGTH" }, { 0x0CF3, "GL_UNPACK_SKIP_ROWS" }, { 0x0CF4, "GL_UNPACK_SKIP_PIXELS" }, { 0x0CF5, "GL_UNPACK_ALIGNMENT" }, { 0x0D00, "GL_PACK_SWAP_BYTES" }, { 0x0D01, "GL_PACK_LSB_FIRST" }, { 0x0D02, "GL_PACK_ROW_LENGTH" }, { 0x0D03, "GL_PACK_SKIP_ROWS" }, { 0x0D04, "GL_PACK_SKIP_PIXELS" }, { 0x0D05, "GL_PACK_ALIGNMENT" }, { 0x0D10, "GL_MAP_COLOR" }, { 0x0D11, "GL_MAP_STENCIL" }, { 0x0D12, "GL_INDEX_SHIFT" }, { 0x0D13, "GL_INDEX_OFFSET" }, { 0x0D14, "GL_RED_SCALE" }, { 0x0D15, "GL_RED_BIAS" }, { 0x0D16, "GL_ZOOM_X" }, { 0x0D17, "GL_ZOOM_Y" }, { 0x0D18, "GL_GREEN_SCALE" }, { 0x0D19, "GL_GREEN_BIAS" }, { 0x0D1A, "GL_BLUE_SCALE" }, { 0x0D1B, "GL_BLUE_BIAS" }, { 0x0D1C, "GL_ALPHA_SCALE" }, { 0x0D1D, "GL_ALPHA_BIAS" }, { 0x0D1E, "GL_DEPTH_SCALE" }, { 0x0D1F, "GL_DEPTH_BIAS" }, { 0x0D30, "GL_MAX_EVAL_ORDER" }, { 0x0D31, "GL_MAX_LIGHTS" }, { 0x0D32, "GL_MAX_CLIP_PLANES" }, { 0x0D33, "GL_MAX_TEXTURE_SIZE" }, { 0x0D34, "GL_MAX_PIXEL_MAP_TABLE" }, { 0x0D35, "GL_MAX_ATTRIB_STACK_DEPTH" }, { 0x0D36, "GL_MAX_MODELVIEW_STACK_DEPTH" }, { 0x0D37, "GL_MAX_NAME_STACK_DEPTH" }, { 0x0D38, "GL_MAX_PROJECTION_STACK_DEPTH" }, { 0x0D39, "GL_MAX_TEXTURE_STACK_DEPTH" }, { 0x0D3A, "GL_MAX_VIEWPORT_DIMS" }, { 0x0D3B, "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH" }, { 0x0D50, "GL_SUBPIXEL_BITS" }, { 0x0D51, "GL_INDEX_BITS" }, { 0x0D52, "GL_RED_BITS" }, { 0x0D53, "GL_GREEN_BITS" }, { 0x0D54, "GL_BLUE_BITS" }, { 0x0D55, "GL_ALPHA_BITS" }, { 0x0D56, "GL_DEPTH_BITS" }, { 0x0D57, "GL_STENCIL_BITS" }, { 0x0D58, "GL_ACCUM_RED_BITS" }, { 0x0D59, "GL_ACCUM_GREEN_BITS" }, { 0x0D5A, "GL_ACCUM_BLUE_BITS" }, { 0x0D5B, "GL_ACCUM_ALPHA_BITS" }, { 0x0D70, "GL_NAME_STACK_DEPTH" }, { 0x0D80, "GL_AUTO_NORMAL" }, { 0x0D90, "GL_MAP1_COLOR_4" }, { 0x0D91, "GL_MAP1_INDEX" }, { 0x0D92, "GL_MAP1_NORMAL" }, { 0x0D93, "GL_MAP1_TEXTURE_COORD_1" }, { 0x0D94, "GL_MAP1_TEXTURE_COORD_2" }, { 0x0D95, "GL_MAP1_TEXTURE_COORD_3" }, { 0x0D96, "GL_MAP1_TEXTURE_COORD_4" }, { 0x0D97, "GL_MAP1_VERTEX_3" }, { 0x0D98, "GL_MAP1_VERTEX_4" }, { 0x0DB0, "GL_MAP2_COLOR_4" }, { 0x0DB1, "GL_MAP2_INDEX" }, { 0x0DB2, "GL_MAP2_NORMAL" }, { 0x0DB3, "GL_MAP2_TEXTURE_COORD_1" }, { 0x0DB4, "GL_MAP2_TEXTURE_COORD_2" }, { 0x0DB5, "GL_MAP2_TEXTURE_COORD_3" }, { 0x0DB6, "GL_MAP2_TEXTURE_COORD_4" }, { 0x0DB7, "GL_MAP2_VERTEX_3" }, { 0x0DB8, "GL_MAP2_VERTEX_4" }, { 0x0DD0, "GL_MAP1_GRID_DOMAIN" }, { 0x0DD1, "GL_MAP1_GRID_SEGMENTS" }, { 0x0DD2, "GL_MAP2_GRID_DOMAIN" }, { 0x0DD3, "GL_MAP2_GRID_SEGMENTS" }, { 0x0DE0, "GL_TEXTURE_1D" }, { 0x0DE1, "GL_TEXTURE_2D" }, { 0x0DF0, "GL_FEEDBACK_BUFFER_POINTER" }, { 0x0DF1, "GL_FEEDBACK_BUFFER_SIZE" }, { 0x0DF2, "GL_FEEDBACK_BUFFER_TYPE" }, { 0x0DF3, "GL_SELECTION_BUFFER_POINTER" }, { 0x0DF4, "GL_SELECTION_BUFFER_SIZE" }, { 0x1000, "GL_TEXTURE_WIDTH" }, { 0x1001, "GL_TEXTURE_HEIGHT" }, { 0x1003, "GL_TEXTURE_INTERNAL_FORMAT" }, { 0x1004, "GL_TEXTURE_BORDER_COLOR" }, { 0x1005, "GL_TEXTURE_BORDER" }, { 0x1100, "GL_DONT_CARE" }, { 0x1101, "GL_FASTEST" }, { 0x1102, "GL_NICEST" }, { 0x1200, "GL_AMBIENT" }, { 0x1201, "GL_DIFFUSE" }, { 0x1202, "GL_SPECULAR" }, { 0x1203, "GL_POSITION" }, { 0x1204, "GL_SPOT_DIRECTION" }, { 0x1205, "GL_SPOT_EXPONENT" }, { 0x1206, "GL_SPOT_CUTOFF" }, { 0x1207, "GL_CONSTANT_ATTENUATION" }, { 0x1208, "GL_LINEAR_ATTENUATION" }, { 0x1209, "GL_QUADRATIC_ATTENUATION" }, { 0x1300, "GL_COMPILE" }, { 0x1301, "GL_COMPILE_AND_EXECUTE" }, { 0x1400, "GL_BYTE " }, { 0x1401, "GL_UBYTE" }, { 0x1402, "GL_SHORT" }, { 0x1403, "GL_USHRT" }, { 0x1404, "GL_INT " }, { 0x1405, "GL_UINT " }, { 0x1406, "GL_FLOAT" }, { 0x1407, "GL_2_BYTES" }, { 0x1408, "GL_3_BYTES" }, { 0x1409, "GL_4_BYTES" }, { 0x140A, "GL_DOUBLE" }, { 0x140B, "GL_HALF_FLOAT" }, { 0x1500, "GL_CLEAR" }, { 0x1501, "GL_AND" }, { 0x1502, "GL_AND_REVERSE" }, { 0x1503, "GL_COPY" }, { 0x1504, "GL_AND_INVERTED" }, { 0x1505, "GL_NOOP" }, { 0x1506, "GL_XOR" }, { 0x1507, "GL_OR" }, { 0x1508, "GL_NOR" }, { 0x1509, "GL_EQUIV" }, { 0x150A, "GL_INVERT" }, { 0x150B, "GL_OR_REVERSE" }, { 0x150C, "GL_COPY_INVERTED" }, { 0x150D, "GL_OR_INVERTED" }, { 0x150E, "GL_NAND" }, { 0x150F, "GL_SET" }, { 0x1600, "GL_EMISSION" }, { 0x1601, "GL_SHININESS" }, { 0x1602, "GL_AMBIENT_AND_DIFFUSE" }, { 0x1603, "GL_COLOR_INDEXES" }, { 0x1700, "GL_MODELVIEW" }, { 0x1700, "GL_MODELVIEW0_ARB" }, { 0x1701, "GL_PROJECTION" }, { 0x1702, "GL_TEXTURE" }, { 0x1800, "GL_COLOR" }, { 0x1801, "GL_DEPTH" }, { 0x1802, "GL_STENCIL" }, { 0x1900, "GL_COLOR_INDEX" }, { 0x1901, "GL_STENCIL_INDEX" }, { 0x1902, "GL_DEPTH_COMPONENT" }, { 0x1903, "GL_RED" }, { 0x1904, "GL_GREEN" }, { 0x1905, "GL_BLUE" }, { 0x1906, "GL_ALPHA" }, { 0x1907, "GL_RGB" }, { 0x1908, "GL_RGBA" }, { 0x1909, "GL_LUMINANCE" }, { 0x190A, "GL_LUMINANCE_ALPHA" }, { 0x1A00, "GL_BITMAP" }, { 0x1B00, "GL_POINT" }, { 0x1B01, "GL_LINE" }, { 0x1B02, "GL_FILL" }, { 0x1C00, "GL_RENDER" }, { 0x1C01, "GL_FEEDBACK" }, { 0x1C02, "GL_SELECT" }, { 0x1D00, "GL_FLAT" }, { 0x1D01, "GL_SMOOTH" }, { 0x1E00, "GL_KEEP" }, { 0x1E01, "GL_REPLACE" }, { 0x1E02, "GL_INCR" }, { 0x1E03, "GL_DECR" }, { 0x1F00, "GL_VENDOR" }, { 0x1F01, "GL_RENDERER" }, { 0x1F02, "GL_VERSION" }, { 0x1F03, "GL_EXTENSIONS" }, { 0x2000, "GL_S" }, { 0x2001, "GL_T" }, { 0x2002, "GL_R" }, { 0x2003, "GL_Q" }, { 0x2100, "GL_MODULATE" }, { 0x2101, "GL_DECAL" }, { 0x2200, "GL_TEXTURE_ENV_MODE" }, { 0x2201, "GL_TEXTURE_ENV_COLOR" }, { 0x2300, "GL_TEXTURE_ENV" }, { 0x2400, "GL_EYE_LINEAR" }, { 0x2401, "GL_OBJECT_LINEAR" }, { 0x2402, "GL_SPHERE_MAP" }, { 0x2500, "GL_TEXTURE_GEN_MODE" }, { 0x2501, "GL_OBJECT_PLANE" }, { 0x2502, "GL_EYE_PLANE" }, { 0x2600, "GL_NEAREST" }, { 0x2601, "GL_LINEAR" }, { 0x2700, "GL_NEAREST_MIPMAP_NEAREST" }, { 0x2701, "GL_LINEAR_MIPMAP_NEAREST" }, { 0x2702, "GL_NEAREST_MIPMAP_LINEAR" }, { 0x2703, "GL_LINEAR_MIPMAP_LINEAR" }, { 0x2800, "GL_TEXTURE_MAG_FILTER" }, { 0x2801, "GL_TEXTURE_MIN_FILTER" }, { 0x2802, "GL_TEXTURE_WRAP_S" }, { 0x2803, "GL_TEXTURE_WRAP_T" }, { 0x2900, "GL_CLAMP" }, { 0x2901, "GL_REPEAT" }, { 0x2A00, "GL_POLYGON_OFFSET_UNITS" }, { 0x2A01, "GL_POLYGON_OFFSET_POINT" }, { 0x2A02, "GL_POLYGON_OFFSET_LINE" }, { 0x2A10, "GL_R3_G3_B2" }, { 0x2A20, "GL_V2F" }, { 0x2A21, "GL_V3F" }, { 0x2A22, "GL_C4UB_V2F" }, { 0x2A23, "GL_C4UB_V3F" }, { 0x2A24, "GL_C3F_V3F" }, { 0x2A25, "GL_N3F_V3F" }, { 0x2A26, "GL_C4F_N3F_V3F" }, { 0x2A27, "GL_T2F_V3F" }, { 0x2A28, "GL_T4F_V4F" }, { 0x2A29, "GL_T2F_C4UB_V3F" }, { 0x2A2A, "GL_T2F_C3F_V3F" }, { 0x2A2B, "GL_T2F_N3F_V3F" }, { 0x2A2C, "GL_T2F_C4F_N3F_V3F" }, { 0x2A2D, "GL_T4F_C4F_N3F_V4F" }, { 0x3000, "GL_CLIP_PLANE0" }, { 0x3001, "GL_CLIP_PLANE1" }, { 0x3002, "GL_CLIP_PLANE2" }, { 0x3003, "GL_CLIP_PLANE3" }, { 0x3004, "GL_CLIP_PLANE4" }, { 0x3005, "GL_CLIP_PLANE5" }, { 0x4000, "GL_LIGHT0" }, { 0x4001, "GL_LIGHT1" }, { 0x4002, "GL_LIGHT2" }, { 0x4003, "GL_LIGHT3" }, { 0x4004, "GL_LIGHT4" }, { 0x4005, "GL_LIGHT5" }, { 0x4006, "GL_LIGHT6" }, { 0x4007, "GL_LIGHT7" }, { 0x8000, "GL_ABGR_EXT" }, { 0x8001, "GL_CONSTANT_COLOR" }, { 0x8002, "GL_ONE_MINUS_CONSTANT_COLOR" }, { 0x8003, "GL_CONSTANT_ALPHA" }, { 0x8004, "GL_ONE_MINUS_CONSTANT_ALPHA" }, { 0x8005, "GL_BLEND_COLOR" }, { 0x8006, "GL_FUNC_ADD" }, { 0x8007, "GL_MIN" }, { 0x8008, "GL_MAX" }, { 0x8009, "GL_BLEND_EQUATION_RGB" }, { 0x8009, "GL_BLEND_EQUATION" }, { 0x800A, "GL_FUNC_SUBTRACT" }, { 0x800B, "GL_FUNC_REVERSE_SUBTRACT" }, { 0x8010, "GL_CONVOLUTION_1D" }, { 0x8011, "GL_CONVOLUTION_2D" }, { 0x8012, "GL_SEPARABLE_2D" }, { 0x8013, "GL_CONVOLUTION_BORDER_MODE" }, { 0x8014, "GL_CONVOLUTION_FILTER_SCALE" }, { 0x8015, "GL_CONVOLUTION_FILTER_BIAS" }, { 0x8016, "GL_REDUCE" }, { 0x8017, "GL_CONVOLUTION_FORMAT" }, { 0x8018, "GL_CONVOLUTION_WIDTH" }, { 0x8019, "GL_CONVOLUTION_HEIGHT" }, { 0x801A, "GL_MAX_CONVOLUTION_WIDTH" }, { 0x801B, "GL_MAX_CONVOLUTION_HEIGHT" }, { 0x801C, "GL_POST_CONVOLUTION_RED_SCALE" }, { 0x801D, "GL_POST_CONVOLUTION_GREEN_SCALE" }, { 0x801E, "GL_POST_CONVOLUTION_BLUE_SCALE" }, { 0x801F, "GL_POST_CONVOLUTION_ALPHA_SCALE" }, { 0x8020, "GL_POST_CONVOLUTION_RED_BIAS" }, { 0x8021, "GL_POST_CONVOLUTION_GREEN_BIAS" }, { 0x8022, "GL_POST_CONVOLUTION_BLUE_BIAS" }, { 0x8023, "GL_POST_CONVOLUTION_ALPHA_BIAS" }, { 0x8024, "GL_HISTOGRAM" }, { 0x8025, "GL_PROXY_HISTOGRAM" }, { 0x8026, "GL_HISTOGRAM_WIDTH" }, { 0x8027, "GL_HISTOGRAM_FORMAT" }, { 0x8028, "GL_HISTOGRAM_RED_SIZE" }, { 0x8029, "GL_HISTOGRAM_GREEN_SIZE" }, { 0x802A, "GL_HISTOGRAM_BLUE_SIZE" }, { 0x802B, "GL_HISTOGRAM_ALPHA_SIZE" }, { 0x802C, "GL_HISTOGRAM_LUMINANCE_SIZE" }, { 0x802D, "GL_HISTOGRAM_SINK" }, { 0x802E, "GL_MINMAX" }, { 0x802F, "GL_MINMAX_FORMAT" }, { 0x8030, "GL_MINMAX_SINK" }, { 0x8031, "GL_TABLE_TOO_LARGE" }, { 0x8032, "GL_UNSIGNED_BYTE_3_3_2" }, { 0x8033, "GL_UNSIGNED_SHORT_4_4_4_4" }, { 0x8034, "GL_UNSIGNED_SHORT_5_5_5_1" }, { 0x8035, "GL_UNSIGNED_INT_8_8_8_8" }, { 0x8036, "GL_UNSIGNED_INT_10_10_10_2" }, { 0x8037, "GL_POLYGON_OFFSET_FILL" }, { 0x8038, "GL_POLYGON_OFFSET_FACTOR" }, { 0x803A, "GL_RESCALE_NORMAL" }, { 0x803B, "GL_ALPHA4" }, { 0x803C, "GL_ALPHA8" }, { 0x803D, "GL_ALPHA12" }, { 0x803E, "GL_ALPHA16" }, { 0x803F, "GL_LUMINANCE4" }, { 0x8040, "GL_LUMINANCE8" }, { 0x8041, "GL_LUMINANCE12" }, { 0x8042, "GL_LUMINANCE16" }, { 0x8043, "GL_LUMINANCE4_ALPHA4" }, { 0x8044, "GL_LUMINANCE6_ALPHA2" }, { 0x8045, "GL_LUMINANCE8_ALPHA8" }, { 0x8046, "GL_LUMINANCE12_ALPHA4" }, { 0x8047, "GL_LUMINANCE12_ALPHA12" }, { 0x8048, "GL_LUMINANCE16_ALPHA16" }, { 0x8049, "GL_INTENSITY" }, { 0x804A, "GL_INTENSITY4" }, { 0x804B, "GL_INTENSITY8" }, { 0x804C, "GL_INTENSITY12" }, { 0x804D, "GL_INTENSITY16" }, { 0x804F, "GL_RGB4" }, { 0x8050, "GL_RGB5" }, { 0x8051, "GL_RGB8" }, { 0x8052, "GL_RGB10" }, { 0x8053, "GL_RGB12" }, { 0x8054, "GL_RGB16" }, { 0x8055, "GL_RGBA2" }, { 0x8056, "GL_RGBA4" }, { 0x8057, "GL_RGB5_A1" }, { 0x8058, "GL_RGBA8" }, { 0x8059, "GL_RGB10_A2" }, { 0x805A, "GL_RGBA12" }, { 0x805B, "GL_RGBA16" }, { 0x805C, "GL_TEXTURE_RED_SIZE" }, { 0x805D, "GL_TEXTURE_GREEN_SIZE" }, { 0x805E, "GL_TEXTURE_BLUE_SIZE" }, { 0x805F, "GL_TEXTURE_ALPHA_SIZE" }, { 0x8060, "GL_TEXTURE_LUMINANCE_SIZE" }, { 0x8061, "GL_TEXTURE_INTENSITY_SIZE" }, { 0x8063, "GL_PROXY_TEXTURE_1D" }, { 0x8064, "GL_PROXY_TEXTURE_2D" }, { 0x8066, "GL_TEXTURE_PRIORITY" }, { 0x8067, "GL_TEXTURE_RESIDENT" }, { 0x8068, "GL_TEXTURE_BINDING_1D" }, { 0x8069, "GL_TEXTURE_BINDING_2D" }, { 0x806A, "GL_TEXTURE_BINDING_3D" }, { 0x806B, "GL_PACK_SKIP_IMAGES" }, { 0x806C, "GL_PACK_IMAGE_HEIGHT" }, { 0x806D, "GL_UNPACK_SKIP_IMAGES" }, { 0x806E, "GL_UNPACK_IMAGE_HEIGHT" }, { 0x806F, "GL_TEXTURE_3D" }, { 0x8070, "GL_PROXY_TEXTURE_3D" }, { 0x8071, "GL_TEXTURE_DEPTH" }, { 0x8072, "GL_TEXTURE_WRAP_R" }, { 0x8073, "GL_MAX_3D_TEXTURE_SIZE" }, { 0x8074, "GL_VERTEX_ARRAY" }, { 0x8075, "GL_NORMAL_ARRAY" }, { 0x8076, "GL_COLOR_ARRAY" }, { 0x8077, "GL_INDEX_ARRAY" }, { 0x8078, "GL_TEXTURE_COORD_ARRAY" }, { 0x8079, "GL_EDGE_FLAG_ARRAY" }, { 0x807A, "GL_VERTEX_ARRAY_SIZE" }, { 0x807B, "GL_VERTEX_ARRAY_TYPE" }, { 0x807C, "GL_VERTEX_ARRAY_STRIDE" }, { 0x807E, "GL_NORMAL_ARRAY_TYPE" }, { 0x807F, "GL_NORMAL_ARRAY_STRIDE" }, { 0x8081, "GL_COLOR_ARRAY_SIZE" }, { 0x8082, "GL_COLOR_ARRAY_TYPE" }, { 0x8083, "GL_COLOR_ARRAY_STRIDE" }, { 0x8085, "GL_INDEX_ARRAY_TYPE" }, { 0x8086, "GL_INDEX_ARRAY_STRIDE" }, { 0x8088, "GL_TEXTURE_COORD_ARRAY_SIZE" }, { 0x8089, "GL_TEXTURE_COORD_ARRAY_TYPE" }, { 0x808A, "GL_TEXTURE_COORD_ARRAY_STRIDE" }, { 0x808C, "GL_EDGE_FLAG_ARRAY_STRIDE" }, { 0x808E, "GL_VERTEX_ARRAY_POINTER" }, { 0x808F, "GL_NORMAL_ARRAY_POINTER" }, { 0x8090, "GL_COLOR_ARRAY_POINTER" }, { 0x8091, "GL_INDEX_ARRAY_POINTER" }, { 0x8092, "GL_TEXTURE_COORD_ARRAY_POINTER" }, { 0x8093, "GL_EDGE_FLAG_ARRAY_POINTER" }, { 0x809D, "GL_MULTISAMPLE_ARB" }, { 0x809D, "GL_MULTISAMPLE" }, { 0x809E, "GL_SAMPLE_ALPHA_TO_COVERAGE_ARB" }, { 0x809E, "GL_SAMPLE_ALPHA_TO_COVERAGE" }, { 0x809F, "GL_SAMPLE_ALPHA_TO_ONE_ARB" }, { 0x809F, "GL_SAMPLE_ALPHA_TO_ONE" }, { 0x80A0, "GL_SAMPLE_COVERAGE_ARB" }, { 0x80A0, "GL_SAMPLE_COVERAGE" }, { 0x80A0, "GL_SAMPLE_MASK_EXT" }, { 0x80A1, "GL_1PASS_EXT" }, { 0x80A2, "GL_2PASS_0_EXT" }, { 0x80A3, "GL_2PASS_1_EXT" }, { 0x80A4, "GL_4PASS_0_EXT" }, { 0x80A5, "GL_4PASS_1_EXT" }, { 0x80A6, "GL_4PASS_2_EXT" }, { 0x80A7, "GL_4PASS_3_EXT" }, { 0x80A8, "GL_SAMPLE_BUFFERS" }, { 0x80A9, "GL_SAMPLES" }, { 0x80AA, "GL_SAMPLE_COVERAGE_VALUE" }, { 0x80AB, "GL_SAMPLE_COVERAGE_INVERT" }, { 0x80AC, "GL_SAMPLE_PATTERN_EXT" }, { 0x80B1, "GL_COLOR_MATRIX" }, { 0x80B2, "GL_COLOR_MATRIX_STACK_DEPTH" }, { 0x80B3, "GL_MAX_COLOR_MATRIX_STACK_DEPTH" }, { 0x80B4, "GL_POST_COLOR_MATRIX_RED_SCALE" }, { 0x80B5, "GL_POST_COLOR_MATRIX_GREEN_SCALE" }, { 0x80B6, "GL_POST_COLOR_MATRIX_BLUE_SCALE" }, { 0x80B7, "GL_POST_COLOR_MATRIX_ALPHA_SCALE" }, { 0x80B8, "GL_POST_COLOR_MATRIX_RED_BIAS" }, { 0x80B9, "GL_POST_COLOR_MATRIX_GREEN_BIAS" }, { 0x80BA, "GL_POST_COLOR_MATRIX_BLUE_BIAS" }, { 0x80BB, "GL_POST_COLOR_MATRIX_ALPHA_BIAS" }, { 0x80BF, "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB" }, { 0x80C8, "GL_BLEND_DST_RGB" }, { 0x80C9, "GL_BLEND_SRC_RGB" }, { 0x80CA, "GL_BLEND_DST_ALPHA" }, { 0x80CB, "GL_BLEND_SRC_ALPHA" }, { 0x80CC, "GL_422_EXT" }, { 0x80CD, "GL_422_REV_EXT" }, { 0x80CE, "GL_422_AVERAGE_EXT" }, { 0x80CF, "GL_422_REV_AVERAGE_EXT" }, { 0x80D0, "GL_COLOR_TABLE" }, { 0x80D1, "GL_POST_CONVOLUTION_COLOR_TABLE" }, { 0x80D2, "GL_POST_COLOR_MATRIX_COLOR_TABLE" }, { 0x80D3, "GL_PROXY_COLOR_TABLE" }, { 0x80D4, "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE" }, { 0x80D5, "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE" }, { 0x80D6, "GL_COLOR_TABLE_SCALE" }, { 0x80D7, "GL_COLOR_TABLE_BIAS" }, { 0x80D8, "GL_COLOR_TABLE_FORMAT" }, { 0x80D9, "GL_COLOR_TABLE_WIDTH" }, { 0x80DA, "GL_COLOR_TABLE_RED_SIZE" }, { 0x80DB, "GL_COLOR_TABLE_GREEN_SIZE" }, { 0x80DC, "GL_COLOR_TABLE_BLUE_SIZE" }, { 0x80DD, "GL_COLOR_TABLE_ALPHA_SIZE" }, { 0x80DE, "GL_COLOR_TABLE_LUMINANCE_SIZE" }, { 0x80DF, "GL_COLOR_TABLE_INTENSITY_SIZE" }, { 0x80E0, "GL_BGR_EXT" }, { 0x80E0, "GL_BGR" }, { 0x80E1, "GL_BGRA_EXT" }, { 0x80E1, "GL_BGRA" }, { 0x80E1, "GL_BGRA" }, { 0x80E2, "GL_COLOR_INDEX1_EXT" }, { 0x80E3, "GL_COLOR_INDEX2_EXT" }, { 0x80E4, "GL_COLOR_INDEX4_EXT" }, { 0x80E5, "GL_COLOR_INDEX8_EXT" }, { 0x80E6, "GL_COLOR_INDEX12_EXT" }, { 0x80E7, "GL_COLOR_INDEX16_EXT" }, { 0x80E8, "GL_MAX_ELEMENTS_VERTICES_EXT" }, { 0x80E8, "GL_MAX_ELEMENTS_VERTICES" }, { 0x80E9, "GL_MAX_ELEMENTS_INDICES_EXT" }, { 0x80E9, "GL_MAX_ELEMENTS_INDICES" }, { 0x80ED, "GL_TEXTURE_INDEX_SIZE_EXT" }, { 0x80F0, "GL_CLIP_VOLUME_CLIPPING_HINT_EXT" }, { 0x8126, "GL_POINT_SIZE_MIN_ARB" }, { 0x8126, "GL_POINT_SIZE_MIN" }, { 0x8127, "GL_POINT_SIZE_MAX_ARB" }, { 0x8127, "GL_POINT_SIZE_MAX" }, { 0x8128, "GL_POINT_FADE_THRESHOLD_SIZE_ARB" }, { 0x8128, "GL_POINT_FADE_THRESHOLD_SIZE" }, { 0x8129, "GL_POINT_DISTANCE_ATTENUATION_ARB" }, { 0x8129, "GL_POINT_DISTANCE_ATTENUATION" }, { 0x812D, "GL_CLAMP_TO_BORDER_ARB" }, { 0x812D, "GL_CLAMP_TO_BORDER" }, { 0x812F, "GL_CLAMP_TO_EDGE" }, { 0x813A, "GL_TEXTURE_MIN_LOD" }, { 0x813B, "GL_TEXTURE_MAX_LOD" }, { 0x813C, "GL_TEXTURE_BASE_LEVEL" }, { 0x813D, "GL_TEXTURE_MAX_LEVEL" }, { 0x8151, "GL_CONSTANT_BORDER" }, { 0x8153, "GL_REPLICATE_BORDER" }, { 0x8154, "GL_CONVOLUTION_BORDER_COLOR" }, { 0x8191, "GL_GENERATE_MIPMAP" }, { 0x8192, "GL_GENERATE_MIPMAP_HINT" }, { 0x81A5, "GL_DEPTH_COMPONENT16_ARB" }, { 0x81A5, "GL_DEPTH_COMPONENT16" }, { 0x81A6, "GL_DEPTH_COMPONENT24_ARB" }, { 0x81A6, "GL_DEPTH_COMPONENT24" }, { 0x81A7, "GL_DEPTH_COMPONENT32_ARB" }, { 0x81A7, "GL_DEPTH_COMPONENT32" }, { 0x81A8, "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT" }, { 0x81A9, "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT" }, { 0x81AA, "GL_CULL_VERTEX_EXT" }, { 0x81AB, "GL_CULL_VERTEX_EYE_POSITION_EXT" }, { 0x81AC, "GL_CULL_VERTEX_OBJECT_POSITION_EXT" }, { 0x81AD, "GL_IUI_V2F_EXT" }, { 0x81AE, "GL_IUI_V3F_EXT" }, { 0x81AF, "GL_IUI_N3F_V2F_EXT" }, { 0x81B0, "GL_IUI_N3F_V3F_EXT" }, { 0x81B1, "GL_T2F_IUI_V2F_EXT" }, { 0x81B2, "GL_T2F_IUI_V3F_EXT" }, { 0x81B3, "GL_T2F_IUI_N3F_V2F_EXT" }, { 0x81B4, "GL_T2F_IUI_N3F_V3F_EXT" }, { 0x81B5, "GL_INDEX_TEST_EXT" }, { 0x81B6, "GL_INDEX_TEST_FUNC_EXT" }, { 0x81B7, "GL_INDEX_TEST_REF_EXT" }, { 0x81B8, "GL_INDEX_MATERIAL_EXT" }, { 0x81B9, "GL_INDEX_MATERIAL_PARAMETER_EXT" }, { 0x81BA, "GL_INDEX_MATERIAL_FACE_EXT" }, { 0x81F8, "GL_LIGHT_MODEL_COLOR_CONTROL_EXT" }, { 0x81F8, "GL_LIGHT_MODEL_COLOR_CONTROL" }, { 0x81F9, "GL_SINGLE_COLOR_EXT" }, { 0x81F9, "GL_SINGLE_COLOR" }, { 0x81FA, "GL_SEPARATE_SPECULAR_COLOR_EXT" }, { 0x81FA, "GL_SEPARATE_SPECULAR_COLOR" }, { 0x81FB, "GL_SHARED_TEXTURE_PALETTE_EXT" }, { 0x8210, "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING" }, { 0x8211, "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE" }, { 0x8212, "GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE" }, { 0x8213, "GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE" }, { 0x8214, "GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE" }, { 0x8215, "GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE" }, { 0x8216, "GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE" }, { 0x8217, "GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE" }, { 0x8218, "GL_FRAMEBUFFER_DEFAULT" }, { 0x8219, "GL_FRAMEBUFFER_UNDEFINED" }, { 0x821A, "GL_DEPTH_STENCIL_ATTACHMENT" }, { 0x8225, "GL_COMPRESSED_RED" }, { 0x8226, "GL_COMPRESSED_RG" }, { 0x8227, "GL_RG" }, { 0x8228, "GL_RG_INTEGER" }, { 0x8229, "GL_R8" }, { 0x822A, "GL_R16" }, { 0x822B, "GL_RG8" }, { 0x822C, "GL_RG16" }, { 0x822D, "GL_R16F" }, { 0x822E, "GL_R32F" }, { 0x822F, "GL_RG16F" }, { 0x8230, "GL_RG32F" }, { 0x8231, "GL_R8I" }, { 0x8232, "GL_R8UI" }, { 0x8233, "GL_R16I" }, { 0x8234, "GL_R16UI" }, { 0x8235, "GL_R32I" }, { 0x8236, "GL_R32UI" }, { 0x8237, "GL_RG8I" }, { 0x8238, "GL_RG8UI" }, { 0x8239, "GL_RG16I" }, { 0x823A, "GL_RG16UI" }, { 0x823B, "GL_RG32I" }, { 0x823C, "GL_RG32UI" }, { 0x8330, "GL_PIXEL_TRANSFORM_2D_EXT" }, { 0x8331, "GL_PIXEL_MAG_FILTER_EXT" }, { 0x8332, "GL_PIXEL_MIN_FILTER_EXT" }, { 0x8333, "GL_PIXEL_CUBIC_WEIGHT_EXT" }, { 0x8334, "GL_CUBIC_EXT" }, { 0x8335, "GL_AVERAGE_EXT" }, { 0x8336, "GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT" }, { 0x8337, "GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT" }, { 0x8338, "GL_PIXEL_TRANSFORM_2D_MATRIX_EXT" }, { 0x8349, "GL_FRAGMENT_MATERIAL_EXT" }, { 0x834A, "GL_FRAGMENT_NORMAL_EXT" }, { 0x834C, "GL_FRAGMENT_COLOR_EXT" }, { 0x834D, "GL_ATTENUATION_EXT" }, { 0x834E, "GL_SHADOW_ATTENUATION_EXT" }, { 0x834F, "GL_TEXTURE_APPLICATION_MODE_EXT" }, { 0x8350, "GL_TEXTURE_LIGHT_EXT" }, { 0x8351, "GL_TEXTURE_MATERIAL_FACE_EXT" }, { 0x8352, "GL_TEXTURE_MATERIAL_PARAMETER_EXT" }, { 0x8362, "GL_UNSIGNED_BYTE_2_3_3_REV" }, { 0x8363, "GL_UNSIGNED_SHORT_5_6_5" }, { 0x8364, "GL_UNSIGNED_SHORT_5_6_5_REV" }, { 0x8365, "GL_UNSIGNED_SHORT_4_4_4_4_REV" }, { 0x8366, "GL_UNSIGNED_SHORT_1_5_5_5_REV" }, { 0x8367, "GL_UNSIGNED_INT_8_8_8_8_REV" }, { 0x8368, "GL_UNSIGNED_INT_2_10_10_10_REV" }, { 0x8370, "GL_MIRRORED_REPEAT_ARB" }, { 0x8370, "GL_MIRRORED_REPEAT" }, { 0x83F0, "GL_COMPRESSED_RGB_S3TC_DXT1_EXT" }, { 0x83F1, "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT" }, { 0x83F2, "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT" }, { 0x83F3, "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT" }, { 0x8439, "GL_TANGENT_ARRAY_EXT" }, { 0x843A, "GL_BINORMAL_ARRAY_EXT" }, { 0x843B, "GL_CURRENT_TANGENT_EXT" }, { 0x843C, "GL_CURRENT_BINORMAL_EXT" }, { 0x843E, "GL_TANGENT_ARRAY_TYPE_EXT" }, { 0x843F, "GL_TANGENT_ARRAY_STRIDE_EXT" }, { 0x8440, "GL_BINORMAL_ARRAY_TYPE_EXT" }, { 0x8441, "GL_BINORMAL_ARRAY_STRIDE_EXT" }, { 0x8442, "GL_TANGENT_ARRAY_POINTER_EXT" }, { 0x8443, "GL_BINORMAL_ARRAY_POINTER_EXT" }, { 0x8444, "GL_MAP1_TANGENT_EXT" }, { 0x8445, "GL_MAP2_TANGENT_EXT" }, { 0x8446, "GL_MAP1_BINORMAL_EXT" }, { 0x8447, "GL_MAP2_BINORMAL_EXT" }, { 0x8450, "GL_FOG_COORD_SRC" }, { 0x8450, "GL_FOG_COORDINATE_SOURCE_EXT" }, { 0x8450, "GL_FOG_COORDINATE_SOURCE" }, { 0x8451, "GL_FOG_COORD" }, { 0x8451, "GL_FOG_COORDINATE_EXT" }, { 0x8451, "GL_FOG_COORDINATE" }, { 0x8452, "GL_FRAGMENT_DEPTH_EXT" }, { 0x8452, "GL_FRAGMENT_DEPTH" }, { 0x8453 , "GL_CURRENT_FOG_COORD" }, { 0x8453 , "GL_CURRENT_FOG_COORDINATE" }, { 0x8453, "GL_CURRENT_FOG_COORDINATE_EXT" }, { 0x8454, "GL_FOG_COORD_ARRAY_TYPE" }, { 0x8454, "GL_FOG_COORDINATE_ARRAY_TYPE_EXT" }, { 0x8454, "GL_FOG_COORDINATE_ARRAY_TYPE" }, { 0x8455, "GL_FOG_COORD_ARRAY_STRIDE" }, { 0x8455, "GL_FOG_COORDINATE_ARRAY_STRIDE_EXT" }, { 0x8455, "GL_FOG_COORDINATE_ARRAY_STRIDE" }, { 0x8456, "GL_FOG_COORD_ARRAY_POINTER" }, { 0x8456, "GL_FOG_COORDINATE_ARRAY_POINTER_EXT" }, { 0x8456, "GL_FOG_COORDINATE_ARRAY_POINTER" }, { 0x8457, "GL_FOG_COORD_ARRAY" }, { 0x8457, "GL_FOG_COORDINATE_ARRAY_EXT" }, { 0x8457, "GL_FOG_COORDINATE_ARRAY" }, { 0x8458, "GL_COLOR_SUM_ARB" }, { 0x8458, "GL_COLOR_SUM_EXT" }, { 0x8458, "GL_COLOR_SUM" }, { 0x8459, "GL_CURRENT_SECONDARY_COLOR_EXT" }, { 0x8459, "GL_CURRENT_SECONDARY_COLOR" }, { 0x845A, "GL_SECONDARY_COLOR_ARRAY_SIZE_EXT" }, { 0x845A, "GL_SECONDARY_COLOR_ARRAY_SIZE" }, { 0x845B, "GL_SECONDARY_COLOR_ARRAY_TYPE_EXT" }, { 0x845B, "GL_SECONDARY_COLOR_ARRAY_TYPE" }, { 0x845C, "GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT" }, { 0x845C, "GL_SECONDARY_COLOR_ARRAY_STRIDE" }, { 0x845D, "GL_SECONDARY_COLOR_ARRAY_POINTER_EXT" }, { 0x845D, "GL_SECONDARY_COLOR_ARRAY_POINTER" }, { 0x845E, "GL_SECONDARY_COLOR_ARRAY_EXT" }, { 0x845E, "GL_SECONDARY_COLOR_ARRAY" }, { 0x845F, "GL_CURRENT_RASTER_SECONDARY_COLOR" }, { 0x846D, "GL_ALIASED_POINT_SIZE_RANGE" }, { 0x846E, "GL_ALIASED_LINE_WIDTH_RANGE" }, { 0x84C0, "GL_TEXTURE0" }, { 0x84C1, "GL_TEXTURE1" }, { 0x84C2, "GL_TEXTURE2" }, { 0x84C3, "GL_TEXTURE3" }, { 0x84C4, "GL_TEXTURE4" }, { 0x84C5, "GL_TEXTURE5" }, { 0x84C6, "GL_TEXTURE6" }, { 0x84C7, "GL_TEXTURE7" }, { 0x84C8, "GL_TEXTURE8" }, { 0x84C9, "GL_TEXTURE9" }, { 0x84CA, "GL_TEXTURE10" }, { 0x84CB, "GL_TEXTURE11" }, { 0x84CC, "GL_TEXTURE12" }, { 0x84CD, "GL_TEXTURE13" }, { 0x84CE, "GL_TEXTURE14" }, { 0x84CF, "GL_TEXTURE15" }, { 0x84D0, "GL_TEXTURE16" }, { 0x84D1, "GL_TEXTURE17" }, { 0x84D2, "GL_TEXTURE18" }, { 0x84D3, "GL_TEXTURE19" }, { 0x84D4, "GL_TEXTURE20" }, { 0x84D5, "GL_TEXTURE21" }, { 0x84D6, "GL_TEXTURE22" }, { 0x84D7, "GL_TEXTURE23" }, { 0x84D8, "GL_TEXTURE24" }, { 0x84D9, "GL_TEXTURE25" }, { 0x84DA, "GL_TEXTURE26" }, { 0x84DB, "GL_TEXTURE27" }, { 0x84DC, "GL_TEXTURE28" }, { 0x84DD, "GL_TEXTURE29" }, { 0x84DE, "GL_TEXTURE30" }, { 0x84DF, "GL_TEXTURE31" }, { 0x84E0, "GL_ACTIVE_TEXTURE" }, { 0x84E1, "GL_CLIENT_ACTIVE_TEXTURE" }, { 0x84E2, "GL_MAX_TEXTURE_UNITS" }, { 0x84E3, "GL_TRANSPOSE_MODELVIEW_MATRIX" }, { 0x84E4, "GL_TRANSPOSE_PROJECTION_MATRIX" }, { 0x84E5, "GL_TRANSPOSE_TEXTURE_MATRIX" }, { 0x84E6, "GL_TRANSPOSE_COLOR_MATRIX" }, { 0x84E7, "GL_SUBTRACT" }, { 0x84E8, "GL_MAX_RENDERBUFFER_SIZE" }, { 0x84E9, "GL_COMPRESSED_ALPHA" }, { 0x84EA, "GL_COMPRESSED_LUMINANCE" }, { 0x84EB, "GL_COMPRESSED_LUMINANCE_ALPHA" }, { 0x84EC, "GL_COMPRESSED_INTENSITY" }, { 0x84ED, "GL_COMPRESSED_RGB" }, { 0x84EE, "GL_COMPRESSED_RGBA" }, { 0x84EF, "GL_TEXTURE_COMPRESSION_HINT" }, { 0x84F5, "GL_TEXTURE_RECTANGLE_EXT" }, { 0x84F6, "GL_TEXTURE_BINDING_RECTANGLE_EXT" }, { 0x84F7, "GL_PROXY_TEXTURE_RECTANGLE_EXT" }, { 0x84F8, "GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT" }, { 0x84F9, "GL_DEPTH_STENCIL" }, { 0x84FA, "GL_UNSIGNED_INT_24_8" }, { 0x84FD, "GL_MAX_TEXTURE_LOD_BIAS" }, { 0x84FE, "GL_TEXTURE_MAX_ANISOTROPY_EXT" }, { 0x84FF, "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT" }, { 0x8500, "GL_TEXTURE_FILTER_CONTROL" }, { 0x8501, "GL_TEXTURE_LOD_BIAS" }, { 0x8502, "GL_MODELVIEW1_STACK_DEPTH_EXT" }, { 0x8506, "GL_MODELVIEW_MATRIX1_EXT" }, { 0x8507, "GL_INCR_WRAP" }, { 0x8508, "GL_DECR_WRAP" }, { 0x8509, "GL_VERTEX_WEIGHTING_EXT" }, { 0x850A, "GL_MODELVIEW1_ARB" }, { 0x850B, "GL_CURRENT_VERTEX_WEIGHT_EXT" }, { 0x850C, "GL_VERTEX_WEIGHT_ARRAY_EXT" }, { 0x850D, "GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT" }, { 0x850E, "GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT" }, { 0x850F, "GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT" }, { 0x8510, "GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT" }, { 0x8511, "GL_NORMAL_MAP_ARB" }, { 0x8511, "GL_NORMAL_MAP_EXT" }, { 0x8511, "GL_NORMAL_MAP" }, { 0x8512, "GL_REFLECTION_MAP_ARB" }, { 0x8512, "GL_REFLECTION_MAP_EXT" }, { 0x8512, "GL_REFLECTION_MAP" }, { 0x8513, "GL_TEXTURE_CUBE_MAP_ARB" }, { 0x8513, "GL_TEXTURE_CUBE_MAP_EXT" }, { 0x8513, "GL_TEXTURE_CUBE_MAP" }, { 0x8514, "GL_TEXTURE_BINDING_CUBE_MAP_ARB" }, { 0x8514, "GL_TEXTURE_BINDING_CUBE_MAP_EXT" }, { 0x8514, "GL_TEXTURE_BINDING_CUBE_MAP" }, { 0x8515, "GL_TEXTURE_CUBE_MAP_POSITIVE_X" }, { 0x8516, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X" }, { 0x8517, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y" }, { 0x8518, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y" }, { 0x8519, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z" }, { 0x851A, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z" }, { 0x851B, "GL_PROXY_TEXTURE_CUBE_MAP" }, { 0x851C, "GL_MAX_CUBE_MAP_TEXTURE_SIZE" }, { 0x851D, "GL_VERTEX_ARRAY_RANGE_APPLE" }, { 0x851E, "GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE" }, { 0x851F, "GL_VERTEX_ARRAY_STORAGE_HINT_APPLE" }, { 0x8520, "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE" }, { 0x8521, "GL_VERTEX_ARRAY_RANGE_POINTER_APPLE" }, { 0x8570, "GL_COMBINE_ARB" }, { 0x8570, "GL_COMBINE_EXT" }, { 0x8570, "GL_COMBINE" }, { 0x8571, "GL_COMBINE_RGB_ARB" }, { 0x8571, "GL_COMBINE_RGB_EXT" }, { 0x8571, "GL_COMBINE_RGB" }, { 0x8572, "GL_COMBINE_ALPHA_ARB" }, { 0x8572, "GL_COMBINE_ALPHA_EXT" }, { 0x8572, "GL_COMBINE_ALPHA" }, { 0x8573, "GL_RGB_SCALE_ARB" }, { 0x8573, "GL_RGB_SCALE_EXT" }, { 0x8573, "GL_RGB_SCALE" }, { 0x8574, "GL_ADD_SIGNED_ARB" }, { 0x8574, "GL_ADD_SIGNED_EXT" }, { 0x8574, "GL_ADD_SIGNED" }, { 0x8575, "GL_INTERPOLATE_ARB" }, { 0x8575, "GL_INTERPOLATE_EXT" }, { 0x8575, "GL_INTERPOLATE" }, { 0x8576, "GL_CONSTANT_ARB" }, { 0x8576, "GL_CONSTANT_EXT" }, { 0x8576, "GL_CONSTANT" }, { 0x8577, "GL_PRIMARY_COLOR_ARB" }, { 0x8577, "GL_PRIMARY_COLOR_EXT" }, { 0x8577, "GL_PRIMARY_COLOR" }, { 0x8578, "GL_PREVIOUS_ARB" }, { 0x8578, "GL_PREVIOUS_EXT" }, { 0x8578, "GL_PREVIOUS" }, { 0x8580, "GL_SOURCE0_RGB_ARB" }, { 0x8580, "GL_SOURCE0_RGB_EXT" }, { 0x8580, "GL_SOURCE0_RGB" }, { 0x8580, "GL_SRC0_RGB" }, { 0x8581, "GL_SOURCE1_RGB_ARB" }, { 0x8581, "GL_SOURCE1_RGB_EXT" }, { 0x8581, "GL_SOURCE1_RGB" }, { 0x8581, "GL_SRC1_RGB" }, { 0x8582, "GL_SOURCE2_RGB_ARB" }, { 0x8582, "GL_SOURCE2_RGB_EXT" }, { 0x8582, "GL_SOURCE2_RGB" }, { 0x8582, "GL_SRC2_RGB" }, { 0x8583, "GL_SOURCE3_RGB_ARB" }, { 0x8583, "GL_SOURCE3_RGB_EXT" }, { 0x8583, "GL_SOURCE3_RGB" }, { 0x8583, "GL_SRC3_RGB" }, { 0x8584, "GL_SOURCE4_RGB_ARB" }, { 0x8584, "GL_SOURCE4_RGB_EXT" }, { 0x8584, "GL_SOURCE4_RGB" }, { 0x8584, "GL_SRC4_RGB" }, { 0x8585, "GL_SOURCE5_RGB_ARB" }, { 0x8585, "GL_SOURCE5_RGB_EXT" }, { 0x8585, "GL_SOURCE5_RGB" }, { 0x8585, "GL_SRC5_RGB" }, { 0x8586, "GL_SOURCE6_RGB_ARB" }, { 0x8586, "GL_SOURCE6_RGB_EXT" }, { 0x8586, "GL_SOURCE6_RGB" }, { 0x8586, "GL_SRC6_RGB" }, { 0x8587, "GL_SOURCE7_RGB_ARB" }, { 0x8587, "GL_SOURCE7_RGB_EXT" }, { 0x8587, "GL_SOURCE7_RGB" }, { 0x8587, "GL_SRC7_RGB" }, { 0x8588, "GL_SOURCE0_ALPHA_ARB" }, { 0x8588, "GL_SOURCE0_ALPHA_EXT" }, { 0x8588, "GL_SOURCE0_ALPHA" }, { 0x8588, "GL_SRC0_ALPHA" }, { 0x8589, "GL_SOURCE1_ALPHA_ARB" }, { 0x8589, "GL_SOURCE1_ALPHA_EXT" }, { 0x8589, "GL_SOURCE1_ALPHA" }, { 0x8589, "GL_SRC1_ALPHA" }, { 0x858A, "GL_SOURCE2_ALPHA_ARB" }, { 0x858A, "GL_SOURCE2_ALPHA_EXT" }, { 0x858A, "GL_SOURCE2_ALPHA" }, { 0x858A, "GL_SRC2_ALPHA" }, { 0x858B, "GL_SOURCE3_ALPHA_ARB" }, { 0x858B, "GL_SOURCE3_ALPHA_EXT" }, { 0x858B, "GL_SOURCE3_ALPHA" }, { 0x858B, "GL_SRC3_ALPHA" }, { 0x858C, "GL_SOURCE4_ALPHA_ARB" }, { 0x858C, "GL_SOURCE4_ALPHA_EXT" }, { 0x858C, "GL_SOURCE4_ALPHA" }, { 0x858C, "GL_SRC4_ALPHA" }, { 0x858D, "GL_SOURCE5_ALPHA_ARB" }, { 0x858D, "GL_SOURCE5_ALPHA_EXT" }, { 0x858D, "GL_SOURCE5_ALPHA" }, { 0x858D, "GL_SRC5_ALPHA" }, { 0x858E, "GL_SOURCE6_ALPHA_ARB" }, { 0x858E, "GL_SOURCE6_ALPHA_EXT" }, { 0x858E, "GL_SOURCE6_ALPHA" }, { 0x858E, "GL_SRC6_ALPHA" }, { 0x858F, "GL_SOURCE7_ALPHA_ARB" }, { 0x858F, "GL_SOURCE7_ALPHA_EXT" }, { 0x858F, "GL_SOURCE7_ALPHA" }, { 0x858F, "GL_SRC7_ALPHA" }, { 0x8590, "GL_OPERAND0_RGB_ARB" }, { 0x8590, "GL_OPERAND0_RGB_EXT" }, { 0x8590, "GL_OPERAND0_RGB" }, { 0x8591, "GL_OPERAND1_RGB_ARB" }, { 0x8591, "GL_OPERAND1_RGB_EXT" }, { 0x8591, "GL_OPERAND1_RGB" }, { 0x8592, "GL_OPERAND2_RGB_ARB" }, { 0x8592, "GL_OPERAND2_RGB_EXT" }, { 0x8592, "GL_OPERAND2_RGB" }, { 0x8593, "GL_OPERAND3_RGB_ARB" }, { 0x8593, "GL_OPERAND3_RGB_EXT" }, { 0x8593, "GL_OPERAND3_RGB" }, { 0x8594, "GL_OPERAND4_RGB_ARB" }, { 0x8594, "GL_OPERAND4_RGB_EXT" }, { 0x8594, "GL_OPERAND4_RGB" }, { 0x8595, "GL_OPERAND5_RGB_ARB" }, { 0x8595, "GL_OPERAND5_RGB_EXT" }, { 0x8595, "GL_OPERAND5_RGB" }, { 0x8596, "GL_OPERAND6_RGB_ARB" }, { 0x8596, "GL_OPERAND6_RGB_EXT" }, { 0x8596, "GL_OPERAND6_RGB" }, { 0x8597, "GL_OPERAND7_RGB_ARB" }, { 0x8597, "GL_OPERAND7_RGB_EXT" }, { 0x8597, "GL_OPERAND7_RGB" }, { 0x8598, "GL_OPERAND0_ALPHA_ARB" }, { 0x8598, "GL_OPERAND0_ALPHA_EXT" }, { 0x8598, "GL_OPERAND0_ALPHA" }, { 0x8599, "GL_OPERAND1_ALPHA_ARB" }, { 0x8599, "GL_OPERAND1_ALPHA_EXT" }, { 0x8599, "GL_OPERAND1_ALPHA" }, { 0x859A, "GL_OPERAND2_ALPHA_ARB" }, { 0x859A, "GL_OPERAND2_ALPHA_EXT" }, { 0x859A, "GL_OPERAND2_ALPHA" }, { 0x859B, "GL_OPERAND3_ALPHA_ARB" }, { 0x859B, "GL_OPERAND3_ALPHA_EXT" }, { 0x859B, "GL_OPERAND3_ALPHA" }, { 0x859C, "GL_OPERAND4_ALPHA_ARB" }, { 0x859C, "GL_OPERAND4_ALPHA_EXT" }, { 0x859C, "GL_OPERAND4_ALPHA" }, { 0x859D, "GL_OPERAND5_ALPHA_ARB" }, { 0x859D, "GL_OPERAND5_ALPHA_EXT" }, { 0x859D, "GL_OPERAND5_ALPHA" }, { 0x859E, "GL_OPERAND6_ALPHA_ARB" }, { 0x859E, "GL_OPERAND6_ALPHA_EXT" }, { 0x859E, "GL_OPERAND6_ALPHA" }, { 0x859F, "GL_OPERAND7_ALPHA_ARB" }, { 0x859F, "GL_OPERAND7_ALPHA_EXT" }, { 0x859F, "GL_OPERAND7_ALPHA" }, { 0x85AE, "GL_PERTURB_EXT" }, { 0x85AF, "GL_TEXTURE_NORMAL_EXT" }, { 0x85B4, "GL_STORAGE_CLIENT_APPLE" }, { 0x85B5, "GL_VERTEX_ARRAY_BINDING_APPLE" }, { 0x85BD, "GL_STORAGE_PRIVATE_APPLE" }, { 0x85BE, "GL_STORAGE_CACHED_APPLE" }, { 0x85BF, "GL_STORAGE_SHARED_APPLE" }, { 0x8620, "GL_VERTEX_PROGRAM_ARB" }, { 0x8620, "GL_VERTEX_PROGRAM_NV" }, { 0x8621, "GL_VERTEX_STATE_PROGRAM_NV" }, { 0x8622, "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB" }, { 0x8622, "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB" }, { 0x8622, "GL_VERTEX_ATTRIB_ARRAY_ENABLED" }, { 0x8623, "GL_ATTRIB_ARRAY_SIZE_NV" }, { 0x8623, "GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB" }, { 0x8623, "GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB" }, { 0x8623, "GL_VERTEX_ATTRIB_ARRAY_SIZE" }, { 0x8624, "GL_ATTRIB_ARRAY_STRIDE_NV" }, { 0x8624, "GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB" }, { 0x8624, "GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB" }, { 0x8624, "GL_VERTEX_ATTRIB_ARRAY_STRIDE" }, { 0x8625, "GL_ATTRIB_ARRAY_TYPE_NV" }, { 0x8625, "GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB" }, { 0x8625, "GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB" }, { 0x8625, "GL_VERTEX_ATTRIB_ARRAY_TYPE" }, { 0x8626, "GL_CURRENT_ATTRIB_NV" }, { 0x8626, "GL_CURRENT_VERTEX_ATTRIB_ARB" }, { 0x8626, "GL_CURRENT_VERTEX_ATTRIB_ARB" }, { 0x8626, "GL_CURRENT_VERTEX_ATTRIB" }, { 0x8627, "GL_PROGRAM_LENGTH_ARB" }, { 0x8627, "GL_PROGRAM_LENGTH_NV" }, { 0x8628, "GL_PROGRAM_STRING_ARB" }, { 0x8628, "GL_PROGRAM_STRING_NV" }, { 0x8629, "GL_MODELVIEW_PROJECTION_NV" }, { 0x862A, "GL_IDENTITY_NV" }, { 0x862B, "GL_INVERSE_NV" }, { 0x862C, "GL_TRANSPOSE_NV" }, { 0x862D, "GL_INVERSE_TRANSPOSE_NV" }, { 0x862E, "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB" }, { 0x862E, "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV" }, { 0x862F, "GL_MAX_PROGRAM_MATRICES_ARB" }, { 0x862F, "GL_MAX_TRACK_MATRICES_NV" }, { 0x8630, "GL_MATRIX0_NV" }, { 0x8631, "GL_MATRIX1_NV" }, { 0x8632, "GL_MATRIX2_NV" }, { 0x8633, "GL_MATRIX3_NV" }, { 0x8634, "GL_MATRIX4_NV" }, { 0x8635, "GL_MATRIX5_NV" }, { 0x8636, "GL_MATRIX6_NV" }, { 0x8637, "GL_MATRIX7_NV" }, { 0x8640, "GL_CURRENT_MATRIX_STACK_DEPTH_ARB" }, { 0x8640, "GL_CURRENT_MATRIX_STACK_DEPTH_NV" }, { 0x8641, "GL_CURRENT_MATRIX_ARB" }, { 0x8641, "GL_CURRENT_MATRIX_NV" }, { 0x8642, "GL_PROGRAM_POINT_SIZE_EXT" }, { 0x8642, "GL_VERTEX_PROGRAM_POINT_SIZE_ARB" }, { 0x8642, "GL_VERTEX_PROGRAM_POINT_SIZE_ARB" }, { 0x8642, "GL_VERTEX_PROGRAM_POINT_SIZE_NV" }, { 0x8642, "GL_VERTEX_PROGRAM_POINT_SIZE" }, { 0x8643, "GL_VERTEX_PROGRAM_TWO_SIDE_ARB" }, { 0x8643, "GL_VERTEX_PROGRAM_TWO_SIDE_ARB" }, { 0x8643, "GL_VERTEX_PROGRAM_TWO_SIDE_NV" }, { 0x8643, "GL_VERTEX_PROGRAM_TWO_SIDE" }, { 0x8644, "GL_PROGRAM_PARAMETER_NV" }, { 0x8645, "GL_ATTRIB_ARRAY_POINTER_NV" }, { 0x8645, "GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB" }, { 0x8645, "GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB" }, { 0x8645, "GL_VERTEX_ATTRIB_ARRAY_POINTER" }, { 0x8646, "GL_PROGRAM_TARGET_NV" }, { 0x8647, "GL_PROGRAM_RESIDENT_NV" }, { 0x8648, "GL_TRACK_MATRIX_NV" }, { 0x8649, "GL_TRACK_MATRIX_TRANSFORM_NV" }, { 0x864A, "GL_VERTEX_PROGRAM_BINDING_NV" }, { 0x864B, "GL_PROGRAM_ERROR_POSITION_ARB" }, { 0x864B, "GL_PROGRAM_ERROR_POSITION_NV" }, { 0x8650, "GL_VERTEX_ATTRIB_ARRAY0_NV" }, { 0x8651, "GL_VERTEX_ATTRIB_ARRAY1_NV" }, { 0x8652, "GL_VERTEX_ATTRIB_ARRAY2_NV" }, { 0x8653, "GL_VERTEX_ATTRIB_ARRAY3_NV" }, { 0x8654, "GL_VERTEX_ATTRIB_ARRAY4_NV" }, { 0x8655, "GL_VERTEX_ATTRIB_ARRAY5_NV" }, { 0x8656, "GL_VERTEX_ATTRIB_ARRAY6_NV" }, { 0x8657, "GL_VERTEX_ATTRIB_ARRAY7_NV" }, { 0x8658, "GL_VERTEX_ATTRIB_ARRAY8_NV" }, { 0x8659, "GL_VERTEX_ATTRIB_ARRAY9_NV" }, { 0x865A, "GL_VERTEX_ATTRIB_ARRAY10_NV" }, { 0x865B, "GL_VERTEX_ATTRIB_ARRAY11_NV" }, { 0x865C, "GL_VERTEX_ATTRIB_ARRAY12_NV" }, { 0x865D, "GL_VERTEX_ATTRIB_ARRAY13_NV" }, { 0x865E, "GL_VERTEX_ATTRIB_ARRAY14_NV" }, { 0x865F, "GL_VERTEX_ATTRIB_ARRAY15_NV" }, { 0x8660, "GL_MAP1_VERTEX_ATTRIB0_4_NV" }, { 0x8661, "GL_MAP1_VERTEX_ATTRIB1_4_NV" }, { 0x8662, "GL_MAP1_VERTEX_ATTRIB2_4_NV" }, { 0x8663, "GL_MAP1_VERTEX_ATTRIB3_4_NV" }, { 0x8664, "GL_MAP1_VERTEX_ATTRIB4_4_NV" }, { 0x8665, "GL_MAP1_VERTEX_ATTRIB5_4_NV" }, { 0x8666, "GL_MAP1_VERTEX_ATTRIB6_4_NV" }, { 0x8667, "GL_MAP1_VERTEX_ATTRIB7_4_NV" }, { 0x8668, "GL_MAP1_VERTEX_ATTRIB8_4_NV" }, { 0x8669, "GL_MAP1_VERTEX_ATTRIB9_4_NV" }, { 0x866A, "GL_MAP1_VERTEX_ATTRIB10_4_NV" }, { 0x866B, "GL_MAP1_VERTEX_ATTRIB11_4_NV" }, { 0x866C, "GL_MAP1_VERTEX_ATTRIB12_4_NV" }, { 0x866D, "GL_MAP1_VERTEX_ATTRIB13_4_NV" }, { 0x866E, "GL_MAP1_VERTEX_ATTRIB14_4_NV" }, { 0x866F, "GL_MAP1_VERTEX_ATTRIB15_4_NV" }, { 0x8670, "GL_MAP2_VERTEX_ATTRIB0_4_NV" }, { 0x8671, "GL_MAP2_VERTEX_ATTRIB1_4_NV" }, { 0x8672, "GL_MAP2_VERTEX_ATTRIB2_4_NV" }, { 0x8673, "GL_MAP2_VERTEX_ATTRIB3_4_NV" }, { 0x8674, "GL_MAP2_VERTEX_ATTRIB4_4_NV" }, { 0x8675, "GL_MAP2_VERTEX_ATTRIB5_4_NV" }, { 0x8676, "GL_MAP2_VERTEX_ATTRIB6_4_NV" }, { 0x8677, "GL_MAP2_VERTEX_ATTRIB7_4_NV" }, { 0x8677, "GL_PROGRAM_BINDING_ARB" }, { 0x8677, "GL_PROGRAM_NAME_ARB" }, { 0x8678, "GL_MAP2_VERTEX_ATTRIB8_4_NV" }, { 0x8679, "GL_MAP2_VERTEX_ATTRIB9_4_NV" }, { 0x867A, "GL_MAP2_VERTEX_ATTRIB10_4_NV" }, { 0x867B, "GL_MAP2_VERTEX_ATTRIB11_4_NV" }, { 0x867C, "GL_MAP2_VERTEX_ATTRIB12_4_NV" }, { 0x867D, "GL_MAP2_VERTEX_ATTRIB13_4_NV" }, { 0x867E, "GL_MAP2_VERTEX_ATTRIB14_4_NV" }, { 0x867F, "GL_MAP2_VERTEX_ATTRIB15_4_NV" }, { 0x86A0, "GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB" }, { 0x86A0, "GL_TEXTURE_COMPRESSED_IMAGE_SIZE" }, { 0x86A1, "GL_TEXTURE_COMPRESSED_ARB" }, { 0x86A1, "GL_TEXTURE_COMPRESSED" }, { 0x86A2, "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB" }, { 0x86A2, "GL_NUM_COMPRESSED_TEXTURE_FORMATS" }, { 0x86A3, "GL_COMPRESSED_TEXTURE_FORMATS_ARB" }, { 0x86A3, "GL_COMPRESSED_TEXTURE_FORMATS" }, { 0x86A4, "GL_MAX_VERTEX_UNITS_ARB" }, { 0x86A5, "GL_ACTIVE_VERTEX_UNITS_ARB" }, { 0x86A6, "GL_WEIGHT_SUM_UNITY_ARB" }, { 0x86A7, "GL_VERTEX_BLEND_ARB" }, { 0x86A8, "GL_CURRENT_WEIGHT_ARB" }, { 0x86A9, "GL_WEIGHT_ARRAY_TYPE_ARB" }, { 0x86AA, "GL_WEIGHT_ARRAY_STRIDE_ARB" }, { 0x86AB, "GL_WEIGHT_ARRAY_SIZE_ARB" }, { 0x86AC, "GL_WEIGHT_ARRAY_POINTER_ARB" }, { 0x86AD, "GL_WEIGHT_ARRAY_ARB" }, { 0x86AE, "GL_DOT3_RGB_ARB" }, { 0x86AE, "GL_DOT3_RGB" }, { 0x86AF, "GL_DOT3_RGBA_ARB" }, { 0x86AF, "GL_DOT3_RGBA" }, { 0x8722, "GL_MODELVIEW2_ARB" }, { 0x8723, "GL_MODELVIEW3_ARB" }, { 0x8724, "GL_MODELVIEW4_ARB" }, { 0x8725, "GL_MODELVIEW5_ARB" }, { 0x8726, "GL_MODELVIEW6_ARB" }, { 0x8727, "GL_MODELVIEW7_ARB" }, { 0x8728, "GL_MODELVIEW8_ARB" }, { 0x8729, "GL_MODELVIEW9_ARB" }, { 0x872A, "GL_MODELVIEW10_ARB" }, { 0x872B, "GL_MODELVIEW11_ARB" }, { 0x872C, "GL_MODELVIEW12_ARB" }, { 0x872D, "GL_MODELVIEW13_ARB" }, { 0x872E, "GL_MODELVIEW14_ARB" }, { 0x872F, "GL_MODELVIEW15_ARB" }, { 0x8730, "GL_MODELVIEW16_ARB" }, { 0x8731, "GL_MODELVIEW17_ARB" }, { 0x8732, "GL_MODELVIEW18_ARB" }, { 0x8733, "GL_MODELVIEW19_ARB" }, { 0x8734, "GL_MODELVIEW20_ARB" }, { 0x8735, "GL_MODELVIEW21_ARB" }, { 0x8736, "GL_MODELVIEW22_ARB" }, { 0x8737, "GL_MODELVIEW23_ARB" }, { 0x8738, "GL_MODELVIEW24_ARB" }, { 0x8739, "GL_MODELVIEW25_ARB" }, { 0x873A, "GL_MODELVIEW26_ARB" }, { 0x873B, "GL_MODELVIEW27_ARB" }, { 0x873C, "GL_MODELVIEW28_ARB" }, { 0x873D, "GL_MODELVIEW29_ARB" }, { 0x873E, "GL_MODELVIEW30_ARB" }, { 0x873F, "GL_MODELVIEW31_ARB" }, { 0x8742, "GL_MIRROR_CLAMP_EXT" }, { 0x8743, "GL_MIRROR_CLAMP_TO_EDGE_EXT" }, { 0x8764, "GL_BUFFER_SIZE_ARB" }, { 0x8764, "GL_BUFFER_SIZE" }, { 0x8765, "GL_BUFFER_USAGE_ARB" }, { 0x8765, "GL_BUFFER_USAGE" }, { 0x8780, "GL_VERTEX_SHADER_EXT" }, { 0x8781, "GL_VERTEX_SHADER_BINDING_EXT" }, { 0x8782, "GL_OP_INDEX_EXT" }, { 0x8783, "GL_OP_NEGATE_EXT" }, { 0x8784, "GL_OP_DOT3_EXT" }, { 0x8785, "GL_OP_DOT4_EXT" }, { 0x8786, "GL_OP_MUL_EXT" }, { 0x8787, "GL_OP_ADD_EXT" }, { 0x8788, "GL_OP_MADD_EXT" }, { 0x8789, "GL_OP_FRAC_EXT" }, { 0x878A, "GL_OP_MAX_EXT" }, { 0x878B, "GL_OP_MIN_EXT" }, { 0x878C, "GL_OP_SET_GE_EXT" }, { 0x878D, "GL_OP_SET_LT_EXT" }, { 0x878E, "GL_OP_CLAMP_EXT" }, { 0x878F, "GL_OP_FLOOR_EXT" }, { 0x8790, "GL_OP_ROUND_EXT" }, { 0x8791, "GL_OP_EXP_BASE_2_EXT" }, { 0x8792, "GL_OP_LOG_BASE_2_EXT" }, { 0x8793, "GL_OP_POWER_EXT" }, { 0x8794, "GL_OP_RECIP_EXT" }, { 0x8795, "GL_OP_RECIP_SQRT_EXT" }, { 0x8796, "GL_OP_SUB_EXT" }, { 0x8797, "GL_OP_CROSS_PRODUCT_EXT" }, { 0x8798, "GL_OP_MULTIPLY_MATRIX_EXT" }, { 0x8799, "GL_OP_MOV_EXT" }, { 0x879A, "GL_OUTPUT_VERTEX_EXT" }, { 0x879B, "GL_OUTPUT_COLOR0_EXT" }, { 0x879C, "GL_OUTPUT_COLOR1_EXT" }, { 0x879D, "GL_OUTPUT_TEXTURE_COORD0_EXT" }, { 0x879E, "GL_OUTPUT_TEXTURE_COORD1_EXT" }, { 0x879F, "GL_OUTPUT_TEXTURE_COORD2_EXT" }, { 0x87A0, "GL_OUTPUT_TEXTURE_COORD3_EXT" }, { 0x87A1, "GL_OUTPUT_TEXTURE_COORD4_EXT" }, { 0x87A2, "GL_OUTPUT_TEXTURE_COORD5_EXT" }, { 0x87A3, "GL_OUTPUT_TEXTURE_COORD6_EXT" }, { 0x87A4, "GL_OUTPUT_TEXTURE_COORD7_EXT" }, { 0x87A5, "GL_OUTPUT_TEXTURE_COORD8_EXT" }, { 0x87A6, "GL_OUTPUT_TEXTURE_COORD9_EXT" }, { 0x87A7, "GL_OUTPUT_TEXTURE_COORD10_EXT" }, { 0x87A8, "GL_OUTPUT_TEXTURE_COORD11_EXT" }, { 0x87A9, "GL_OUTPUT_TEXTURE_COORD12_EXT" }, { 0x87AA, "GL_OUTPUT_TEXTURE_COORD13_EXT" }, { 0x87AB, "GL_OUTPUT_TEXTURE_COORD14_EXT" }, { 0x87AC, "GL_OUTPUT_TEXTURE_COORD15_EXT" }, { 0x87AD, "GL_OUTPUT_TEXTURE_COORD16_EXT" }, { 0x87AE, "GL_OUTPUT_TEXTURE_COORD17_EXT" }, { 0x87AF, "GL_OUTPUT_TEXTURE_COORD18_EXT" }, { 0x87B0, "GL_OUTPUT_TEXTURE_COORD19_EXT" }, { 0x87B1, "GL_OUTPUT_TEXTURE_COORD20_EXT" }, { 0x87B2, "GL_OUTPUT_TEXTURE_COORD21_EXT" }, { 0x87B3, "GL_OUTPUT_TEXTURE_COORD22_EXT" }, { 0x87B4, "GL_OUTPUT_TEXTURE_COORD23_EXT" }, { 0x87B5, "GL_OUTPUT_TEXTURE_COORD24_EXT" }, { 0x87B6, "GL_OUTPUT_TEXTURE_COORD25_EXT" }, { 0x87B7, "GL_OUTPUT_TEXTURE_COORD26_EXT" }, { 0x87B8, "GL_OUTPUT_TEXTURE_COORD27_EXT" }, { 0x87B9, "GL_OUTPUT_TEXTURE_COORD28_EXT" }, { 0x87BA, "GL_OUTPUT_TEXTURE_COORD29_EXT" }, { 0x87BB, "GL_OUTPUT_TEXTURE_COORD30_EXT" }, { 0x87BC, "GL_OUTPUT_TEXTURE_COORD31_EXT" }, { 0x87BD, "GL_OUTPUT_FOG_EXT" }, { 0x87BE, "GL_SCALAR_EXT" }, { 0x87BF, "GL_VECTOR_EXT" }, { 0x87C0, "GL_MATRIX_EXT" }, { 0x87C1, "GL_VARIANT_EXT" }, { 0x87C2, "GL_INVARIANT_EXT" }, { 0x87C3, "GL_LOCAL_CONSTANT_EXT" }, { 0x87C4, "GL_LOCAL_EXT" }, { 0x87C5, "GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT" }, { 0x87C6, "GL_MAX_VERTEX_SHADER_VARIANTS_EXT" }, { 0x87C7, "GL_MAX_VERTEX_SHADER_INVARIANTS_EXT" }, { 0x87C8, "GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT" }, { 0x87C9, "GL_MAX_VERTEX_SHADER_LOCALS_EXT" }, { 0x87CA, "GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT" }, { 0x87CB, "GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT" }, { 0x87CC, "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT" }, { 0x87CD, "GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT" }, { 0x87CE, "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT" }, { 0x87CF, "GL_VERTEX_SHADER_INSTRUCTIONS_EXT" }, { 0x87D0, "GL_VERTEX_SHADER_VARIANTS_EXT" }, { 0x87D1, "GL_VERTEX_SHADER_INVARIANTS_EXT" }, { 0x87D2, "GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT" }, { 0x87D3, "GL_VERTEX_SHADER_LOCALS_EXT" }, { 0x87D4, "GL_VERTEX_SHADER_OPTIMIZED_EXT" }, { 0x87D5, "GL_X_EXT" }, { 0x87D6, "GL_Y_EXT" }, { 0x87D7, "GL_Z_EXT" }, { 0x87D8, "GL_W_EXT" }, { 0x87D9, "GL_NEGATIVE_X_EXT" }, { 0x87DA, "GL_NEGATIVE_Y_EXT" }, { 0x87DB, "GL_NEGATIVE_Z_EXT" }, { 0x87DC, "GL_NEGATIVE_W_EXT" }, { 0x87DF, "GL_NEGATIVE_ONE_EXT" }, { 0x87E0, "GL_NORMALIZED_RANGE_EXT" }, { 0x87E1, "GL_FULL_RANGE_EXT" }, { 0x87E2, "GL_CURRENT_VERTEX_EXT" }, { 0x87E3, "GL_MVP_MATRIX_EXT" }, { 0x87E4, "GL_VARIANT_VALUE_EXT" }, { 0x87E5, "GL_VARIANT_DATATYPE_EXT" }, { 0x87E6, "GL_VARIANT_ARRAY_STRIDE_EXT" }, { 0x87E7, "GL_VARIANT_ARRAY_TYPE_EXT" }, { 0x87E8, "GL_VARIANT_ARRAY_EXT" }, { 0x87E9, "GL_VARIANT_ARRAY_POINTER_EXT" }, { 0x87EA, "GL_INVARIANT_VALUE_EXT" }, { 0x87EB, "GL_INVARIANT_DATATYPE_EXT" }, { 0x87EC, "GL_LOCAL_CONSTANT_VALUE_EXT" }, { 0x87Ed, "GL_LOCAL_CONSTANT_DATATYPE_EXT" }, { 0x8800, "GL_STENCIL_BACK_FUNC_ATI" }, { 0x8800, "GL_STENCIL_BACK_FUNC" }, { 0x8801, "GL_STENCIL_BACK_FAIL_ATI" }, { 0x8801, "GL_STENCIL_BACK_FAIL" }, { 0x8802, "GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI" }, { 0x8802, "GL_STENCIL_BACK_PASS_DEPTH_FAIL" }, { 0x8803, "GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI" }, { 0x8803, "GL_STENCIL_BACK_PASS_DEPTH_PASS" }, { 0x8804, "GL_FRAGMENT_PROGRAM_ARB" }, { 0x8805, "GL_PROGRAM_ALU_INSTRUCTIONS_ARB" }, { 0x8806, "GL_PROGRAM_TEX_INSTRUCTIONS_ARB" }, { 0x8807, "GL_PROGRAM_TEX_INDIRECTIONS_ARB" }, { 0x8808, "GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB" }, { 0x8809, "GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB" }, { 0x880A, "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" }, { 0x880B, "GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB" }, { 0x880C, "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB" }, { 0x880D, "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB" }, { 0x880E, "GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB" }, { 0x880F, "GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB" }, { 0x8810, "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB" }, { 0x8814, "GL_RGBA_FLOAT32_APPLE" }, { 0x8814, "GL_RGBA_FLOAT32_ATI" }, { 0x8814, "GL_RGBA32F_ARB" }, { 0x8815, "GL_RGB_FLOAT32_APPLE" }, { 0x8815, "GL_RGB_FLOAT32_ATI" }, { 0x8815, "GL_RGB32F_ARB" }, { 0x8816, "GL_ALPHA_FLOAT32_APPLE" }, { 0x8816, "GL_ALPHA_FLOAT32_ATI" }, { 0x8816, "GL_ALPHA32F_ARB" }, { 0x8817, "GL_INTENSITY_FLOAT32_APPLE" }, { 0x8817, "GL_INTENSITY_FLOAT32_ATI" }, { 0x8817, "GL_INTENSITY32F_ARB" }, { 0x8818, "GL_LUMINANCE_FLOAT32_APPLE" }, { 0x8818, "GL_LUMINANCE_FLOAT32_ATI" }, { 0x8818, "GL_LUMINANCE32F_ARB" }, { 0x8819, "GL_LUMINANCE_ALPHA_FLOAT32_APPLE" }, { 0x8819, "GL_LUMINANCE_ALPHA_FLOAT32_ATI" }, { 0x8819, "GL_LUMINANCE_ALPHA32F_ARB" }, { 0x881A, "GL_RGBA_FLOAT16_APPLE" }, { 0x881A, "GL_RGBA_FLOAT16_ATI" }, { 0x881A, "GL_RGBA16F_ARB" }, { 0x881B, "GL_RGB_FLOAT16_APPLE" }, { 0x881B, "GL_RGB_FLOAT16_ATI" }, { 0x881B, "GL_RGB16F_ARB" }, { 0x881C, "GL_ALPHA_FLOAT16_APPLE" }, { 0x881C, "GL_ALPHA_FLOAT16_ATI" }, { 0x881C, "GL_ALPHA16F_ARB" }, { 0x881D, "GL_INTENSITY_FLOAT16_APPLE" }, { 0x881D, "GL_INTENSITY_FLOAT16_ATI" }, { 0x881D, "GL_INTENSITY16F_ARB" }, { 0x881E, "GL_LUMINANCE_FLOAT16_APPLE" }, { 0x881E, "GL_LUMINANCE_FLOAT16_ATI" }, { 0x881E, "GL_LUMINANCE16F_ARB" }, { 0x881F, "GL_LUMINANCE_ALPHA_FLOAT16_APPLE" }, { 0x881F, "GL_LUMINANCE_ALPHA_FLOAT16_ATI" }, { 0x881F, "GL_LUMINANCE_ALPHA16F_ARB" }, { 0x8820, "GL_RGBA_FLOAT_MODE_ARB" }, { 0x8824, "GL_MAX_DRAW_BUFFERS_ARB" }, { 0x8824, "GL_MAX_DRAW_BUFFERS" }, { 0x8825, "GL_DRAW_BUFFER0_ARB" }, { 0x8825, "GL_DRAW_BUFFER0" }, { 0x8826, "GL_DRAW_BUFFER1_ARB" }, { 0x8826, "GL_DRAW_BUFFER1" }, { 0x8827, "GL_DRAW_BUFFER2_ARB" }, { 0x8827, "GL_DRAW_BUFFER2" }, { 0x8828, "GL_DRAW_BUFFER3_ARB" }, { 0x8828, "GL_DRAW_BUFFER3" }, { 0x8829, "GL_DRAW_BUFFER4_ARB" }, { 0x8829, "GL_DRAW_BUFFER4" }, { 0x882A, "GL_DRAW_BUFFER5_ARB" }, { 0x882A, "GL_DRAW_BUFFER5" }, { 0x882B, "GL_DRAW_BUFFER6_ARB" }, { 0x882B, "GL_DRAW_BUFFER6" }, { 0x882C, "GL_DRAW_BUFFER7_ARB" }, { 0x882C, "GL_DRAW_BUFFER7" }, { 0x882D, "GL_DRAW_BUFFER8_ARB" }, { 0x882D, "GL_DRAW_BUFFER8" }, { 0x882E, "GL_DRAW_BUFFER9_ARB" }, { 0x882E, "GL_DRAW_BUFFER9" }, { 0x882F, "GL_DRAW_BUFFER10_ARB" }, { 0x882F, "GL_DRAW_BUFFER10" }, { 0x8830, "GL_DRAW_BUFFER11_ARB" }, { 0x8830, "GL_DRAW_BUFFER11" }, { 0x8831, "GL_DRAW_BUFFER12_ARB" }, { 0x8831, "GL_DRAW_BUFFER12" }, { 0x8832, "GL_DRAW_BUFFER13_ARB" }, { 0x8832, "GL_DRAW_BUFFER13" }, { 0x8833, "GL_DRAW_BUFFER14_ARB" }, { 0x8833, "GL_DRAW_BUFFER14" }, { 0x8834, "GL_DRAW_BUFFER15_ARB" }, { 0x8834, "GL_DRAW_BUFFER15" }, { 0x883D, "GL_ALPHA_BLEND_EQUATION_ATI" }, { 0x883D, "GL_BLEND_EQUATION_ALPHA_EXT" }, { 0x883D, "GL_BLEND_EQUATION_ALPHA" }, { 0x884A, "GL_TEXTURE_DEPTH_SIZE_ARB" }, { 0x884A, "GL_TEXTURE_DEPTH_SIZE" }, { 0x884B, "GL_DEPTH_TEXTURE_MODE_ARB" }, { 0x884B, "GL_DEPTH_TEXTURE_MODE" }, { 0x884C, "GL_TEXTURE_COMPARE_MODE_ARB" }, { 0x884C, "GL_TEXTURE_COMPARE_MODE" }, { 0x884D, "GL_TEXTURE_COMPARE_FUNC_ARB" }, { 0x884D, "GL_TEXTURE_COMPARE_FUNC" }, { 0x884E, "GL_COMPARE_R_TO_TEXTURE_ARB" }, { 0x884E, "GL_COMPARE_R_TO_TEXTURE" }, { 0x884E, "GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT" }, { 0x8861, "GL_POINT_SPRITE_ARB" }, { 0x8861, "GL_POINT_SPRITE" }, { 0x8862, "GL_COORD_REPLACE_ARB" }, { 0x8862, "GL_COORD_REPLACE" }, { 0x8864, "GL_QUERY_COUNTER_BITS_ARB" }, { 0x8864, "GL_QUERY_COUNTER_BITS" }, { 0x8865, "GL_CURRENT_QUERY_ARB" }, { 0x8865, "GL_CURRENT_QUERY" }, { 0x8866, "GL_QUERY_RESULT_ARB" }, { 0x8866, "GL_QUERY_RESULT" }, { 0x8867, "GL_QUERY_RESULT_AVAILABLE_ARB" }, { 0x8867, "GL_QUERY_RESULT_AVAILABLE" }, { 0x8869, "GL_MAX_VERTEX_ATTRIBS_ARB" }, { 0x8869, "GL_MAX_VERTEX_ATTRIBS_ARB" }, { 0x8869, "GL_MAX_VERTEX_ATTRIBS" }, { 0x886A, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB" }, { 0x886A, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB" }, { 0x886A, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED" }, { 0x8871, "GL_MAX_TEXTURE_COORDS_ARB" }, { 0x8871, "GL_MAX_TEXTURE_COORDS_ARB" }, { 0x8871, "GL_MAX_TEXTURE_COORDS_ARB" }, { 0x8871, "GL_MAX_TEXTURE_COORDS" }, { 0x8872, "GL_MAX_TEXTURE_IMAGE_UNITS_ARB" }, { 0x8872, "GL_MAX_TEXTURE_IMAGE_UNITS_ARB" }, { 0x8872, "GL_MAX_TEXTURE_IMAGE_UNITS_ARB" }, { 0x8872, "GL_MAX_TEXTURE_IMAGE_UNITS" }, { 0x8874, "GL_PROGRAM_ERROR_STRING_ARB" }, { 0x8875, "GL_PROGRAM_FORMAT_ASCII_ARB" }, { 0x8876, "GL_PROGRAM_FORMAT_ARB" }, { 0x8890, "GL_DEPTH_BOUNDS_TEST_EXT" }, { 0x8891, "GL_DEPTH_BOUNDS_EXT" }, { 0x8892, "GL_ARRAY_BUFFER_ARB" }, { 0x8892, "GL_ARRAY_BUFFER" }, { 0x8893, "GL_ELEMENT_ARRAY_BUFFER_ARB" }, { 0x8893, "GL_ELEMENT_ARRAY_BUFFER" }, { 0x8894, "GL_ARRAY_BUFFER_BINDING_ARB" }, { 0x8894, "GL_ARRAY_BUFFER_BINDING" }, { 0x8895, "GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB" }, { 0x8895, "GL_ELEMENT_ARRAY_BUFFER_BINDING" }, { 0x8896, "GL_VERTEX_ARRAY_BUFFER_BINDING_ARB" }, { 0x8896, "GL_VERTEX_ARRAY_BUFFER_BINDING" }, { 0x8897, "GL_NORMAL_ARRAY_BUFFER_BINDING_ARB" }, { 0x8897, "GL_NORMAL_ARRAY_BUFFER_BINDING" }, { 0x8898, "GL_COLOR_ARRAY_BUFFER_BINDING_ARB" }, { 0x8898, "GL_COLOR_ARRAY_BUFFER_BINDING" }, { 0x8899, "GL_INDEX_ARRAY_BUFFER_BINDING_ARB" }, { 0x8899, "GL_INDEX_ARRAY_BUFFER_BINDING" }, { 0x889A, "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB" }, { 0x889A, "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING" }, { 0x889B, "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB" }, { 0x889B, "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING" }, { 0x889C, "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB" }, { 0x889C, "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING" }, { 0x889D, "GL_FOG_COORD_ARRAY_BUFFER_BINDING_ARB" }, { 0x889D, "GL_FOG_COORD_ARRAY_BUFFER_BINDING" }, { 0x889D, "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB" }, { 0x889D, "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING" }, { 0x889E, "GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB" }, { 0x889E, "GL_WEIGHT_ARRAY_BUFFER_BINDING" }, { 0x889F, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB" }, { 0x889F, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING" }, { 0x88A0, "GL_PROGRAM_INSTRUCTIONS_ARB" }, { 0x88A1, "GL_MAX_PROGRAM_INSTRUCTIONS_ARB" }, { 0x88A2, "GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB" }, { 0x88A3, "GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB" }, { 0x88A4, "GL_PROGRAM_TEMPORARIES_ARB" }, { 0x88A5, "GL_MAX_PROGRAM_TEMPORARIES_ARB" }, { 0x88A6, "GL_PROGRAM_NATIVE_TEMPORARIES_ARB" }, { 0x88A7, "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB" }, { 0x88A8, "GL_PROGRAM_PARAMETERS_ARB" }, { 0x88A9, "GL_MAX_PROGRAM_PARAMETERS_ARB" }, { 0x88AA, "GL_PROGRAM_NATIVE_PARAMETERS_ARB" }, { 0x88AB, "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB" }, { 0x88AC, "GL_PROGRAM_ATTRIBS_ARB" }, { 0x88AD, "GL_MAX_PROGRAM_ATTRIBS_ARB" }, { 0x88AE, "GL_PROGRAM_NATIVE_ATTRIBS_ARB" }, { 0x88AF, "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB" }, { 0x88B0, "GL_PROGRAM_ADDRESS_REGISTERS_ARB" }, { 0x88B1, "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB" }, { 0x88B2, "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" }, { 0x88B3, "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB" }, { 0x88B4, "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB" }, { 0x88B5, "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB" }, { 0x88B6, "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB" }, { 0x88B7, "GL_TRANSPOSE_CURRENT_MATRIX_ARB" }, { 0x88B8, "GL_READ_ONLY_ARB" }, { 0x88B8, "GL_READ_ONLY" }, { 0x88B9, "GL_WRITE_ONLY_ARB" }, { 0x88B9, "GL_WRITE_ONLY" }, { 0x88BA, "GL_READ_WRITE_ARB" }, { 0x88BA, "GL_READ_WRITE" }, { 0x88BB, "GL_BUFFER_ACCESS_ARB" }, { 0x88BB, "GL_BUFFER_ACCESS" }, { 0x88BC, "GL_BUFFER_MAPPED_ARB" }, { 0x88BC, "GL_BUFFER_MAPPED" }, { 0x88BD, "GL_BUFFER_MAP_POINTER_ARB" }, { 0x88BD, "GL_BUFFER_MAP_POINTER" }, { 0x88C0, "GL_MATRIX0_ARB" }, { 0x88C1, "GL_MATRIX1_ARB" }, { 0x88C2, "GL_MATRIX2_ARB" }, { 0x88C3, "GL_MATRIX3_ARB" }, { 0x88C4, "GL_MATRIX4_ARB" }, { 0x88C5, "GL_MATRIX5_ARB" }, { 0x88C6, "GL_MATRIX6_ARB" }, { 0x88C7, "GL_MATRIX7_ARB" }, { 0x88C8, "GL_MATRIX8_ARB" }, { 0x88C9, "GL_MATRIX9_ARB" }, { 0x88CA, "GL_MATRIX10_ARB" }, { 0x88CB, "GL_MATRIX11_ARB" }, { 0x88CC, "GL_MATRIX12_ARB" }, { 0x88CD, "GL_MATRIX13_ARB" }, { 0x88CE, "GL_MATRIX14_ARB" }, { 0x88CF, "GL_MATRIX15_ARB" }, { 0x88D0, "GL_MATRIX16_ARB" }, { 0x88D1, "GL_MATRIX17_ARB" }, { 0x88D2, "GL_MATRIX18_ARB" }, { 0x88D3, "GL_MATRIX19_ARB" }, { 0x88D4, "GL_MATRIX20_ARB" }, { 0x88D5, "GL_MATRIX21_ARB" }, { 0x88D6, "GL_MATRIX22_ARB" }, { 0x88D7, "GL_MATRIX23_ARB" }, { 0x88D8, "GL_MATRIX24_ARB" }, { 0x88D9, "GL_MATRIX25_ARB" }, { 0x88DA, "GL_MATRIX26_ARB" }, { 0x88DB, "GL_MATRIX27_ARB" }, { 0x88DC, "GL_MATRIX28_ARB" }, { 0x88DD, "GL_MATRIX29_ARB" }, { 0x88DE, "GL_MATRIX30_ARB" }, { 0x88DF, "GL_MATRIX31_ARB" }, { 0x88E0, "GL_STREAM_DRAW_ARB" }, { 0x88E0, "GL_STREAM_DRAW" }, { 0x88E1, "GL_STREAM_READ_ARB" }, { 0x88E1, "GL_STREAM_READ" }, { 0x88E2, "GL_STREAM_COPY_ARB" }, { 0x88E2, "GL_STREAM_COPY" }, { 0x88E4, "GL_STATIC_DRAW_ARB" }, { 0x88E4, "GL_STATIC_DRAW" }, { 0x88E5, "GL_STATIC_READ_ARB" }, { 0x88E5, "GL_STATIC_READ" }, { 0x88E6, "GL_STATIC_COPY_ARB" }, { 0x88E6, "GL_STATIC_COPY" }, { 0x88E8, "GL_DYNAMIC_DRAW_ARB" }, { 0x88E8, "GL_DYNAMIC_DRAW" }, { 0x88E9, "GL_DYNAMIC_READ_ARB" }, { 0x88E9, "GL_DYNAMIC_READ" }, { 0x88EA, "GL_DYNAMIC_COPY_ARB" }, { 0x88EA, "GL_DYNAMIC_COPY" }, { 0x88EB, "GL_PIXEL_PACK_BUFFER_ARB" }, { 0x88EB, "GL_PIXEL_PACK_BUFFER" }, { 0x88EC, "GL_PIXEL_UNPACK_BUFFER_ARB" }, { 0x88EC, "GL_PIXEL_UNPACK_BUFFER" }, { 0x88ED, "GL_PIXEL_PACK_BUFFER_BINDING_ARB" }, { 0x88ED, "GL_PIXEL_PACK_BUFFER_BINDING" }, { 0x88EF, "GL_PIXEL_UNPACK_BUFFER_BINDING_ARB" }, { 0x88EF, "GL_PIXEL_UNPACK_BUFFER_BINDING" }, { 0x88F0, "GL_DEPTH24_STENCIL8_EXT" }, { 0x88F0, "GL_DEPTH24_STENCIL8" }, { 0x88F1, "GL_TEXTURE_STENCIL_SIZE_EXT" }, { 0x88F1, "GL_TEXTURE_STENCIL_SIZE" }, { 0x88FD, "GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT" }, { 0x88FE, "GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB" }, { 0x88FF, "GL_MAX_ARRAY_TEXTURE_LAYERS_EXT" }, { 0x8904, "GL_MIN_PROGRAM_TEXEL_OFFSET_EXT" }, { 0x8905, "GL_MAX_PROGRAM_TEXEL_OFFSET_EXT" }, { 0x8910, "GL_STENCIL_TEST_TWO_SIDE_EXT" }, { 0x8911, "GL_ACTIVE_STENCIL_FACE_EXT" }, { 0x8912, "GL_MIRROR_CLAMP_TO_BORDER_EXT" }, { 0x8914, "GL_SAMPLES_PASSED_ARB" }, { 0x8914, "GL_SAMPLES_PASSED" }, { 0x891A, "GL_CLAMP_VERTEX_COLOR_ARB" }, { 0x891B, "GL_CLAMP_FRAGMENT_COLOR_ARB" }, { 0x891C, "GL_CLAMP_READ_COLOR_ARB" }, { 0x891D, "GL_FIXED_ONLY_ARB" }, { 0x8920, "GL_FRAGMENT_SHADER_EXT" }, { 0x896D, "GL_SECONDARY_INTERPOLATOR_EXT" }, { 0x896E, "GL_NUM_FRAGMENT_REGISTERS_EXT" }, { 0x896F, "GL_NUM_FRAGMENT_CONSTANTS_EXT" }, { 0x8A0C, "GL_ELEMENT_ARRAY_APPLE" }, { 0x8A0D, "GL_ELEMENT_ARRAY_TYPE_APPLE" }, { 0x8A0E, "GL_ELEMENT_ARRAY_POINTER_APPLE" }, { 0x8A0F, "GL_COLOR_FLOAT_APPLE" }, { 0x8A11, "GL_UNIFORM_BUFFER" }, { 0x8A28, "GL_UNIFORM_BUFFER_BINDING" }, { 0x8A29, "GL_UNIFORM_BUFFER_START" }, { 0x8A2A, "GL_UNIFORM_BUFFER_SIZE" }, { 0x8A2B, "GL_MAX_VERTEX_UNIFORM_BLOCKS" }, { 0x8A2C, "GL_MAX_GEOMETRY_UNIFORM_BLOCKS" }, { 0x8A2D, "GL_MAX_FRAGMENT_UNIFORM_BLOCKS" }, { 0x8A2E, "GL_MAX_COMBINED_UNIFORM_BLOCKS" }, { 0x8A2F, "GL_MAX_UNIFORM_BUFFER_BINDINGS" }, { 0x8A30, "GL_MAX_UNIFORM_BLOCK_SIZE" }, { 0x8A31, "GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS" }, { 0x8A32, "GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS" }, { 0x8A33, "GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS" }, { 0x8A34, "GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT" }, { 0x8A35, "GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH" }, { 0x8A36, "GL_ACTIVE_UNIFORM_BLOCKS" }, { 0x8A37, "GL_UNIFORM_TYPE" }, { 0x8A38, "GL_UNIFORM_SIZE" }, { 0x8A39, "GL_UNIFORM_NAME_LENGTH" }, { 0x8A3A, "GL_UNIFORM_BLOCK_INDEX" }, { 0x8A3B, "GL_UNIFORM_OFFSET" }, { 0x8A3C, "GL_UNIFORM_ARRAY_STRIDE" }, { 0x8A3D, "GL_UNIFORM_MATRIX_STRIDE" }, { 0x8A3E, "GL_UNIFORM_IS_ROW_MAJOR" }, { 0x8A3F, "GL_UNIFORM_BLOCK_BINDING" }, { 0x8A40, "GL_UNIFORM_BLOCK_DATA_SIZE" }, { 0x8A41, "GL_UNIFORM_BLOCK_NAME_LENGTH" }, { 0x8A42, "GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS" }, { 0x8A43, "GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES" }, { 0x8A44, "GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER" }, { 0x8A45, "GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER" }, { 0x8A46, "GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER" }, { 0x8B30, "GL_FRAGMENT_SHADER_ARB" }, { 0x8B30, "GL_FRAGMENT_SHADER" }, { 0x8B31, "GL_VERTEX_SHADER_ARB" }, { 0x8B31, "GL_VERTEX_SHADER" }, { 0x8B40, "GL_PROGRAM_OBJECT_ARB" }, { 0x8B48, "GL_SHADER_OBJECT_ARB" }, { 0x8B49, "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB" }, { 0x8B49, "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS" }, { 0x8B4A, "GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB" }, { 0x8B4A, "GL_MAX_VERTEX_UNIFORM_COMPONENTS" }, { 0x8B4B, "GL_MAX_VARYING_COMPONENTS_EXT" }, { 0x8B4B, "GL_MAX_VARYING_FLOATS_ARB" }, { 0x8B4B, "GL_MAX_VARYING_FLOATS" }, { 0x8B4C, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB" }, { 0x8B4C, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS" }, { 0x8B4D, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB" }, { 0x8B4D, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS" }, { 0x8B4E, "GL_OBJECT_TYPE_ARB" }, { 0x8B4F, "GL_OBJECT_SUBTYPE_ARB" }, { 0x8B4F, "GL_SHADER_TYPE" }, { 0x8B50, "GL_FLOAT_VEC2_ARB" }, { 0x8B50, "GL_FLOAT_VEC2" }, { 0x8B51, "GL_FLOAT_VEC3_ARB" }, { 0x8B51, "GL_FLOAT_VEC3" }, { 0x8B52, "GL_FLOAT_VEC4_ARB" }, { 0x8B52, "GL_FLOAT_VEC4" }, { 0x8B53, "GL_INT_VEC2_ARB" }, { 0x8B53, "GL_INT_VEC2" }, { 0x8B54, "GL_INT_VEC3_ARB" }, { 0x8B54, "GL_INT_VEC3" }, { 0x8B55, "GL_INT_VEC4_ARB" }, { 0x8B55, "GL_INT_VEC4" }, { 0x8B56, "GL_BOOL_ARB" }, { 0x8B56, "GL_BOOL" }, { 0x8B57, "GL_BOOL_VEC2_ARB" }, { 0x8B57, "GL_BOOL_VEC2" }, { 0x8B58, "GL_BOOL_VEC3_ARB" }, { 0x8B58, "GL_BOOL_VEC3" }, { 0x8B59, "GL_BOOL_VEC4_ARB" }, { 0x8B59, "GL_BOOL_VEC4" }, { 0x8B5A, "GL_FLOAT_MAT2_ARB" }, { 0x8B5A, "GL_FLOAT_MAT2" }, { 0x8B5B, "GL_FLOAT_MAT3_ARB" }, { 0x8B5B, "GL_FLOAT_MAT3" }, { 0x8B5C, "GL_FLOAT_MAT4_ARB" }, { 0x8B5C, "GL_FLOAT_MAT4" }, { 0x8B5D, "GL_SAMPLER_1D_ARB" }, { 0x8B5D, "GL_SAMPLER_1D" }, { 0x8B5E, "GL_SAMPLER_2D_ARB" }, { 0x8B5E, "GL_SAMPLER_2D" }, { 0x8B5F, "GL_SAMPLER_3D_ARB" }, { 0x8B5F, "GL_SAMPLER_3D" }, { 0x8B60, "GL_SAMPLER_CUBE_ARB" }, { 0x8B60, "GL_SAMPLER_CUBE" }, { 0x8B61, "GL_SAMPLER_1D_SHADOW_ARB" }, { 0x8B61, "GL_SAMPLER_1D_SHADOW" }, { 0x8B62, "GL_SAMPLER_2D_SHADOW_ARB" }, { 0x8B62, "GL_SAMPLER_2D_SHADOW" }, { 0x8B63, "GL_SAMPLER_2D_RECT_ARB" }, { 0x8B64, "GL_SAMPLER_2D_RECT_SHADOW_ARB" }, { 0x8B65, "GL_FLOAT_MAT2x3" }, { 0x8B66, "GL_FLOAT_MAT2x4" }, { 0x8B67, "GL_FLOAT_MAT3x2" }, { 0x8B68, "GL_FLOAT_MAT3x4" }, { 0x8B69, "GL_FLOAT_MAT4x2" }, { 0x8B6A, "GL_FLOAT_MAT4x3" }, { 0x8B80, "GL_DELETE_STATUS" }, { 0x8B80, "GL_OBJECT_DELETE_STATUS_ARB" }, { 0x8B81, "GL_COMPILE_STATUS" }, { 0x8B81, "GL_OBJECT_COMPILE_STATUS_ARB" }, { 0x8B82, "GL_LINK_STATUS" }, { 0x8B82, "GL_OBJECT_LINK_STATUS_ARB" }, { 0x8B83, "GL_OBJECT_VALIDATE_STATUS_ARB" }, { 0x8B83, "GL_VALIDATE_STATUS" }, { 0x8B84, "GL_INFO_LOG_LENGTH" }, { 0x8B84, "GL_OBJECT_INFO_LOG_LENGTH_ARB" }, { 0x8B85, "GL_ATTACHED_SHADERS" }, { 0x8B85, "GL_OBJECT_ATTACHED_OBJECTS_ARB" }, { 0x8B86, "GL_ACTIVE_UNIFORMS" }, { 0x8B86, "GL_OBJECT_ACTIVE_UNIFORMS_ARB" }, { 0x8B87, "GL_ACTIVE_UNIFORM_MAX_LENGTH" }, { 0x8B87, "GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB" }, { 0x8B88, "GL_OBJECT_SHADER_SOURCE_LENGTH_ARB" }, { 0x8B88, "GL_SHADER_SOURCE_LENGTH" }, { 0x8B89, "GL_ACTIVE_ATTRIBUTES" }, { 0x8B89, "GL_OBJECT_ACTIVE_ATTRIBUTES_ARB" }, { 0x8B8A, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH" }, { 0x8B8A, "GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB" }, { 0x8B8B, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB" }, { 0x8B8B, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT" }, { 0x8B8C, "GL_SHADING_LANGUAGE_VERSION_ARB" }, { 0x8B8C, "GL_SHADING_LANGUAGE_VERSION" }, { 0x8B8D, "GL_CURRENT_PROGRAM" }, { 0x8C10, "GL_TEXTURE_RED_TYPE_ARB" }, { 0x8C10, "GL_TEXTURE_RED_TYPE" }, { 0x8C11, "GL_TEXTURE_GREEN_TYPE_ARB" }, { 0x8C11, "GL_TEXTURE_GREEN_TYPE" }, { 0x8C12, "GL_TEXTURE_BLUE_TYPE_ARB" }, { 0x8C12, "GL_TEXTURE_BLUE_TYPE" }, { 0x8C13, "GL_TEXTURE_ALPHA_TYPE_ARB" }, { 0x8C13, "GL_TEXTURE_ALPHA_TYPE" }, { 0x8C14, "GL_TEXTURE_LUMINANCE_TYPE_ARB" }, { 0x8C15, "GL_TEXTURE_INTENSITY_TYPE_ARB" }, { 0x8C16, "GL_TEXTURE_DEPTH_TYPE_ARB" }, { 0x8C16, "GL_TEXTURE_DEPTH_TYPE" }, { 0x8C17, "GL_UNSIGNED_NORMALIZED_ARB" }, { 0x8C17, "GL_UNSIGNED_NORMALIZED" }, { 0x8C18, "GL_TEXTURE_1D_ARRAY_EXT" }, { 0x8C19, "GL_PROXY_TEXTURE_1D_ARRAY_EXT" }, { 0x8C1A, "GL_TEXTURE_2D_ARRAY_EXT" }, { 0x8C1B, "GL_PROXY_TEXTURE_2D_ARRAY_EXT" }, { 0x8C1C, "GL_TEXTURE_BINDING_1D_ARRAY_EXT" }, { 0x8C1D, "GL_TEXTURE_BINDING_2D_ARRAY_EXT" }, { 0x8C29, "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT" }, { 0x8C3A, "GL_R11F_G11F_B10F_EXT" }, { 0x8C3B, "GL_UNSIGNED_INT_10F_11F_11F_REV_EXT" }, { 0x8C3C, "GL_RGBA_SIGNED_COMPONENTS_EXT" }, { 0x8C3D, "GL_RGB9_E5_EXT" }, { 0x8C3E, "GL_UNSIGNED_INT_5_9_9_9_REV_EXT" }, { 0x8C3F, "GL_TEXTURE_SHARED_SIZE_EXT" }, { 0x8C40, "GL_SRGB_EXT" }, { 0x8C40, "GL_SRGB" }, { 0x8C41, "GL_SRGB8_EXT" }, { 0x8C41, "GL_SRGB8" }, { 0x8C42, "GL_SRGB_ALPHA_EXT" }, { 0x8C42, "GL_SRGB_ALPHA" }, { 0x8C43, "GL_SRGB8_ALPHA8_EXT" }, { 0x8C43, "GL_SRGB8_ALPHA8" }, { 0x8C44, "GL_SLUMINANCE_ALPHA_EXT" }, { 0x8C44, "GL_SLUMINANCE_ALPHA" }, { 0x8C45, "GL_SLUMINANCE8_ALPHA8_EXT" }, { 0x8C45, "GL_SLUMINANCE8_ALPHA8" }, { 0x8C46, "GL_SLUMINANCE_EXT" }, { 0x8C46, "GL_SLUMINANCE" }, { 0x8C47, "GL_SLUMINANCE8_EXT" }, { 0x8C47, "GL_SLUMINANCE8" }, { 0x8C48, "GL_COMPRESSED_SRGB_EXT" }, { 0x8C48, "GL_COMPRESSED_SRGB" }, { 0x8C49, "GL_COMPRESSED_SRGB_ALPHA_EXT" }, { 0x8C49, "GL_COMPRESSED_SRGB_ALPHA" }, { 0x8C4A, "GL_COMPRESSED_SLUMINANCE_EXT" }, { 0x8C4A, "GL_COMPRESSED_SLUMINANCE" }, { 0x8C4B, "GL_COMPRESSED_SLUMINANCE_ALPHA_EXT" }, { 0x8C4B, "GL_COMPRESSED_SLUMINANCE_ALPHA" }, { 0x8C4C, "GL_COMPRESSED_SRGB_S3TC_DXT1_EXT" }, { 0x8C4D, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT" }, { 0x8C4E, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT" }, { 0x8C4F, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT" }, { 0x8C76, "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT" }, { 0x8C7F, "GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT" }, { 0x8C80, "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT" }, { 0x8C83, "GL_TRANSFORM_FEEDBACK_VARYINGS_EXT" }, { 0x8C84, "GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT" }, { 0x8C85, "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT" }, { 0x8C87, "GL_PRIMITIVES_GENERATED_EXT" }, { 0x8C88, "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT" }, { 0x8C89, "GL_RASTERIZER_DISCARD_EXT" }, { 0x8C8A, "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT" }, { 0x8C8B, "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT" }, { 0x8C8C, "GL_INTERLEAVED_ATTRIBS_EXT" }, { 0x8C8D, "GL_SEPARATE_ATTRIBS_EXT" }, { 0x8C8E, "GL_TRANSFORM_FEEDBACK_BUFFER_EXT" }, { 0x8C8F, "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT" }, { 0x8CA0, "GL_POINT_SPRITE_COORD_ORIGIN" }, { 0x8CA1, "GL_LOWER_LEFT" }, { 0x8CA2, "GL_UPPER_LEFT" }, { 0x8CA3, "GL_STENCIL_BACK_REF" }, { 0x8CA4, "GL_STENCIL_BACK_VALUE_MASK" }, { 0x8CA5, "GL_STENCIL_BACK_WRITEMASK" }, { 0x8CA6, "GL_DRAW_FRAMEBUFFER_BINDING_EXT" }, { 0x8CA6, "GL_FRAMEBUFFER_BINDING_EXT" }, { 0x8CA6, "GL_FRAMEBUFFER_BINDING" }, { 0x8CA7, "GL_RENDERBUFFER_BINDING_EXT" }, { 0x8CA7, "GL_RENDERBUFFER_BINDING" }, { 0x8CA8, "GL_READ_FRAMEBUFFER_EXT" }, { 0x8CA8, "GL_READ_FRAMEBUFFER" }, { 0x8CA9, "GL_DRAW_FRAMEBUFFER_EXT" }, { 0x8CA9, "GL_DRAW_FRAMEBUFFER" }, { 0x8CAA, "GL_READ_FRAMEBUFFER_BINDING_EXT" }, { 0x8CAA, "GL_READ_FRAMEBUFFER_BINDING" }, { 0x8CAB, "GL_RENDERBUFFER_SAMPLES_EXT" }, { 0x8CAB, "GL_RENDERBUFFER_SAMPLES" }, { 0x8CAC, "GL_DEPTH_COMPONENT32F" }, { 0x8CAD, "GL_DEPTH32F_STENCIL8" }, { 0x8CD0, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT" }, { 0x8CD0, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE" }, { 0x8CD1, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT" }, { 0x8CD1, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME" }, { 0x8CD2, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT" }, { 0x8CD2, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL" }, { 0x8CD3, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT" }, { 0x8CD3, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE" }, { 0x8CD4, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT" }, { 0x8CD4, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT" }, { 0x8CD4, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER" }, { 0x8CD5, "GL_FRAMEBUFFER_COMPLETE_EXT" }, { 0x8CD5, "GL_FRAMEBUFFER_COMPLETE" }, { 0x8CD6, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT" }, { 0x8CD6, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT" }, { 0x8CD7, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT" }, { 0x8CD7, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT" }, { 0x8CD9, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT" }, { 0x8CDA, "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT" }, { 0x8CDB, "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT" }, { 0x8CDB, "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER" }, { 0x8CDC, "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT" }, { 0x8CDC, "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER" }, { 0x8CDD, "GL_FRAMEBUFFER_UNSUPPORTED_EXT" }, { 0x8CDD, "GL_FRAMEBUFFER_UNSUPPORTED" }, { 0x8CDF, "GL_MAX_COLOR_ATTACHMENTS_EXT" }, { 0x8CDF, "GL_MAX_COLOR_ATTACHMENTS" }, { 0x8CE0, "GL_COLOR_ATTACHMENT0_EXT" }, { 0x8CE0, "GL_COLOR_ATTACHMENT0" }, { 0x8CE1, "GL_COLOR_ATTACHMENT1_EXT" }, { 0x8CE1, "GL_COLOR_ATTACHMENT1" }, { 0x8CE2, "GL_COLOR_ATTACHMENT2_EXT" }, { 0x8CE2, "GL_COLOR_ATTACHMENT2" }, { 0x8CE3, "GL_COLOR_ATTACHMENT3_EXT" }, { 0x8CE3, "GL_COLOR_ATTACHMENT3" }, { 0x8CE4, "GL_COLOR_ATTACHMENT4_EXT" }, { 0x8CE4, "GL_COLOR_ATTACHMENT4" }, { 0x8CE5, "GL_COLOR_ATTACHMENT5_EXT" }, { 0x8CE5, "GL_COLOR_ATTACHMENT5" }, { 0x8CE6, "GL_COLOR_ATTACHMENT6_EXT" }, { 0x8CE6, "GL_COLOR_ATTACHMENT6" }, { 0x8CE7, "GL_COLOR_ATTACHMENT7_EXT" }, { 0x8CE7, "GL_COLOR_ATTACHMENT7" }, { 0x8CE8, "GL_COLOR_ATTACHMENT8_EXT" }, { 0x8CE8, "GL_COLOR_ATTACHMENT8" }, { 0x8CE9, "GL_COLOR_ATTACHMENT9_EXT" }, { 0x8CE9, "GL_COLOR_ATTACHMENT9" }, { 0x8CEA, "GL_COLOR_ATTACHMENT10_EXT" }, { 0x8CEA, "GL_COLOR_ATTACHMENT10" }, { 0x8CEB, "GL_COLOR_ATTACHMENT11_EXT" }, { 0x8CEB, "GL_COLOR_ATTACHMENT11" }, { 0x8CEC, "GL_COLOR_ATTACHMENT12_EXT" }, { 0x8CEC, "GL_COLOR_ATTACHMENT12" }, { 0x8CED, "GL_COLOR_ATTACHMENT13_EXT" }, { 0x8CED, "GL_COLOR_ATTACHMENT13" }, { 0x8CEE, "GL_COLOR_ATTACHMENT14_EXT" }, { 0x8CEE, "GL_COLOR_ATTACHMENT14" }, { 0x8CEF, "GL_COLOR_ATTACHMENT15_EXT" }, { 0x8CEF, "GL_COLOR_ATTACHMENT15" }, { 0x8D00, "GL_DEPTH_ATTACHMENT_EXT" }, { 0x8D00, "GL_DEPTH_ATTACHMENT" }, { 0x8D20, "GL_STENCIL_ATTACHMENT_EXT" }, { 0x8D20, "GL_STENCIL_ATTACHMENT" }, { 0x8D40, "GL_FRAMEBUFFER_EXT" }, { 0x8D40, "GL_FRAMEBUFFER" }, { 0x8D41, "GL_RENDERBUFFER_EXT" }, { 0x8D41, "GL_RENDERBUFFER" }, { 0x8D42, "GL_RENDERBUFFER_WIDTH_EXT" }, { 0x8D42, "GL_RENDERBUFFER_WIDTH" }, { 0x8D43, "GL_RENDERBUFFER_HEIGHT_EXT" }, { 0x8D43, "GL_RENDERBUFFER_HEIGHT" }, { 0x8D44, "GL_RENDERBUFFER_INTERNAL_FORMAT_EXT" }, { 0x8D44, "GL_RENDERBUFFER_INTERNAL_FORMAT" }, { 0x8D46, "GL_STENCIL_INDEX1_EXT" }, { 0x8D46, "GL_STENCIL_INDEX1" }, { 0x8D47, "GL_STENCIL_INDEX4_EXT" }, { 0x8D47, "GL_STENCIL_INDEX4" }, { 0x8D48, "GL_STENCIL_INDEX8_EXT" }, { 0x8D48, "GL_STENCIL_INDEX8" }, { 0x8D49, "GL_STENCIL_INDEX16_EXT" }, { 0x8D49, "GL_STENCIL_INDEX16" }, { 0x8D50, "GL_RENDERBUFFER_RED_SIZE_EXT" }, { 0x8D50, "GL_RENDERBUFFER_RED_SIZE" }, { 0x8D51, "GL_RENDERBUFFER_GREEN_SIZE_EXT" }, { 0x8D51, "GL_RENDERBUFFER_GREEN_SIZE" }, { 0x8D52, "GL_RENDERBUFFER_BLUE_SIZE_EXT" }, { 0x8D52, "GL_RENDERBUFFER_BLUE_SIZE" }, { 0x8D53, "GL_RENDERBUFFER_ALPHA_SIZE_EXT" }, { 0x8D53, "GL_RENDERBUFFER_ALPHA_SIZE" }, { 0x8D54, "GL_RENDERBUFFER_DEPTH_SIZE_EXT" }, { 0x8D54, "GL_RENDERBUFFER_DEPTH_SIZE" }, { 0x8D55, "GL_RENDERBUFFER_STENCIL_SIZE_EXT" }, { 0x8D55, "GL_RENDERBUFFER_STENCIL_SIZE" }, { 0x8D56, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT" }, { 0x8D56, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE" }, { 0x8D57, "GL_MAX_SAMPLES_EXT" }, { 0x8D57, "GL_MAX_SAMPLES" }, { 0x8D70, "GL_RGBA32UI_EXT" }, { 0x8D71, "GL_RGB32UI_EXT" }, { 0x8D72, "GL_ALPHA32UI_EXT" }, { 0x8D73, "GL_INTENSITY32UI_EXT" }, { 0x8D74, "GL_LUMINANCE32UI_EXT" }, { 0x8D75, "GL_LUMINANCE_ALPHA32UI_EXT" }, { 0x8D76, "GL_RGBA16UI_EXT" }, { 0x8D77, "GL_RGB16UI_EXT" }, { 0x8D78, "GL_ALPHA16UI_EXT" }, { 0x8D79, "GL_INTENSITY16UI_EXT" }, { 0x8D7A, "GL_LUMINANCE16UI_EXT" }, { 0x8D7B, "GL_LUMINANCE_ALPHA16UI_EXT" }, { 0x8D7C, "GL_RGBA8UI_EXT" }, { 0x8D7D, "GL_RGB8UI_EXT" }, { 0x8D7E, "GL_ALPHA8UI_EXT" }, { 0x8D7F, "GL_INTENSITY8UI_EXT" }, { 0x8D80, "GL_LUMINANCE8UI_EXT" }, { 0x8D81, "GL_LUMINANCE_ALPHA8UI_EXT" }, { 0x8D82, "GL_RGBA32I_EXT" }, { 0x8D83, "GL_RGB32I_EXT" }, { 0x8D84, "GL_ALPHA32I_EXT" }, { 0x8D85, "GL_INTENSITY32I_EXT" }, { 0x8D86, "GL_LUMINANCE32I_EXT" }, { 0x8D87, "GL_LUMINANCE_ALPHA32I_EXT" }, { 0x8D88, "GL_RGBA16I_EXT" }, { 0x8D89, "GL_RGB16I_EXT" }, { 0x8D8A, "GL_ALPHA16I_EXT" }, { 0x8D8B, "GL_INTENSITY16I_EXT" }, { 0x8D8C, "GL_LUMINANCE16I_EXT" }, { 0x8D8D, "GL_LUMINANCE_ALPHA16I_EXT" }, { 0x8D8E, "GL_RGBA8I_EXT" }, { 0x8D8F, "GL_RGB8I_EXT" }, { 0x8D90, "GL_ALPHA8I_EXT" }, { 0x8D91, "GL_INTENSITY8I_EXT" }, { 0x8D92, "GL_LUMINANCE8I_EXT" }, { 0x8D93, "GL_LUMINANCE_ALPHA8I_EXT" }, { 0x8D94, "GL_RED_INTEGER_EXT" }, { 0x8D95, "GL_GREEN_INTEGER_EXT" }, { 0x8D96, "GL_BLUE_INTEGER_EXT" }, { 0x8D97, "GL_ALPHA_INTEGER_EXT" }, { 0x8D98, "GL_RGB_INTEGER_EXT" }, { 0x8D99, "GL_RGBA_INTEGER_EXT" }, { 0x8D9A, "GL_BGR_INTEGER_EXT" }, { 0x8D9B, "GL_BGRA_INTEGER_EXT" }, { 0x8D9C, "GL_LUMINANCE_INTEGER_EXT" }, { 0x8D9D, "GL_LUMINANCE_ALPHA_INTEGER_EXT" }, { 0x8D9E, "GL_RGBA_INTEGER_MODE_EXT" }, { 0x8DA7, "GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT" }, { 0x8DA8, "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT" }, { 0x8DA9, "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT" }, { 0x8DAD, "GL_FLOAT_32_UNSIGNED_INT_24_8_REV" }, { 0x8DB9, "GL_FRAMEBUFFER_SRGB_EXT" }, { 0x8DBA, "GL_FRAMEBUFFER_SRGB_CAPABLE_EXT" }, { 0x8DBB, "GL_COMPRESSED_RED_RGTC1" }, { 0x8DBC, "GL_COMPRESSED_SIGNED_RED_RGTC1" }, { 0x8DBD, "GL_COMPRESSED_RG_RGTC2" }, { 0x8DBE, "GL_COMPRESSED_SIGNED_RG_RGTC2" }, { 0x8DC0, "GL_SAMPLER_1D_ARRAY_EXT" }, { 0x8DC1, "GL_SAMPLER_2D_ARRAY_EXT" }, { 0x8DC2, "GL_SAMPLER_BUFFER_EXT" }, { 0x8DC3, "GL_SAMPLER_1D_ARRAY_SHADOW_EXT" }, { 0x8DC4, "GL_SAMPLER_2D_ARRAY_SHADOW_EXT" }, { 0x8DC5, "GL_SAMPLER_CUBE_SHADOW_EXT" }, { 0x8DC6, "GL_UNSIGNED_INT_VEC2_EXT" }, { 0x8DC7, "GL_UNSIGNED_INT_VEC3_EXT" }, { 0x8DC8, "GL_UNSIGNED_INT_VEC4_EXT" }, { 0x8DC9, "GL_INT_SAMPLER_1D_EXT" }, { 0x8DCA, "GL_INT_SAMPLER_2D_EXT" }, { 0x8DCB, "GL_INT_SAMPLER_3D_EXT" }, { 0x8DCC, "GL_INT_SAMPLER_CUBE_EXT" }, { 0x8DCD, "GL_INT_SAMPLER_2D_RECT_EXT" }, { 0x8DCE, "GL_INT_SAMPLER_1D_ARRAY_EXT" }, { 0x8DCF, "GL_INT_SAMPLER_2D_ARRAY_EXT" }, { 0x8DD0, "GL_INT_SAMPLER_BUFFER_EXT" }, { 0x8DD1, "GL_UNSIGNED_INT_SAMPLER_1D_EXT" }, { 0x8DD2, "GL_UNSIGNED_INT_SAMPLER_2D_EXT" }, { 0x8DD3, "GL_UNSIGNED_INT_SAMPLER_3D_EXT" }, { 0x8DD4, "GL_UNSIGNED_INT_SAMPLER_CUBE_EXT" }, { 0x8DD5, "GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT" }, { 0x8DD6, "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT" }, { 0x8DD7, "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT" }, { 0x8DD8, "GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT" }, { 0x8DD9, "GL_GEOMETRY_SHADER_EXT" }, { 0x8DDA, "GL_GEOMETRY_VERTICES_OUT_EXT" }, { 0x8DDB, "GL_GEOMETRY_INPUT_TYPE_EXT" }, { 0x8DDC, "GL_GEOMETRY_OUTPUT_TYPE_EXT" }, { 0x8DDD, "GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT" }, { 0x8DDE, "GL_MAX_VERTEX_VARYING_COMPONENTS_EXT" }, { 0x8DDF, "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT" }, { 0x8DE0, "GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT" }, { 0x8DE1, "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT" }, { 0x8DE2, "GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT" }, { 0x8DE3, "GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT" }, { 0x8DE4, "GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT" }, { 0x8DED, "GL_MAX_BINDABLE_UNIFORM_SIZE_EXT" }, { 0x8DEE, "GL_UNIFORM_BUFFER_EXT" }, { 0x8DEF, "GL_UNIFORM_BUFFER_BINDING_EXT" }, { 0x8E4C, "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT" }, { 0x8E4D, "GL_FIRST_VERTEX_CONVENTION_EXT" }, { 0x8E4E, "GL_LAST_VERTEX_CONVENTION_EXT" }, { 0x8E4F, "GL_PROVOKING_VERTEX_EXT" }, VE( TERMVALUE ) }; const GLMValueEntry_t g_gl_renderers[] = { { 0x00020200, "Generic" }, { 0x00020400, "GenericFloat" }, { 0x00020600, "AppleSW" }, { 0x00021000, "ATIRage128" }, { 0x00021200, "ATIRadeon" }, { 0x00021400, "ATIRagePro" }, { 0x00021600, "ATIRadeon8500" }, { 0x00021800, "ATIRadeon9700" }, { 0x00021900, "ATIRadeonX1000" }, { 0x00021A00, "ATIRadeonX2000" }, { 0x00022000, "NVGeForce2MX" }, { 0x00022200, "NVGeForce3" }, { 0x00022400, "NVGeForceFX" }, { 0x00022600, "NVGeForce8xxx" }, { 0x00023000, "VTBladeXP2" }, { 0x00024000, "Intel900" }, { 0x00024200, "IntelX3100" }, { 0x00040000, "Mesa3DFX" }, VE( TERMVALUE ) }; //=============================================================================== // decode helper funcs char s_glmStrScratch[65536]; int s_glmStrCursor = 0; const char * GLMDecode( GLMThing_t thingtype, unsigned long value ) { const GLMValueEntry_t *table = NULL; //char isflags = 0; switch( thingtype ) { case eD3D_DEVTYPE: table = g_d3d_devtypes; break; case eD3D_FORMAT: table = g_d3d_formats; break; case eD3D_RTYPE: table = g_d3d_rtypes; break; case eD3D_USAGE: table = g_d3d_usages; break; case eD3D_RSTATE: table = g_d3d_rstates; break; case eD3D_SIO: table = g_d3d_opcodes; break; case eD3D_VTXDECLUSAGE: table = g_d3d_vtxdeclusages; break; case eCGL_RENDID: table = g_cgl_rendids; break; case eGL_ERROR: table = g_gl_errors; break; case eGL_ENUM: table = g_gl_enums; break; case eGL_RENDERER: table = g_gl_renderers; break; default: GLMStop(); return "UNKNOWNTYPE"; break; } if (table) { while( table->value != TERMVALUE ) { if (table->value == value) { return table->name; } table++; } } return "UNKNOWN"; } const char *GLMDecodeMask( GLMThing_t kind, unsigned long value ) { // if cursor to scratch buffer is within 1K of EOB, rewind // nobody is going to decode 63K of flag string values in a single call.. // this means that strings returned by this function have a short lifetime.. print them and do not save the pointer.. if ( (sizeof(s_glmStrScratch) - s_glmStrCursor) < 1000 ) { s_glmStrCursor = 0; } char *start = &s_glmStrScratch[ s_glmStrCursor ]; char *dest = start; char first = 1; DWORD mask = static_cast(1L<<31); while(mask) { if (mask & value) { sprintf(dest,"%s%s", (first) ? "" : "|", GLMDecode( kind, value&mask ) ); first = 0; dest += strlen(dest); // leaves dest pointing at the end null } mask >>= 1; } s_glmStrCursor = (dest - s_glmStrScratch) + 1; // +1 so the next decoded flag set doesn't land on the ending null return start; } #undef VE #undef TERMVALUE //=============================================================================== bool GLMDetectOGLP( void ) { bool result = false; #if defined( OSX ) && defined( CGLPROFILER_ENABLE ) GLint forceFlush; CGLError error = CGLGetParameter(CGLGetCurrentContext(), kCGLCPEnableForceFlush, &forceFlush); result = error == 0; if (result) { // enable a breakpoint on color4sv int oglp_bkpt[3] = { kCGLFEglColor4sv, kCGLProfBreakBefore, 1 }; CGLSetOption( kCGLGOEnableBreakpoint, (GLint)oglp_bkpt ); } #endif return result; } // from http://blog.timac.org/?p=190 #ifndef _WIN32 #include #endif #include #ifndef _WIN32 #include #ifdef LINUX #include #else #include #endif #endif // From Technical Q&A QA1361 // Returns true if the current process // is being debugged (either running // under the debugger or has a debugger // attached post facto). bool GLMDetectGDB( void ) // aka AmIBeingDebugged() { #ifdef OSX bool result; int junk; int mib[4]; struct kinfo_proc info; size_t size; // Initialize the flags so that, // if sysctl fails for some bizarre // reason, we get a predictable result. info.kp_proc.p_flag = 0; // Initialize mib, which tells sysctl the info // we want, in this case we're looking for // information about a specific process ID. mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PID; mib[3] = getpid(); // Call sysctl. size = sizeof(info); junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0); assert(junk == 0); // We're being debugged if the P_TRACED // flag is set. result = ( (info.kp_proc.p_flag & P_TRACED) != 0 ); return result; #else return Sys_IsDebuggerPresent(); #endif } static uint g_glmDebugChannelMask = 0; // which output channels are available (can be more than one) static uint g_glmDebugFlavorMask = 0; // which message flavors are enabled for output (can be more than one) uint GLMDetectAvailableChannels( void ) { uint result = 0; // printf is always available (except maybe in release... ?) result |= (1 << ePrintf); // gdb if (GLMDetectGDB()) { result |= (1 << eDebugger); printf("\n############# GDB Detected"); } // oglp if (GLMDetectOGLP()) { result |= (1 << eGLProfiler); printf("\n############# OGLP Detected"); } return result; } static bool g_debugInitDone = false; #if GLMDEBUG // following funcs vanish if GLMDEBUG not set void GLMDebugInitialize( bool forceReinit ) { if ( !g_debugInitDone || forceReinit ) { // detect channels uint channelMask = GLMDetectAvailableChannels(); // see if there are any prohibitions on the commandline // (also add any other desired reasons, release build say).. if ( CommandLine()->FindParm("-noprintconsole") ) { channelMask &= ~(1<FindParm("-noprintdebugger") ) { channelMask &= ~(1<FindParm("-noprintoglp") ) { channelMask &= ~(1<FindParm("-glmspew")) { channelMask = 0; } // set the output channel mask GLMDebugChannelMask( &channelMask ); // if any channels are enabled, enable some output if ( channelMask ) { // start mostly quiet unless the -glmbootspew option is there if ( CommandLine()->FindParm( "-glmbootspew" ) ) { g_glmDebugFlavorMask = 0xFFFFFFFF; } else { g_glmDebugFlavorMask = (1< < // | (1<m_bHave_GL_GREMEDY_string_marker) { gGL->glStringMarkerGREMEDY(0, string); } } } int g_glm_indent = 0; int g_glm_indent_max = 40; // 40 tabs max #ifndef OSX const char *strnstr( const char *haystack, const char *needle, int len ) { return strstr( haystack, needle ); } #endif EGLMDebugFlavor GLMAssessFlavor( char *str ) { EGLMDebugFlavor flavor = eDefaultFlavor; if (strnstr(str, "-D-", 4)) { // debug dump flavor = eDebugDump; } else if (strnstr(str, "-M-", 4)) { // matrix data flavor = eMatrixData; } else if (strnstr(str, "-S-", 4)) { // shader data flavor = eShaderData; } else if (strnstr(str, "-F-", 4)) { // framebuf data flavor = eFrameBufData; } else if (strnstr(str, "-X-", 4)) { // DirectX data flavor = eDXStuff; } else if (strnstr(str, "-A-", 4)) { // allocation data flavor = eAllocations; } else if (strnstr(str, "-Z-", 4)) { // allocation data flavor = eSlowness; } else if (str[0] == '<' || str[0] == '>') { // entry/exit (aka tenure) flavor = eTenure; } else if (strnstr(str, "---", 4)) // note we check four chars worth so you can do >-M- and it will indent and be filterable { // comment flavor = eComment; } return flavor; } void GLMPrintfVA( const char *fmt, va_list vargs ) { // if no channels open, return uint channelMask = GLMDebugChannelMask(); if (!channelMask) return; // if "all flavors" is off, return uint flavorMask = GLMDebugFlavorMask(); if (! ( flavorMask & (1<' - raise indent level after print. // if first char is a '<' - lower indent level before print. char buf[100000]; if (fmt[0] == '<') { GLMIncIndent( -1 ); } memset( buf, '\t', g_glm_indent ); vsprintf( buf+g_glm_indent, fmt, vargs ); GLMStringOut( buf ); if (fmt[0] == '>') { GLMIncIndent( 1 ); } } void GLMPrintf( const char *fmt, ... ) { // if no channels open, return uint channelMask = GLMDebugChannelMask(); if (!channelMask) return; // if "all flavors" is off, return uint flavorMask = GLMDebugFlavorMask(); if (! ( flavorMask & (1<' - raise indent level after print. // if first char is a '<' - lower indent level before print. char buf[64000]; if (str[0] == '<') { GLMIncIndent( -1 ); } memset( buf, '\t', g_glm_indent ); if (strlen(str) < sizeof(buf)-g_glm_indent-1) { strcpy( buf + g_glm_indent, str ); } else { DXABSTRACT_BREAK_ON_ERROR(); } GLMStringOut( buf ); // single string out with indenting if (str[0] == '>') { GLMIncIndent( 1 ); } } void GLMPrintText( const char *str, EGLMDebugFlavor flavor, uint options ) { // if no channels open, return uint channelMask = GLMDebugChannelMask(); if (!channelMask) return; // if "all flavors" is off, return uint flavorMask = GLMDebugFlavorMask(); if (! ( flavorMask & (1<0) { if (g_glm_indent > g_glm_indent_max) { g_glm_indent = g_glm_indent_max; } } else { if (g_glm_indent < 0) { g_glm_indent = 0; } } return g_glm_indent; } int GLMGetIndent( void ) { return g_glm_indent; } void GLMSetIndent( int indent ) { g_glm_indent = indent; } #endif // PIX tracking - you can call these outside of GLMDEBUG=true char sg_pPIXName[128]; ConVar gl_telemetry_gpu( "gl_telemetry_gpu", "0" ); static bool g_bPrevTelemetryGPU; static uint g_nPIXEventIndex; void GLMBeginPIXEvent( const char *str ) { V_strncpy( sg_pPIXName, str, 128 ); #if defined( OSX ) && defined( CGLPROFILER_ENABLE ) CGLSetOption( kCGLGOComment, (GLint)sg_pPIXName ); #endif if ( gGL->m_bHave_GL_GREMEDY_string_marker ) { gGL->glStringMarkerGREMEDY( 0, sg_pPIXName ); } } void GLMEndPIXEvent( void ) { #if defined( OSX ) && defined( CGLPROFILER_ENABLE ) CGLSetOption( kCGLGOComment, (GLint)sg_pPIXName ); #endif if ( gGL->m_bHave_GL_GREMEDY_string_marker ) { gGL->glStringMarkerGREMEDY( 0, sg_pPIXName ); } sg_pPIXName[0] = '\0'; tmLeave( TELEMETRY_LEVEL2 ); } //=============================================================================== // Knob - hash table mapping string names to float values struct GLMKnobKey { char *m_knobName; }; struct GLMKnobValue { float m_value; }; bool LessFunc_GLMKnobKey( const GLMKnobKey &a, const GLMKnobKey &b ) { // Umm, what should this really be? //return strcmp( a.m_knobName, b.m_knobName ); return strcmp( a.m_knobName, b.m_knobName ) < 0; } CUtlMap< GLMKnobKey, GLMKnobValue* > *g_knobMap = NULL; // add some special knob-names that just read mod keys extern "C" uint GetCurrentKeyModifiers( void ); enum ECarbonModKeyIndex { EcmdKeyBit = 8, /* command key down?*/ EshiftKeyBit = 9, /* shift key down?*/ EalphaLockBit = 10, /* alpha lock down?*/ EoptionKeyBit = 11, /* option key down?*/ EcontrolKeyBit = 12 /* control key down?*/ }; enum ECarbonModKeyMask { EcmdKey = 1 << EcmdKeyBit, EshiftKey = 1 << EshiftKeyBit, EalphaLock = 1 << EalphaLockBit, EoptionKey = 1 << EoptionKeyBit, EcontrolKey = 1 << EcontrolKeyBit }; float GLMKnob( char *knobname, float *setvalue ) { #if GLMDEBUG float result = 0.0f; if (!g_knobMap) { g_knobMap = new CUtlMap< GLMKnobKey, GLMKnobValue* >; g_knobMap->SetLessFunc( LessFunc_GLMKnobKey ); } #ifdef OSX uint mods = GetCurrentKeyModifiers(); #else uint mods = 0; #endif // is it a special key name ? if (!strcmp(knobname,"caps-key")) { return (mods & (EalphaLock)) ? 1.0 : 0.0; } else if (!strcmp(knobname,"control-key")) { return (mods & (EcontrolKey)) ? 1.0 : 0.0; } else if (!strcmp(knobname,"shift-key")) { return (mods & (EshiftKey)) ? 1.0 : 0.0; } else if (!strcmp(knobname,"option-key")) { return (mods & (EoptionKey)) ? 1.0 : 0.0; } else { // does the key exist in the map ? GLMKnobKey key; key.m_knobName = knobname; GLMKnobValue *knob = NULL; unsigned short index = g_knobMap->Find( key ); if (index != g_knobMap->InvalidIndex()) { // found it knob = (*g_knobMap)[ index ]; if (setvalue) { knob->m_value = *setvalue; } result = knob->m_value; } else { // need to make a new one knob = new GLMKnobValue; knob->m_value = (setvalue) ? *setvalue : 0.0f; g_knobMap->Insert( key, knob ); } return knob->m_value; } #else // GLM knobs just return 0.0 all the time when no GLMDEBUG return 0.0f; #endif } // for boolean knobs.. float GLMKnobToggle( char *knobname ) { // if not 0.0, make it 0.0 // if 0.0, make it 1.0 float newValue = 0.0; // assume falling edge float curValue = GLMKnob( knobname, NULL ); if (curValue == 0.0) { newValue = 1.0; } return GLMKnob( knobname, &newValue ); } //=============================================================================== // helpers for CGLSetOption - no op if no profiler void GLMProfilerClearTrace( void ) { #if defined( OSX ) && defined( CGLPROFILER_ENABLE ) CGLSetOption( kCGLGOResetFunctionTrace, 0 ); #else Assert( !"impl me" ); #endif } void GLMProfilerEnableTrace( bool enable ) { #if defined( OSX ) && defined( CGLPROFILER_ENABLE ) CGLSetOption( kCGLGOEnableFunctionTrace, enable ? GL_TRUE : GL_FALSE ); #else Assert( !"impl me" ); #endif } // helpers for CGLSetParameter - no op if no profiler void GLMProfilerDumpState( void ) { #if defined( OSX ) && defined( CGLPROFILER_ENABLE ) CGLContextObj curr = CGLGetCurrentContext(); CGLSetParameter( curr, kCGLCPDumpState, (const GLint*)1 ); #else Assert( !"impl me" ); #endif } //=============================================================================== CGLMFileMirror::CGLMFileMirror( char *fullpath ) { m_path = strdup( fullpath ); m_data = (char *)malloc(1); m_size = 0; UpdateStatInfo(); if (m_exists) { ReadFile(); } } CGLMFileMirror::~CGLMFileMirror( ) { if (m_path) { free (m_path); m_path = NULL; } if (m_data) { free (m_data); m_data = NULL; } } bool CGLMFileMirror::HasData( void ) { return (m_size != 0); } // return direct pointer to buffer. Will be invalidated if file is re-loaded or if data is written to void CGLMFileMirror::GetData( char **dataPtr, uint *dataSizePtr ) { *dataPtr = m_data; *dataSizePtr = m_size; } void CGLMFileMirror::SetData( char *data, uint dataSize ) { if (m_data) { free( m_data ); m_data = NULL; } m_size = dataSize; m_data = (char *)malloc( m_size +1 ); m_data[ m_size ] = 0; // extra NULL terminator, no charge memcpy( m_data, data, m_size ); // copy data in WriteFile(); // keep disk copy sync'd } static bool stat_diff( struct stat *a, struct stat *b ) { if (a->st_size != b->st_size) { return true; } #ifdef OSX if (memcmp( &a->st_mtimespec, &b->st_mtimespec, sizeof( struct timespec ) ) ) #else if (memcmp( &a->st_mtime, &b->st_mtime, sizeof( time_t ) ) ) #endif { return true; } return false; } bool CGLMFileMirror::PollForChanges( void ) { // snapshot old stat //bool old_exists = m_exists; struct stat old_stat = m_stat; UpdateStatInfo(); if (m_exists) { if ( stat_diff( &old_stat, &m_stat ) ) { // initial difference detected. continue to poll at 0.1s intervals until it stops changing, then read it. int stablecount = 0; do { ThreadSleep(100000); struct stat last_stat = m_stat; UpdateStatInfo(); if (stat_diff( &last_stat, &m_stat )) { stablecount = 0; } else { stablecount++; } } while(stablecount<3); // changes have settled down, now re-read it ReadFile(); return true; } else { return false; // no change } } else { // file does not exist. remake it. not considered to be a change. WriteFile(); return false; } } void CGLMFileMirror::UpdateStatInfo( void ) { // stat the path struct stat newstat; memset (&newstat, 0, sizeof(newstat) ); int result = stat( m_path, &newstat ); if (!result) { m_exists = true; m_stat = newstat; } else { m_exists = false; memset( &m_stat, 0, sizeof( m_stat ) ); } } void CGLMFileMirror::ReadFile( void ) { // unconditional - we discard any old buffer, make a new one, UpdateStatInfo(); if (m_data) { free( m_data ); m_data = NULL; } if (m_exists) { FILE *infile = fopen( m_path, "rb" ); if (infile) { // get size from stat m_size = m_stat.st_size; m_data = (char *)malloc( m_size +1 ); m_data[ m_size ] = 0; // extra NULL terminator, no charge fread( m_data, 1, m_size, infile ); fclose( infile ); } else { GLMDebugger(); // ouch } } else { // hmmmmmm m_data = (char *)malloc(1); m_data[0] = 0; m_size = 0; } } void CGLMFileMirror::WriteFile( void ) { FILE *outfile = fopen( m_path, "wb" ); if (outfile) { fwrite( m_data, 1, m_size, outfile ); fclose( outfile ); UpdateStatInfo(); // sets m_stat and m_exists } else { GLMDebugger(); // ouch } } void CGLMFileMirror::OpenInEditor( bool foreground ) { char temp[64000]; // pass -b if no desire to bring editor to foreground sprintf(temp,"/usr/bin/bbedit %s %s", foreground ? "" : "-b", m_path ); system( temp ); } CGLMEditableTextItem::CGLMEditableTextItem( char *text, uint size, bool forceOverwrite, char *prefix, char *suffix ) { // clone input text (exact size copy) m_origSize = size; m_origText = (char *)malloc( m_origSize ); memcpy( m_origText, text, m_origSize ); // null out munged form til we generate it m_mungedSize = 0; m_mungedText = NULL; // null out mirror until we create it m_mirrorBaseName = NULL; m_mirrorFullPath = NULL; m_mirror = NULL; GenHashOfOrigText(); // will fill out m_origDigest GenMungedText( false ); GenBaseNameAndFullPath( prefix, suffix ); // figure out where the mirror will go if (!strcmp(m_mirrorBaseName, "96c7e9d2faf76b1148f7274afd684d4b.fsh")) { printf("\nhello there\n"); } // make the mirror from the filename. // see if there was any content on disk // if so, honor that content *unless* the force-option is set. m_mirror = new CGLMFileMirror( m_mirrorFullPath ); // the logic is simple. // the only time we will choose the copy on disk, is if // a - forceOverwrite is false // AND b - the copy on disk is bigger than 10 bytes. bool replaceDiskCopy = true; char *mirrorData = NULL; uint mirrorSize = 0; if (!forceOverwrite) { if (m_mirror->HasData()) { // peek at it, and use it if it is more than some minimum number of bytes. m_mirror->GetData( &mirrorData, &mirrorSize ); if (mirrorSize > 10) { replaceDiskCopy = false; } } } if (replaceDiskCopy) { // push our generated data to the mirror - disk copy is overwritten m_mirror->SetData( m_mungedText, m_mungedSize ); } else { GenMungedText( true ); } } CGLMEditableTextItem::~CGLMEditableTextItem( ) { if (m_origText) { free (m_origText); } if (m_mungedText) { free (m_mungedText); } if (m_mirrorBaseName) { free (m_mirrorBaseName); } if (m_mirrorFullPath) { free (m_mirrorFullPath); } if (m_mirror) { free( m_mirror ); } } bool CGLMEditableTextItem::HasData( void ) { return m_mirror->HasData(); } bool CGLMEditableTextItem::PollForChanges( void ) { bool changed = m_mirror->PollForChanges(); if (changed) { // re-gen munged text from mirror (means "copy") GenMungedText( true ); } return changed; } void CGLMEditableTextItem::GetCurrentText( char **textOut, uint *sizeOut ) { if (!m_mungedText) GLMDebugger(); *textOut = m_mungedText; *sizeOut = m_mungedSize; } void CGLMEditableTextItem::OpenInEditor( bool foreground ) { m_mirror->OpenInEditor( foreground ); } void CGLMEditableTextItem::GenHashOfOrigText( void ) { MD5Context_t md5ctx; MD5Init( &md5ctx ); MD5Update( &md5ctx, (unsigned char*)m_origText, m_origSize ); MD5Final( m_origDigest, &md5ctx ); } void CGLMEditableTextItem::GenBaseNameAndFullPath( char *prefix, char *suffix ) { // base name is hash digest in hex, plus the suffix. char temp[5000]; Q_binarytohex( m_origDigest, sizeof(m_origDigest), temp, sizeof( temp ) ); if (suffix) { strcat( temp, suffix ); } if (m_mirrorBaseName) free(m_mirrorBaseName); m_mirrorBaseName = strdup( temp ); sprintf( temp, "%s%s", prefix, m_mirrorBaseName ); if (m_mirrorFullPath) free(m_mirrorFullPath); m_mirrorFullPath = strdup( temp ); } void CGLMEditableTextItem::GenMungedText( bool fromMirror ) { if (fromMirror) { // just import the text as is from the mirror file. char *mirrorData = NULL; uint mirrorSize = 0; if (m_mirror->HasData()) { // peek at it, and use it if it is more than some minimum number of bytes. m_mirror->GetData( &mirrorData, &mirrorSize ); if (m_mungedText) { free( m_mungedText ); m_mungedText = NULL; } m_mungedText = (char *)malloc( mirrorSize+1 ); m_mungedText[ mirrorSize ] = 0; memcpy( m_mungedText, mirrorData, mirrorSize ); m_mungedSize = mirrorSize; } else { GLMDebugger(); } } else { #if 1 // we don't actually clone/munge any more. if (m_mungedText) { free( m_mungedText ); m_mungedText = NULL; } m_mungedText = (char *)malloc( m_origSize+1 ); m_mungedText[ m_origSize ] = 0; memcpy( m_mungedText, m_origText, m_origSize ); m_mungedSize = m_origSize; #else // take pure 'orig' text that came in from the engine, and clone it // do not clone the first line char temp[100000]; char *dst = temp; char *lim = &temp[ sizeof(temp) ]; // zero temp memset( temp, 0, sizeof(temp) ); // write orig text to temp if (m_origSize >= (sizeof(temp)/2) ) { GLMDebugger(); } memcpy( dst, m_origText, m_origSize ); dst += m_origSize; // add a newline if the last character wasn't if ( (*(dst-1)) != '\n' ) { *dst++ = '\n'; } // walk orig text again and copy it over, with these caveats // don't copy the first line // insert a # before all the other lines. char *src = temp; // walk to end of first line char *firstNewline = strchr( src, '\n' ); if (!firstNewline) { GLMDebugger(); } else { // advance 'src' to that newline- we're not copying the !! line src = firstNewline; } // now walk the rest - insert a # after each newline while( (dst < lim) && ((src-temp) < m_origSize) ) { switch( *src ) { case '\n': *dst++ = *src++; *dst++ = '#'; break; default: *dst++ = *src++; } } if (dst >= lim) { GLMDebugger(); } // final newline *dst++ = '\n'; // copyout if (m_mungedText) { free( m_mungedText ); m_mungedText = NULL; } m_mungedSize = dst - temp; m_mungedText = (char *)malloc( m_mungedSize ); memcpy( m_mungedText, temp, m_mungedSize ); #endif } } //=============================================================================== // class for cracking multi-part text blobs // sections are demarcated by beginning-of-line markers submitted in a table by the caller // typically // asm flavors have first-line rules so we use those tags as is // !!ARBvp (etc) // !!ARBfp (etc) // //!!GLSLF // slashes required // //!GLSLV // maybe also introduce "present but disabled" markers like these // -!!ARBvp (etc) // -!!ARBfp (etc) // -//!!GLSLF // -//!GLSLV // resolved. there is no default section for text that doesn't have a marker in front of it. mark it or miss it. CGLMTextSectioner::CGLMTextSectioner( char *text, int textLength, const char **markers ) { // find lines // for each line, see if it starts with a marker // if so, open a new section based at that line GLMTextSection *curSection = NULL; // no current section until we see a marker char *cursor = text; char *textLimit = text+textLength; int foundMarker; const char **markerCursor; while( cursor < textLimit ) { // top of loop. cursor points to start of a line. // find the end of the line and keep that handy. char *eol = strchr( cursor, '\n' ); int charsInLine = (eol) ? (eol-cursor)+1 : strlen(cursor); //see if any of the marker strings is located here. foundMarker = -1; markerCursor = markers; while( (foundMarker<0) && (*markerCursor!=NULL) ) { // see if the n'th marker is a hit int markerLen = strlen(*markerCursor); if (!strncmp( cursor, *markerCursor, markerLen ) ) { // hit foundMarker = markerCursor - markers; } markerCursor++; } // outcome is either "marker spotted" or "no". // if marker seen, open new section using that marker. // else, grow active section if underway. // then, move cursor to next line. if (foundMarker >= 0) { // found marker. start new section. // no need to do anything special with prior section - it was up to date before seeing this marker. int index = m_sectionTable.AddToTail(); curSection = &m_sectionTable[ index ]; curSection->m_markerIndex = foundMarker; curSection->m_textOffset = cursor - text; // text includes the marker curSection->m_textLength = charsInLine; // this line goes in the tally, later lines add to it } else { // add this line to current section if live if (curSection) { curSection->m_textLength += charsInLine; } } cursor += charsInLine; } } CGLMTextSectioner::~CGLMTextSectioner( ) { // not much to do. } int CGLMTextSectioner::Count( void ) { return m_sectionTable.Count(); } void CGLMTextSectioner::GetSection( int index, uint *offsetOut, uint *lengthOut, int *markerIndexOut ) { Assert( index < m_sectionTable.Count() ); GLMTextSection *section = &m_sectionTable[ index ]; *offsetOut = section->m_textOffset; *lengthOut = section->m_textLength; *markerIndexOut = section->m_markerIndex; } //=============================================================================== // how to make a compiled-in font: // a. type in a matrix of characters in your fav editor // b. take a screen shot of the characters (128x128 pixels in this case) // c. export as TIFF raw. // d. hex dump it // e. column-copy just the hex data // f. find and replace: chop out all the spaces and line feeds, change FFFFFF and 000000 to your marker chars of choice. // g. wrap each line with quotes and a comma. unsigned char g_glmDebugFontMap[ 128 * 128 ] = { " * " " * * * * * " " * * * * * *** * * ** * * * * * " " * * * ***** * * * * * * * * * * * * * * * * " " * * * * * * * * * * * * * *** * * " " * ***** *** * * * * * * * ***** ***** * " " * * * * * * * * * * * * * * * " " * * * * * * * * * * * ** ** * " " * *** * * ** * * * ** ** * " " * * * * * " " * " " " " " " *** * *** *** * ***** *** ***** *** *** * * *** " "* * ** * * * * ** * * * * * * * ** ** * * * * " "* ** * * * * * **** **** * * * * * ** ** * ***** * * " "* * * * * ** * * * * * * *** * * * * * " "** * * * * ***** * * * * * * **** * ***** * * " "* * * * * * * * * * * * * * * ** ** * * " " *** * ***** *** * *** *** * *** *** ** ** * * * " " * " " * " " " " *** " "* * *** **** *** **** ***** ***** *** * * * * * * * * * * * *** " "* * * * * * * * * * * * * * * * * * * * * ** ** ** * * * " "* * * * * * * * * * * * * * * * * * * * * * * * * * * * " "*** * ***** **** * * * **** **** * ** ***** * * ** * * * * ** * * " "* ** * * * * * * * * * * * * * * * * * * * * * * * * * " "* * * * * * * * * * * * * * * * * * * * * * * * * * * " "* * * * **** *** **** ***** * *** * * * *** * * ***** * * * * *** " " *** " " " " * " " ** * ** * " "**** *** **** *** ***** * * * * * * * * * * ***** * * * * * " "* * * * * * * * * * * * * * * * * * * * * * * * * " "* * * * * * * * * * * * * * * * * * * * * " "**** * * **** *** * * * * * * * * * * * * * * " "* * * * * * * * * * * * * * * * * * * * " "* * * * * * * * * * * ** ** * * * * * * * " "* *** * * *** * *** * * * * * * ***** * * * ****** " " * ** * ** " " " " " " * " " * * * ** * * * * * " " * * * * * * * " " **** **** *** **** *** *** **** **** * * * * * **** * ** *** " " * * * * * * * * * * * * * * * * * * * * * * * ** * * * " " * * * * * * * ***** * * * * * * * *** * * * * * * * * " " * ** * * * * * * * * * * * * * * * * * * * * * * * " " ** * **** **** **** **** * **** * * * * * * ** * * * * * *** " " * * " " *** ** " " * " " ** * ** " " * * * * ** * " " * * * * * ** *** " "**** **** * ** **** **** * * * * * * * * * * * ***** * * * ***** " "* * * * ** * * * * * * * * * * * * * * * ** * ** ***** " "* * * * * *** * * * * * * * * * * * * * * * ***** " "* * * * * * * * ** * * * * * * * * * * * * * *** " "**** **** * **** ** ** * * * * * * **** ***** * * * " "* * * ** * ** " "* * *** * " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " };