You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4690 lines
148 KiB
4690 lines
148 KiB
//========= 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 "togl/rendermechanism.h" |
|
|
|
#include "tier0/icommandline.h" |
|
#include "tier1/utlhash.h" |
|
#include "tier1/utlmap.h" |
|
#include "tier0/vprof.h" |
|
|
|
#ifdef OSX |
|
#include <OpenGL/OpenGL.h> |
|
#ifdef CGLPROFILER_ENABLE |
|
#include <OpenGL/CGLProfilerFunctionEnum.h> |
|
#endif |
|
#endif |
|
|
|
#include "tier0/valve_minmax_off.h" |
|
#include <algorithm> |
|
|
|
// 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<DWORD>(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 <stdbool.h> |
|
#endif |
|
#include <sys/types.h> |
|
#ifndef _WIN32 |
|
#include <unistd.h> |
|
#ifdef LINUX |
|
#include <linux/sysctl.h> |
|
#else |
|
#include <sys/sysctl.h> |
|
#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<<ePrintf); |
|
} |
|
|
|
if ( CommandLine()->FindParm("-noprintdebugger") ) |
|
{ |
|
channelMask &= ~(1<<eDebugger); |
|
} |
|
|
|
if ( CommandLine()->FindParm("-noprintoglp") ) |
|
{ |
|
channelMask &= ~(1<<eGLProfiler); |
|
} |
|
|
|
// finally, disable all of them if commandline did not say "enable spew" |
|
if (!CommandLine()->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<<eAllFlavors) |
|
| (1<<eDebugDump) // -D- stuff |
|
// | (1<<eFrameBufData) // -F- |
|
// | (1<<eDXStuff) // -X- |
|
// | (1<<eTenure) // > < |
|
// | (1<<eAllocations) // -A- |
|
| (1<<eSlowness) // -Z- |
|
| (1<<eDefaultFlavor); // adjust to suit |
|
} |
|
} |
|
else |
|
{ |
|
g_glmDebugFlavorMask = 0; |
|
} |
|
} |
|
} |
|
|
|
uint GLMDebugChannelMask( uint *newValue ) |
|
{ |
|
if (newValue) |
|
{ |
|
g_glmDebugChannelMask = *newValue; |
|
} |
|
|
|
uint result = g_glmDebugChannelMask; |
|
|
|
// leave space for any override / mute mechanism we might want to inject here |
|
|
|
return result; |
|
} |
|
|
|
uint GLMDebugFlavorMask( uint *newValue ) |
|
{ |
|
if (newValue) |
|
{ |
|
g_glmDebugFlavorMask = *newValue; |
|
} |
|
|
|
uint result = g_glmDebugFlavorMask; |
|
|
|
// leave space for any override / mute mechanism we might want to inject here |
|
|
|
return result; |
|
} |
|
|
|
#endif |
|
|
|
//=============================================================================== |
|
void GLMEnableTrace( bool on ) |
|
{ |
|
#if GLMDEBUG |
|
#if defined( OSX ) && defined( CGLPROFILER_ENABLE ) |
|
if ( GLMDebugChannelMask() & (1<<eGLProfiler) ) |
|
{ |
|
CGLSetOption(kCGLGOEnableFunctionTrace, on ? GL_TRUE : GL_FALSE ); |
|
} |
|
#endif |
|
#endif |
|
} |
|
|
|
//=============================================================================== |
|
|
|
#if GLMDEBUG |
|
// following funcs vanish if GLMDEBUG not set |
|
|
|
void GLMStringOut( char *string ) |
|
{ |
|
if ( GLMDebugChannelMask() & ( (1<<ePrintf) | (1<<eDebugger) ) ) |
|
{ |
|
#ifdef WIN32 |
|
OutputDebugStringA( string ); |
|
OutputDebugStringA( "\n"); |
|
#else |
|
puts( string ); |
|
#endif |
|
} |
|
|
|
#if defined( OSX ) && defined( CGLPROFILER_ENABLE ) |
|
if ( GLMDebugChannelMask() & (1<<eGLProfiler) ) |
|
{ |
|
CGLSetOption( kCGLGOComment, (GLint)string ); |
|
} |
|
#endif |
|
|
|
if ( GLMDebugChannelMask() & (1<<eGLProfiler) ) |
|
{ |
|
if (gGL->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<<eAllFlavors) ) ) |
|
return; |
|
|
|
// characterize the flavor of the string |
|
// if flavor hits against the flavor mask, print it |
|
EGLMDebugFlavor flavor = GLMAssessFlavor( (char *)fmt ); |
|
if ( !(flavorMask & (1<<flavor)) ) |
|
return; |
|
|
|
// print the formatted string, with indenting |
|
// if first char is a '>' - 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<<eAllFlavors) ) ) |
|
return; |
|
|
|
va_list vargs; |
|
va_start(vargs, fmt); |
|
GLMPrintfVA( fmt, vargs ); |
|
va_end( vargs ); |
|
} |
|
|
|
void GLMPrintStr( const char *str, EGLMDebugFlavor flavor ) // will indent |
|
{ |
|
// if no channels open, return |
|
uint channelMask = GLMDebugChannelMask(); |
|
if (!channelMask) |
|
return; |
|
|
|
// if "all flavors" is off, return |
|
uint flavorMask = GLMDebugFlavorMask(); |
|
if (! ( flavorMask & (1<<eAllFlavors) ) ) |
|
return; |
|
|
|
// if flavor argument hits against the flavor mask, print it |
|
if ( !(flavorMask & (1<<flavor)) ) |
|
return; |
|
|
|
// just print the plain string, with indenting |
|
// if first char is a '>' - 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<<eAllFlavors) ) ) |
|
return; |
|
|
|
// if flavor argument hits against the flavor mask, print it |
|
if ( !(flavorMask & (1<<flavor)) ) |
|
return; |
|
|
|
char buf[64000]; |
|
char lineout[64000]; |
|
int linenum = 1; |
|
|
|
V_strncpy( buf, str, sizeof(buf) ); |
|
|
|
// walk the text and treat each newline as an indentation opportunity.. |
|
const char *mark = buf; |
|
const char *end = mark + strlen(buf); |
|
//const char *next = NULL; |
|
|
|
while(mark < end) |
|
{ |
|
// starting at mark, see if there is a newline between there and end |
|
char *next = (char*)strchr( mark, '\n' ); |
|
const char *printfrom = mark; |
|
if (next) |
|
{ |
|
// print text from mark up through next. move next to char after newline. |
|
*next = 0; |
|
mark = next+1; |
|
} |
|
else |
|
{ |
|
// print all text after mark and stop |
|
mark = end; |
|
} |
|
if (options & GLMPRINTTEXT_NUMBEREDLINES) |
|
{ |
|
sprintf( lineout, "%-5d| %s", linenum, printfrom ); |
|
GLMPrintStr( lineout, flavor ); |
|
linenum++; |
|
} |
|
else |
|
{ |
|
GLMPrintStr( printfrom, flavor ); |
|
} |
|
} |
|
} |
|
|
|
int GLMIncIndent( int indentDelta ) |
|
{ |
|
g_glm_indent += indentDelta; |
|
|
|
if (indentDelta>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]; |
|
|
|
|
|
#ifndef OSX |
|
ConVar gl_telemetry_gpu_pipeline_flushing( "gl_telemetry_gpu_pipeline_flushing", "0" ); |
|
|
|
class CGPUTimestampManager |
|
{ |
|
CGPUTimestampManager( const CGPUTimestampManager & ); |
|
CGPUTimestampManager& operator= ( CGPUTimestampManager & ); |
|
|
|
public: |
|
CGPUTimestampManager() : |
|
m_bInitialized( false ), |
|
m_nCurFrame( 0 ), |
|
m_flGPUToCPUOffsetInS( 0 ), |
|
m_flGPUToS( 0 ), |
|
m_flRdtscToS( 0 ), |
|
m_flSToRdtsc( 0 ), |
|
m_nFreeQueryPoolSize( 0 ), |
|
m_nOutstandingQueriesHead( 0 ), |
|
m_nOutstandingQueriesTail( 0 ), |
|
m_nNumOutstandingQueryZones( 0 ), |
|
m_nQueryZoneStackSize( 0 ), |
|
m_nNumFinishedZones( 0 ), |
|
m_nTotalSpanWorkCount( 0 ) |
|
{ |
|
memset( m_FreeQueryPool, 0, sizeof( m_FreeQueryPool ) ) ; |
|
memset( m_QueryZoneStack, 0, sizeof( m_QueryZoneStack ) ); |
|
memset( m_OutstandingQueryZones, 0, sizeof( m_OutstandingQueryZones ) ); |
|
memset( m_FinishedZones, 0, sizeof( m_FinishedZones ) ); |
|
} |
|
|
|
~CGPUTimestampManager() |
|
{ |
|
Deinit(); |
|
} |
|
|
|
inline bool IsInitialized() const { return m_bInitialized; } |
|
inline uint GetCurFrame() const { return m_nCurFrame; } |
|
|
|
void Init() |
|
{ |
|
Deinit(); |
|
|
|
memset( m_FreeQueryPool, 0, sizeof( m_FreeQueryPool ) ) ; |
|
memset( m_QueryZoneStack, 0, sizeof( m_QueryZoneStack ) ); |
|
memset( m_OutstandingQueryZones, 0, sizeof( m_OutstandingQueryZones ) ); |
|
memset( m_FinishedZones, 0, sizeof( m_FinishedZones ) ); |
|
|
|
InitRdtsc(); |
|
|
|
m_nCurFrame = 0; |
|
|
|
gGL->glGenQueries( cFreeQueryPoolSize, m_FreeQueryPool ); |
|
m_nFreeQueryPoolSize = cFreeQueryPoolSize; |
|
|
|
m_nOutstandingQueriesHead = 0; |
|
m_nOutstandingQueriesTail = 0; |
|
m_nNumOutstandingQueryZones = 0; |
|
|
|
m_nQueryZoneStackSize = 0; |
|
m_nNumFinishedZones = 0; |
|
|
|
m_bInitialized = true; |
|
|
|
m_nTotalSpanWorkCount = 0; |
|
|
|
Calibrate(); |
|
} |
|
|
|
void Calibrate() |
|
{ |
|
if ( !m_bInitialized ) |
|
return; |
|
|
|
PipelineFlush(); |
|
|
|
m_flGPUToS = 1.0 / 1000000000.0; |
|
|
|
//0.99997541250006794; |
|
//0.99997530000006662; |
|
// Correction factor to prevent excessive drift, only calibrated on my system, we need a better way of computing/recording this. |
|
double flGPURatio = 0.99997425000007034000; |
|
|
|
const uint NT = 1; |
|
for ( uint nTrial = 0; nTrial < NT; nTrial++ ) |
|
{ |
|
const uint R = 16; |
|
double flClockOffsetsInS[R]; |
|
for ( uint q = 0; q < R; q++) |
|
{ |
|
uint64 nBestTotalCPUTimestamp = (uint64)-1; |
|
uint64 nBestCPUTimestamp = 0; |
|
GLuint64 nBestGPUTimestamp = 0; |
|
|
|
for ( uint i = 0; i < 10; i++) |
|
{ |
|
const uint64 nStartCPUTimestamp = Plat_Rdtsc(); |
|
|
|
gGL->glQueryCounter( m_FreeQueryPool[0], GL_TIMESTAMP); |
|
PipelineFlush(); |
|
|
|
const uint64 nEndCPUTimestamp = Plat_Rdtsc(); |
|
|
|
GLint nAvailable; |
|
do |
|
{ |
|
gGL->glGetQueryObjectiv( m_FreeQueryPool[0], GL_QUERY_RESULT_AVAILABLE, &nAvailable ); |
|
} while ( !nAvailable ); |
|
|
|
GLuint64 nGPUTimestamp; |
|
gGL->glGetQueryObjectui64v( m_FreeQueryPool[0], GL_QUERY_RESULT, &nGPUTimestamp ); |
|
|
|
const uint64 nTotalCPUTimestamp = nEndCPUTimestamp - nStartCPUTimestamp; |
|
if ( nTotalCPUTimestamp < nBestTotalCPUTimestamp ) |
|
{ |
|
nBestTotalCPUTimestamp = nTotalCPUTimestamp; |
|
nBestCPUTimestamp = nStartCPUTimestamp; |
|
nBestGPUTimestamp = nGPUTimestamp; |
|
} |
|
} |
|
|
|
double flCPUTimestampTimeInSeconds = nBestCPUTimestamp * m_flRdtscToS; |
|
double flGPUTimestampTimeInSeconds = nBestGPUTimestamp * m_flGPUToS * flGPURatio; |
|
|
|
flClockOffsetsInS[q] = flCPUTimestampTimeInSeconds - flGPUTimestampTimeInSeconds; |
|
|
|
ThreadSleep(100); |
|
|
|
DbgPrintf("%f %f %1.20f\n", flCPUTimestampTimeInSeconds, flGPUTimestampTimeInSeconds, flClockOffsetsInS[q] ); |
|
} |
|
|
|
m_flGPUToCPUOffsetInS = 0.0f; |
|
for ( uint i = 0; i < R; i++ ) |
|
m_flGPUToCPUOffsetInS += flClockOffsetsInS[i]; |
|
m_flGPUToCPUOffsetInS /= R; |
|
|
|
if ( NT > 1 ) |
|
{ |
|
DbgPrintf("------- Ratio: %2.20f\n", flGPURatio ); |
|
|
|
double flDelta = flClockOffsetsInS[0] - flClockOffsetsInS[R - 1]; |
|
|
|
DbgPrintf("------- %1.20f\n", flDelta ); |
|
|
|
#if 1 |
|
if ( flDelta < 0.0000005f ) |
|
{ |
|
flGPURatio += .000000125f; |
|
} |
|
else if ( flDelta > 0.0000005f ) |
|
{ |
|
flGPURatio -= .000000125f; |
|
} |
|
#else |
|
if ( flDelta < 0.0000005f ) |
|
{ |
|
flGPURatio += .0000000125f; |
|
} |
|
else if ( flDelta > 0.0000005f ) |
|
{ |
|
flGPURatio -= .0000000125f; |
|
} |
|
#endif |
|
} |
|
} |
|
|
|
m_flGPUToS *= flGPURatio; |
|
|
|
#if 0 |
|
// dump drift over time to debugger output |
|
double flLatency = 0; |
|
for ( ; ; ) |
|
{ |
|
// test |
|
const uint64 nStartCPUTime = Plat_Rdtsc(); |
|
|
|
gGL->glQueryCounter( m_FreeQueryPool[0], GL_TIMESTAMP); |
|
|
|
PipelineFlush(); |
|
|
|
GLint nAvailable; |
|
do |
|
{ |
|
gGL->glGetQueryObjectiv( m_FreeQueryPool[0], GL_QUERY_RESULT_AVAILABLE, &nAvailable ); |
|
} while ( !nAvailable ); |
|
|
|
GLuint64 nGPUTime; |
|
gGL->glGetQueryObjectui64v( m_FreeQueryPool[0], GL_QUERY_RESULT, &nGPUTime ); |
|
|
|
double flStartGPUTime = ( ( nGPUTime * m_flGPUToS ) + m_flGPUToCPUOffsetInS ); |
|
|
|
flLatency = flStartGPUTime - nStartCPUTime * m_flRdtscToS; |
|
DbgPrintf("%f\n", flLatency ); |
|
} |
|
#endif |
|
} |
|
|
|
void Deinit() |
|
{ |
|
if ( !m_bInitialized ) |
|
return; |
|
|
|
if ( m_nFreeQueryPoolSize ) |
|
{ |
|
gGL->glDeleteQueries( m_nFreeQueryPoolSize, m_FreeQueryPool ); |
|
} |
|
m_nFreeQueryPoolSize = 0; |
|
|
|
for ( uint i = 0; i < m_nNumOutstandingQueryZones; i++ ) |
|
{ |
|
QueryZone_t &query = m_OutstandingQueryZones[ ( m_nOutstandingQueriesHead + i ) % cMaxQueryZones ]; |
|
if ( query.m_nBeginQuery ) |
|
{ |
|
gGL->glDeleteQueries( 1, &query.m_nBeginQuery ); |
|
} |
|
if ( query.m_nEndQuery ) |
|
{ |
|
gGL->glDeleteQueries( 1, &query.m_nEndQuery ); |
|
} |
|
} |
|
m_nOutstandingQueriesHead = 0; |
|
m_nOutstandingQueriesTail = 0; |
|
m_nNumOutstandingQueryZones = 0; |
|
|
|
for ( uint i = 0; i < m_nQueryZoneStackSize; i++ ) |
|
{ |
|
QueryZone_t &query = m_QueryZoneStack[i]; |
|
if ( query.m_nBeginQuery ) |
|
{ |
|
gGL->glDeleteQueries( 1, &query.m_nBeginQuery ); |
|
} |
|
if ( query.m_nEndQuery ) |
|
{ |
|
gGL->glDeleteQueries( 1, &query.m_nEndQuery ); |
|
} |
|
} |
|
m_nQueryZoneStackSize = 0; |
|
|
|
m_flGPUToCPUOffsetInS = 0; |
|
m_flGPUToS = 0; |
|
m_flRdtscToS = 0; |
|
m_flSToRdtsc = 0; |
|
|
|
m_bInitialized = false; |
|
} |
|
|
|
// pName is assumed to be a telemetry dynamic string! |
|
void BeginZone( const char *pName ) |
|
{ |
|
if ( !m_bInitialized ) |
|
return; |
|
|
|
if ( m_nQueryZoneStackSize >= cMaxQueryZoneStackSize ) |
|
{ |
|
Panic( "Increase cMaxQueryZoneStackSize!" ); |
|
} |
|
|
|
QueryZone_t &zone = m_QueryZoneStack[m_nQueryZoneStackSize]; |
|
|
|
zone.m_pName = pName; |
|
|
|
zone.m_nBeginQuery = AllocQueryHandle(); |
|
zone.m_nEndQuery = 0; |
|
zone.m_nStackLevel = m_nQueryZoneStackSize; |
|
|
|
zone.m_nTotalGPUWorkCount = g_nTotalDrawsOrClears; |
|
#if GL_TELEMETRY_GPU_ZONES |
|
zone.m_nTotalGPUWorkCount += g_TelemetryGPUStats.GetTotal(); |
|
#endif |
|
|
|
gGL->glQueryCounter( m_QueryZoneStack[m_nQueryZoneStackSize].m_nBeginQuery, GL_TIMESTAMP ); |
|
|
|
m_nQueryZoneStackSize++; |
|
} |
|
|
|
void EndZone() |
|
{ |
|
if ( !m_bInitialized ) |
|
return; |
|
|
|
if ( ( !m_nQueryZoneStackSize ) || ( m_nNumOutstandingQueryZones == cMaxQueryZones ) ) |
|
{ |
|
Panic( "Query zone error!" ); |
|
} |
|
|
|
m_nQueryZoneStackSize--; |
|
|
|
uint nCurGPUWorkCount = g_nTotalDrawsOrClears; |
|
#if GL_TELEMETRY_GPU_ZONES |
|
nCurGPUWorkCount += g_TelemetryGPUStats.GetTotal(); |
|
#endif |
|
|
|
uint nTotalDraws = nCurGPUWorkCount - m_QueryZoneStack[m_nQueryZoneStackSize].m_nTotalGPUWorkCount; |
|
|
|
m_QueryZoneStack[m_nQueryZoneStackSize].m_nEndQuery = AllocQueryHandle(); |
|
gGL->glQueryCounter( m_QueryZoneStack[m_nQueryZoneStackSize].m_nEndQuery, GL_TIMESTAMP ); |
|
m_QueryZoneStack[m_nQueryZoneStackSize].m_nTotalGPUWorkCount = nTotalDraws; |
|
|
|
m_OutstandingQueryZones[m_nOutstandingQueriesHead] = m_QueryZoneStack[m_nQueryZoneStackSize]; |
|
m_nOutstandingQueriesHead = ( m_nOutstandingQueriesHead + 1 ) % cMaxQueryZones; |
|
m_nNumOutstandingQueryZones++; |
|
|
|
COMPILE_TIME_ASSERT( ( int )cMaxQueryZones > ( int )cMaxQueryZoneStackSize ); |
|
if ( m_nNumOutstandingQueryZones >= ( cMaxQueryZones - cMaxQueryZoneStackSize ) ) |
|
{ |
|
tmMessage( TELEMETRY_LEVEL2, TMMF_ICON_NOTE | TMMF_SEVERITY_WARNING, "CGPUTimestampManager::EndZone: Too many outstanding query zones - forcing a pipeline flush! This is probably expensive." ); |
|
|
|
FlushOutstandingQueries( true ); |
|
} |
|
|
|
if ( gl_telemetry_gpu_pipeline_flushing.GetBool() ) |
|
{ |
|
PipelineFlush(); |
|
} |
|
} |
|
|
|
void Tick() |
|
{ |
|
m_nCurFrame++; |
|
|
|
if ( !m_bInitialized ) |
|
return; |
|
|
|
if ( m_nQueryZoneStackSize > 0 ) |
|
{ |
|
Panic( "Zone stack is not empty!" ); |
|
} |
|
|
|
FlushOutstandingQueries( false ); |
|
|
|
tmMessage( TELEMETRY_LEVEL2, 0, "Total PIX timespan GPU work count: %u", m_nTotalSpanWorkCount ); |
|
|
|
m_nTotalSpanWorkCount = 0; |
|
} |
|
|
|
void FlushOutstandingQueries( bool bForce ) |
|
{ |
|
tmZone( TELEMETRY_LEVEL2, 0, "FlushOutstandingQueries: %u", m_nNumOutstandingQueryZones ); |
|
|
|
if ( bForce ) |
|
{ |
|
PipelineFlush(); |
|
} |
|
|
|
while ( m_nNumOutstandingQueryZones ) |
|
{ |
|
QueryZone_t &zone = m_OutstandingQueryZones[m_nOutstandingQueriesTail]; |
|
|
|
GLint nEndAvailable = 0; |
|
do |
|
{ |
|
gGL->glGetQueryObjectiv( zone.m_nEndQuery, GL_QUERY_RESULT_AVAILABLE, &nEndAvailable ); |
|
|
|
} while ( ( bForce ) && ( nEndAvailable == 0 ) ); |
|
|
|
if ( !nEndAvailable ) |
|
{ |
|
if ( bForce ) |
|
{ |
|
Panic( "Query results not available after a full pipeline flush!" ); |
|
} |
|
break; |
|
} |
|
|
|
GLuint64 nBeginGPUTime, nEndGPUTime; |
|
gGL->glGetQueryObjectui64v( zone.m_nBeginQuery, GL_QUERY_RESULT, &nBeginGPUTime ); |
|
gGL->glGetQueryObjectui64v( zone.m_nEndQuery, GL_QUERY_RESULT, &nEndGPUTime ); |
|
|
|
ReleaseQueryHandle( zone.m_nBeginQuery ); |
|
zone.m_nBeginQuery = 0; |
|
|
|
ReleaseQueryHandle( zone.m_nEndQuery ); |
|
zone.m_nEndQuery = 0; |
|
|
|
if ( m_nNumFinishedZones >= cMaxQueryZones ) |
|
{ |
|
Panic( "Too many finished zones!" ); |
|
} |
|
|
|
FinishedQueryZone_t &finishedZone = m_FinishedZones[m_nNumFinishedZones]; |
|
finishedZone.m_pName = zone.m_pName; |
|
finishedZone.m_nBeginGPUTime = nBeginGPUTime; |
|
finishedZone.m_nEndGPUTime = nEndGPUTime; |
|
finishedZone.m_nStackLevel = zone.m_nStackLevel; |
|
finishedZone.m_nTotalGPUWorkCount = zone.m_nTotalGPUWorkCount; |
|
m_nNumFinishedZones++; |
|
|
|
if ( !zone.m_nStackLevel ) |
|
{ |
|
std::sort( m_FinishedZones, m_FinishedZones + m_nNumFinishedZones ); |
|
FlushFinishedZones(); |
|
m_nNumFinishedZones = 0; |
|
} |
|
|
|
m_nOutstandingQueriesTail = ( m_nOutstandingQueriesTail + 1 ) % cMaxQueryZones; |
|
m_nNumOutstandingQueryZones--; |
|
} |
|
} |
|
|
|
private: |
|
bool m_bInitialized; |
|
uint m_nCurFrame; |
|
|
|
double m_flGPUToCPUOffsetInS; |
|
double m_flGPUToS; |
|
double m_flRdtscToS; |
|
double m_flSToRdtsc; |
|
|
|
enum { cMaxQueryZones = 4096, cFreeQueryPoolSize = cMaxQueryZones * 2 }; |
|
GLuint m_FreeQueryPool[cFreeQueryPoolSize ]; |
|
uint m_nFreeQueryPoolSize; |
|
|
|
GLuint AllocQueryHandle() |
|
{ |
|
if ( !m_nFreeQueryPoolSize ) |
|
{ |
|
Panic( "Out of query handles!"); |
|
} |
|
return m_FreeQueryPool[--m_nFreeQueryPoolSize]; |
|
} |
|
|
|
void ReleaseQueryHandle( GLuint nHandle ) |
|
{ |
|
if ( m_nFreeQueryPoolSize >= cFreeQueryPoolSize ) |
|
{ |
|
Panic( "Query handle error!" ); |
|
} |
|
m_FreeQueryPool[m_nFreeQueryPoolSize++] = nHandle; |
|
} |
|
|
|
struct QueryZone_t |
|
{ |
|
const char *m_pName; |
|
GLuint m_nBeginQuery; |
|
GLuint m_nEndQuery; |
|
uint m_nStackLevel; |
|
uint m_nTotalGPUWorkCount; |
|
}; |
|
|
|
QueryZone_t m_OutstandingQueryZones[cMaxQueryZones]; |
|
uint m_nOutstandingQueriesHead; // index of first outstanding query (oldest) |
|
uint m_nOutstandingQueriesTail; // index where next query goes (newest) |
|
uint m_nNumOutstandingQueryZones; |
|
|
|
enum { cMaxQueryZoneStackSize = 256 }; |
|
QueryZone_t m_QueryZoneStack[cMaxQueryZoneStackSize]; |
|
uint m_nQueryZoneStackSize; |
|
|
|
struct FinishedQueryZone_t |
|
{ |
|
const char *m_pName; |
|
GLuint64 m_nBeginGPUTime; |
|
GLuint64 m_nEndGPUTime; |
|
uint m_nStackLevel; |
|
uint m_nTotalGPUWorkCount; |
|
|
|
inline bool operator< ( const FinishedQueryZone_t &rhs ) const |
|
{ |
|
if ( m_nBeginGPUTime == rhs.m_nBeginGPUTime) |
|
return m_nStackLevel < rhs.m_nStackLevel; |
|
|
|
return m_nBeginGPUTime < rhs.m_nBeginGPUTime; |
|
} |
|
}; |
|
|
|
FinishedQueryZone_t m_FinishedZones[cMaxQueryZones]; |
|
uint m_nNumFinishedZones; |
|
|
|
uint m_nTotalSpanWorkCount; |
|
|
|
void InitRdtsc() |
|
{ |
|
m_flRdtscToS = 0.0f; |
|
m_flSToRdtsc = 0.0f; |
|
|
|
for ( uint i = 0; i < 10; i++ ) |
|
{ |
|
uint64 t0 = Plat_Rdtsc(); |
|
double d0 = Plat_FloatTime(); |
|
|
|
ThreadSleep( 250 ); |
|
|
|
uint64 t1 = Plat_Rdtsc(); |
|
double d1 = Plat_FloatTime(); |
|
|
|
double flRdtscToS = ( d1 - d0 ) / ( t1 - t0 ); |
|
double flSToRdtsc = ( t1 - t0 ) / ( d1 - d0 ); |
|
if ( flSToRdtsc > m_flSToRdtsc ) |
|
{ |
|
m_flRdtscToS = flRdtscToS; |
|
m_flSToRdtsc = flSToRdtsc; |
|
} |
|
} |
|
} |
|
|
|
void PipelineFlush() |
|
{ |
|
#ifdef HAVE_GL_ARB_SYNC |
|
GLsync nSyncObj = gGL->glFenceSync( GL_SYNC_GPU_COMMANDS_COMPLETE, 0 ); |
|
if ( nSyncObj ) |
|
{ |
|
gGL->glClientWaitSync( nSyncObj, GL_SYNC_FLUSH_COMMANDS_BIT, 300000000000ULL ); |
|
gGL->glDeleteSync( nSyncObj ); |
|
} |
|
#endif |
|
} |
|
|
|
inline void NewTimeSpan( uint64 nStartGPUTime, uint64 nEndGPUTime, const char *pName, uint nTotalDraws ) |
|
{ |
|
// apparently we must use level0 for timespans? |
|
tmBeginTimeSpanAt( TELEMETRY_LEVEL0, 1, 0, nStartGPUTime, "%s [C:%u]", pName ? pName : "", nTotalDraws ); |
|
tmEndTimeSpanAt( TELEMETRY_LEVEL0, 1, 0, nEndGPUTime, "%s [C:%u]", pName ? pName : "", nTotalDraws ); |
|
} |
|
|
|
void FlushFinishedZones() |
|
{ |
|
for ( uint i = 0; i < m_nNumFinishedZones; i++ ) |
|
{ |
|
FinishedQueryZone_t &zone = m_FinishedZones[i]; |
|
if ( !zone.m_nTotalGPUWorkCount ) |
|
continue; |
|
|
|
bool bEmit = false; |
|
if ( i == ( m_nNumFinishedZones - 1 ) ) |
|
bEmit = true; |
|
else |
|
{ |
|
FinishedQueryZone_t &nextZone = m_FinishedZones[i + 1]; |
|
bEmit = zone.m_nEndGPUTime <= nextZone.m_nBeginGPUTime; |
|
} |
|
|
|
if ( bEmit ) |
|
{ |
|
uint64 nStartGPUTime = ( ( zone.m_nBeginGPUTime * m_flGPUToS ) + m_flGPUToCPUOffsetInS ) * m_flSToRdtsc; |
|
uint64 nEndGPUTime = ( ( zone.m_nEndGPUTime * m_flGPUToS ) + m_flGPUToCPUOffsetInS ) * m_flSToRdtsc; |
|
|
|
NewTimeSpan( nStartGPUTime, nEndGPUTime, zone.m_pName, zone.m_nTotalGPUWorkCount ); |
|
|
|
m_nTotalSpanWorkCount += zone.m_nTotalGPUWorkCount; |
|
} |
|
} |
|
} |
|
|
|
void Panic( const char *pMsg ) |
|
{ |
|
DXABSTRACT_BREAK_ON_ERROR(); |
|
Error( "%s", pMsg ); |
|
} |
|
|
|
static void DbgPrintf( const char *pFmt, ... ) |
|
{ |
|
va_list vargs; |
|
va_start( vargs, pFmt ); |
|
char buf[1024]; |
|
V_vsnprintf( buf, sizeof( buf ), pFmt, vargs ); |
|
|
|
#ifdef WIN32 |
|
OutputDebugStringA( buf ); |
|
#else |
|
printf( "%s", buf ); |
|
#endif |
|
|
|
va_end( vargs ); |
|
} |
|
}; |
|
|
|
|
|
static CGPUTimestampManager g_GPUTimestampManager; |
|
|
|
void GLMGPUTimestampManagerInit() |
|
{ |
|
g_GPUTimestampManager.Init(); |
|
} |
|
|
|
void GLMGPUTimestampManagerDeinit() |
|
{ |
|
g_GPUTimestampManager.Deinit(); |
|
} |
|
|
|
ConVar gl_telemetry_gpu( "gl_telemetry_gpu", "0" ); |
|
static bool g_bPrevTelemetryGPU; |
|
|
|
void GLMGPUTimestampManagerTick() |
|
{ |
|
if ( g_bPrevTelemetryGPU != gl_telemetry_gpu.GetBool() ) |
|
{ |
|
if ( !gl_telemetry_gpu.GetBool() ) |
|
g_GPUTimestampManager.Deinit(); |
|
else |
|
{ |
|
#if !PIX_ENABLE || !GL_TELEMETRY_GPU_ZONES |
|
ConMsg( "Must define PIX_ENABLE and GL_TELEMETRY_GPU_ZONES to use this feature" ); |
|
#else |
|
g_GPUTimestampManager.Init(); |
|
#endif |
|
} |
|
|
|
g_bPrevTelemetryGPU = gl_telemetry_gpu.GetBool(); |
|
} |
|
|
|
g_GPUTimestampManager.Tick(); |
|
} |
|
|
|
#endif // !OSX |
|
|
|
static uint g_nPIXEventIndex; |
|
|
|
void GLMBeginPIXEvent( const char *str ) |
|
{ |
|
#ifndef OSX |
|
char szName[1024]; |
|
V_snprintf( szName, sizeof( szName ), "[ID:%u FR:%u] %s", g_nPIXEventIndex, g_GPUTimestampManager.GetCurFrame(), str ); |
|
const char *p = tmDynamicString( TELEMETRY_LEVEL2, szName ); //p can be null if tm is getting shut down |
|
tmEnter( TELEMETRY_LEVEL2, TMZF_NONE, "PIX %s", p ? p : "" ); |
|
|
|
g_nPIXEventIndex++; |
|
|
|
g_GPUTimestampManager.BeginZone( p ); |
|
#endif // !OSX |
|
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 ) |
|
{ |
|
#ifndef OSX |
|
g_GPUTimestampManager.EndZone(); |
|
#endif |
|
|
|
#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 ); |
|
// MoeMod : should be delete here |
|
delete 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 ] = |
|
{ |
|
" * " |
|
" * * * * * " |
|
" * * * * * *** * * ** * * * * * " |
|
" * * * ***** * * * * * * * * * * * * * * * * " |
|
" * * * * * * * * * * * * * *** * * " |
|
" * ***** *** * * * * * * * ***** ***** * " |
|
" * * * * * * * * * * * * * * * " |
|
" * * * * * * * * * * * ** ** * " |
|
" * *** * * ** * * * ** ** * " |
|
" * * * * * " |
|
" * " |
|
" " |
|
" " |
|
" *** * *** *** * ***** *** ***** *** *** * * *** " |
|
"* * ** * * * * ** * * * * * * * ** ** * * * * " |
|
"* ** * * * * * **** **** * * * * * ** ** * ***** * * " |
|
"* * * * * ** * * * * * * *** * * * * * " |
|
"** * * * * ***** * * * * * * **** * ***** * * " |
|
"* * * * * * * * * * * * * * * ** ** * * " |
|
" *** * ***** *** * *** *** * *** *** ** ** * * * " |
|
" * " |
|
" * " |
|
" " |
|
" *** " |
|
"* * *** **** *** **** ***** ***** *** * * * * * * * * * * * *** " |
|
"* * * * * * * * * * * * * * * * * * * * * ** ** ** * * * " |
|
"* * * * * * * * * * * * * * * * * * * * * * * * * * * * " |
|
"*** * ***** **** * * * **** **** * ** ***** * * ** * * * * ** * * " |
|
"* ** * * * * * * * * * * * * * * * * * * * * * * * * * " |
|
"* * * * * * * * * * * * * * * * * * * * * * * * * * * " |
|
"* * * * **** *** **** ***** * *** * * * *** * * ***** * * * * *** " |
|
" *** " |
|
" " |
|
" * " |
|
" ** * ** * " |
|
"**** *** **** *** ***** * * * * * * * * * * ***** * * * * * " |
|
"* * * * * * * * * * * * * * * * * * * * * * * * * " |
|
"* * * * * * * * * * * * * * * * * * * * * " |
|
"**** * * **** *** * * * * * * * * * * * * * * " |
|
"* * * * * * * * * * * * * * * * * * * * " |
|
"* * * * * * * * * * * ** ** * * * * * * * " |
|
"* *** * * *** * *** * * * * * * ***** * * * ****** " |
|
" * ** * ** " |
|
" " |
|
" " |
|
" * " |
|
" * * * ** * * * * * " |
|
" * * * * * * * " |
|
" **** **** *** **** *** *** **** **** * * * * * **** * ** *** " |
|
" * * * * * * * * * * * * * * * * * * * * * * * ** * * * " |
|
" * * * * * * * ***** * * * * * * * *** * * * * * * * * " |
|
" * ** * * * * * * * * * * * * * * * * * * * * * * * " |
|
" ** * **** **** **** **** * **** * * * * * * ** * * * * * *** " |
|
" * * " |
|
" *** ** " |
|
" * " |
|
" ** * ** " |
|
" * * * * ** * " |
|
" * * * * * ** *** " |
|
"**** **** * ** **** **** * * * * * * * * * * * ***** * * * ***** " |
|
"* * * * ** * * * * * * * * * * * * * * * ** * ** ***** " |
|
"* * * * * *** * * * * * * * * * * * * * * * ***** " |
|
"* * * * * * * * ** * * * * * * * * * * * * * *** " |
|
"**** **** * **** ** ** * * * * * * **** ***** * * * " |
|
"* * * ** * ** " |
|
"* * *** * " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
" " |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|