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.
4685 lines
148 KiB
4685 lines
148 KiB
![]()
4 years ago
|
//========= 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>
|
||
|
#include <sys/sysctl.h>
|
||
|
#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 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
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 ] =
|
||
|
{
|
||
|
" * "
|
||
|
" * * * * * "
|
||
|
" * * * * * *** * * ** * * * * * "
|
||
|
" * * * ***** * * * * * * * * * * * * * * * * "
|
||
|
" * * * * * * * * * * * * * *** * * "
|
||
|
" * ***** *** * * * * * * * ***** ***** * "
|
||
|
" * * * * * * * * * * * * * * * "
|
||
|
" * * * * * * * * * * * ** ** * "
|
||
|
" * *** * * ** * * * ** ** * "
|
||
|
" * * * * * "
|
||
|
" * "
|
||
|
" "
|
||
|
" "
|
||
|
" *** * *** *** * ***** *** ***** *** *** * * *** "
|
||
|
"* * ** * * * * ** * * * * * * * ** ** * * * * "
|
||
|
"* ** * * * * * **** **** * * * * * ** ** * ***** * * "
|
||
|
"* * * * * ** * * * * * * *** * * * * * "
|
||
|
"** * * * * ***** * * * * * * **** * ***** * * "
|
||
|
"* * * * * * * * * * * * * * * ** ** * * "
|
||
|
" *** * ***** *** * *** *** * *** *** ** ** * * * "
|
||
|
" * "
|
||
|
" * "
|
||
|
" "
|
||
|
" *** "
|
||
|
"* * *** **** *** **** ***** ***** *** * * * * * * * * * * * *** "
|
||
|
"* * * * * * * * * * * * * * * * * * * * * ** ** ** * * * "
|
||
|
"* * * * * * * * * * * * * * * * * * * * * * * * * * * * "
|
||
|
"*** * ***** **** * * * **** **** * ** ***** * * ** * * * * ** * * "
|
||
|
"* ** * * * * * * * * * * * * * * * * * * * * * * * * * "
|
||
|
"* * * * * * * * * * * * * * * * * * * * * * * * * * * "
|
||
|
"* * * * **** *** **** ***** * *** * * * *** * * ***** * * * * *** "
|
||
|
" *** "
|
||
|
" "
|
||
|
" * "
|
||
|
" ** * ** * "
|
||
|
"**** *** **** *** ***** * * * * * * * * * * ***** * * * * * "
|
||
|
"* * * * * * * * * * * * * * * * * * * * * * * * * "
|
||
|
"* * * * * * * * * * * * * * * * * * * * * "
|
||
|
"**** * * **** *** * * * * * * * * * * * * * * "
|
||
|
"* * * * * * * * * * * * * * * * * * * * "
|
||
|
"* * * * * * * * * * * ** ** * * * * * * * "
|
||
|
"* *** * * *** * *** * * * * * * ***** * * * ****** "
|
||
|
" * ** * ** "
|
||
|
" "
|
||
|
" "
|
||
|
" * "
|
||
|
" * * * ** * * * * * "
|
||
|
" * * * * * * * "
|
||
|
" **** **** *** **** *** *** **** **** * * * * * **** * ** *** "
|
||
|
" * * * * * * * * * * * * * * * * * * * * * * * ** * * * "
|
||
|
" * * * * * * * ***** * * * * * * * *** * * * * * * * * "
|
||
|
" * ** * * * * * * * * * * * * * * * * * * * * * * * "
|
||
|
" ** * **** **** **** **** * **** * * * * * * ** * * * * * *** "
|
||
|
" * * "
|
||
|
" *** ** "
|
||
|
" * "
|
||
|
" ** * ** "
|
||
|
" * * * * ** * "
|
||
|
" * * * * * ** *** "
|
||
|
"**** **** * ** **** **** * * * * * * * * * * * ***** * * * ***** "
|
||
|
"* * * * ** * * * * * * * * * * * * * * * ** * ** ***** "
|
||
|
"* * * * * *** * * * * * * * * * * * * * * * ***** "
|
||
|
"* * * * * * * * ** * * * * * * * * * * * * * *** "
|
||
|
"**** **** * **** ** ** * * * * * * **** ***** * * * "
|
||
|
"* * * ** * ** "
|
||
|
"* * *** * "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
" "
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|